principles:high_cohesion
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionNext revisionBoth sides next revision | ||
principles:high_cohesion [2013-02-06 13:54] – [Contrary Principles] -KISS; see MIMC christian | principles:high_cohesion [2021-09-02 12:37] – old revision restored (2021-05-11 21:54) 65.21.179.175 | ||
---|---|---|---|
Line 6: | Line 6: | ||
===== Context ===== | ===== Context ===== | ||
/* fill in contexts here: */ | /* fill in contexts here: */ | ||
- | * [[contexts: | + | * [[contexts: |
+ | * [[contexts: | ||
+ | * [[contexts: | ||
Line 25: | Line 27: | ||
===== Strategies ===== | ===== Strategies ===== | ||
+ | |||
+ | * Divide one large module into several smaller but more cohesive ones | ||
+ | ===== Caveats ===== | ||
+ | |||
+ | See section [[#contrary principles]]. | ||
===== Origin ===== | ===== Origin ===== | ||
- | /* the *primary* source */ | ||
Line 36: | Line 42: | ||
* [[wiki: | * [[wiki: | ||
- | * [[wiki: | + | * [[wiki: |
/ | / | ||
Line 47: | Line 53: | ||
==== Specializations ==== | ==== Specializations ==== | ||
- | * [[Information Expert]]: Adhering to information expert means that a module only has responsibilities which belong together. So this increases cohesion. | + | * [[Constantine' |
- | * [[Constantine' | + | * [[Single Responsibility Principle]] (SRP): SRP is a stronger version of HC. |
+ | * [[Interface Segregation Principle]] (ISP): ISP is the application of HC to interfaces. | ||
==== Contrary Principles ==== | ==== Contrary Principles ==== | ||
* [[More Is More Complex]] (MIMC): Making a module highly cohesive often results in additional modules. Sometimes it is simpler to assign a minor unrelated responsibility to a module, which lowers the cohesion. | * [[More Is More Complex]] (MIMC): Making a module highly cohesive often results in additional modules. Sometimes it is simpler to assign a minor unrelated responsibility to a module, which lowers the cohesion. | ||
+ | * [[Model Principle]] (MP): Adhering to HC sometimes means to split up a class into several smaller ones which might correspond to the model less well. | ||
+ | * [[Low Coupling]] (LC): A system consisting of one single module has a very low coupling as there are no dependencies on other modules. But such a system also has low cohesion. The other extreme, very many highly cohesive modules, naturally has a higher coupling between the modules. So here a compromise has to be found. | ||
==== Complementary Principles ==== | ==== Complementary Principles ==== | ||
- | * [[Low Coupling]] | + | * [[Tell don't Ask/ |
- | * [[Principle of Least Surprise]] | + | * [[Encapsulate the Concept that Varies]] (ECV): Adhering to HC often results in modules to be split up into several more cohesive ones. ECV gives further advice on how to do that. |
==== Principle Collections ==== | ==== Principle Collections ==== | ||
Line 66: | Line 75: | ||
- | ===== Example | + | ===== Examples |
Line 80: | Line 89: | ||
* [[wp> | * [[wp> | ||
* [[wiki> | * [[wiki> | ||
+ | * Craig Larman: //Applying UML and Patterns – An Introduction to Object-Oriented Analysis and Design and Iterative Development// | ||
+ | |||
+ | ===== Discussion ===== | ||
+ | Discuss this wiki article and the principle on the corresponding [[talk: |
principles/high_cohesion.txt · Last modified: 2021-10-18 21:36 by christian