4. ● Coincidental Cohesion: unrelated elements
● Temporal Cohesion: operations performed at the same time, e.g. initialization
● Sequential Cohesion: operations form a pipeline - one's output is another's input
● Informational Cohesion: operations are performed on the same data structure
● Functional Cohesion: all elements realize a single, well-defined task, e.g. a
function
Cohesion levels
5. ● Content Coupling: a module uses/alters data in another module
● Global-data Coupling: two modules communicate via global data
● Data-structure Coupling:
communicate via data structure passed as a parameter (more information than needed)
● Data Coupling: communicate via parameter passing (minimal information)
● No Coupling: independent modules
Coupling levels
6. A modular unit of code...
● serves a clear purpose
● easy to use
● easy to extend
● easy to replace
● survives outside changes
Single Responsibility
Liskov Substitution
Interface Segregation
Open-Closed Principle
Dependency Inversion
7. Elements inside a package...
● are used together
● change together
Common Reuse Principle
Common Closure Principle
8. Packages should...
● be as stable as they are abstract
● depend on more stable packages
● not have cycles
Stable Abstractions Principle
Stable Dependencies Principle
Acyclic Dependencies Principle
9. The Law of Demeter
"the principle of least knowledge"
A
B
E G
F
D
C
B
E