Design concepts

1. Abstractions

  • Many levels of abstraction. Highest level of abstraction: Solution is stated in broad terms using the language of the problem environment

  • Lower levels of abstraction: More detailed description of the solution is provided

  • Procedural abstraction – Refers to a sequence of instructions that perform a specific and limited function

  • Data abstraction – Named collection of data that describe a data object

2. Architecture

Structure organization of program components (modules) and their interconnection

Architecture models

(a) Structural models – An organized collection of program components
(b) Framework models – Represents the design in more abstract way
(c) Dynamic models – Represents the behavioral aspects indicating changes as a function of external events
(d) Process models – Focus on the design of the business or technical process

3. Patterns

Provides a description to enable a designer to determine the following:

(a) Whether the pattern is applicable to the current work
(b) Whether the pattern can be reused
(c) Whether the pattern can serve as a guide for developing a similar but functionally or structurally different pattern

4. Modularity

Software is divided into separately named and addressable components, sometimes called modules, that are integrated to satisfy problem requirements.

5. Information hiding

  • Information contained within a module is inaccessible to other modules who do not need such information.

  • Achieved by defining a set of independent modules that communicate with one another only that information necessary to achieve software function.

  • Provides the greatest benefits when modifications are required during testing and later.

  • Errors introduced during modification are less likely to propagate to other locations within the software.

6. Functional independence

A direct outgrowth of modularity, abstraction and information hiding.
Achieved by developing a module with single-minded function and an aversion to excessive interaction with other modules.
Easier to develop and have simple interface.
Easier to maintain because secondary effects caused by design or code modification are limited, error propagation is reduced and reusable modules are possible.

Independence is assessed by two quantitative criteria:

(1) Cohesion
(2) Coupling

Cohesion – Performs a single task requiring little interaction with other components
Coupling – Measure of interconnection among modules. Coupling should be low and cohesion should be high for good design.

7. Refinement and refactoring

  • Refinement – Process of elaboration from high level abstraction to the lowest level abstraction. High level abstraction begins with a statement of functions. Refinement causes the designer to elaborate providing more and more details at successive level of abstractions. Abstraction and refinement are complementary concepts.

  • Refactoring – Organization technique that simplifies the design of a component without changing its function or behavior. Examines for redundancy, unused design elements and inefficient or unnecessary algorithms.

8. Design classes

  • Class represents a different layer of design architecture.

Five types of design classes:

  1. User interface class – Defines all abstractions that are necessary for human computer interaction

  2. Business domain class – Refinement of the analysis classes that identify attributes and services to implement some of business domain

  3. Process class – Implements lower level business abstractions required to fully manage the business domain classes

  4. Persistent class – Represent data stores that will persist beyond the execution of the software

  5. System class – Implements management and control functions to operate and communicate within the computer environment and with the outside world