When designing a system's architecture we try to follow the
principles outlined below.
Abstraction
Abstraction is achieved in the following areas:
procedural abstraction
data abstraction
control abstraction
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:
modular decomposability
modular composability
individual modular understandability
modular continuity
(in changes: minimize the modules affected by any change)
modular protection:
a problem in one part should not create problems in others
Cohesion
A design should bring closely together parts that exhibit a
high measure of cohesion.
We can distinguish the following ordered types of cohesion:
coincidental cohesion
logical cohesion
temporal cohesion
procedural cohesion
communicational cohesion
sequential cohesion
functional cohesion
Coupling
On the other hand, a design should avoid coupling between
parts.
We can distinguish the following ordered types of coupling: