Basic Design Principles

When designing a system's architecture we try to follow the principles outlined below.

Abstraction

Abstraction is achieved in the following areas:

Refinement

Stepwise refinement is a way to tame the details and complexity of the final design.

Modularity

A modular design minimises the system's complexity and thereby the development cost and the number of possible errors. A good design method should provide:

Cohesion

A design should bring closely together parts that exhibit a high measure of cohesion. We can distinguish the following ordered types of cohesion:
  1. coincidental cohesion
  2. logical cohesion
  3. temporal cohesion
  4. procedural cohesion
  5. communicational cohesion
  6. sequential cohesion
  7. functional cohesion

Coupling

On the other hand, a design should avoid coupling between parts. We can distinguish the following ordered types of coupling:
  1. data coupling
  2. stamp coupling (copy of a part)
  3. control coupling
  4. common coupling
  5. external coupling
  6. content coupling