principles:low_coupling
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:low_coupling [2013-08-10 12:23] – [Description Status] christian | principles:low_coupling [2021-09-02 12:46] – old revision restored (2021-05-11 22:05) 65.21.179.175 | ||
---|---|---|---|
Line 7: | Line 7: | ||
===== Context ===== | ===== Context ===== | ||
/* fill in contexts here: */ | /* fill in contexts here: */ | ||
- | * [[contexts: | + | * [[contexts: |
- | * [[contexts: | + | |
- | * [[contexts: | + | |
Line 20: | Line 18: | ||
A module should not interact with too many other modules. Furthermore if a module //A// interacts with another module //B//, this interaction should be loose, which means that //A// should not make too many assumptions about //B//. | A module should not interact with too many other modules. Furthermore if a module //A// interacts with another module //B//, this interaction should be loose, which means that //A// should not make too many assumptions about //B//. | ||
- | |||
- | Coupling is a measure of dependency between modules. The more dependencies there are, the stronger the dependencies are, and the more assumptions are made upon other modules, the higher is the coupling. | ||
- | |||
- | There are different forms of couplings which can be rated according to their strength((G. J. Myers: //Reliable Software through Composite Design//)): | ||
- | |||
- | * //No coupling//: The modules do not know each other. | ||
- | * //Call coupling//: A module calls another one. | ||
- | * //Data coupling//: A module calls another one passing parameters to it. | ||
- | * //Stamp coupling//: A module calls another one passing complex parameters to it. | ||
- | * //Control coupling//: A module influences the control flow of another module. | ||
- | * //External coupling//: The modules communicate using a simple global variable. | ||
- | * //Common coupling//: The modules communicate using a common global data structure. | ||
- | * //Content coupling//: A modules depends on the inner working of another module. This is the strongest form of coupling. | ||
- | |||
- | The forms ranging from no coupling to stamp coupling can be considered " | ||
- | |||
- | There are also some additional forms of undesirable couplings: | ||
- | |||
- | * //Tramp coupling//: A module is only coupled to a data structure because some other module needs the data. The module gets the data and passes it to the other module without touching the "tramp data" ((M. Page-Jones: //The Practical Guide to Structured Systems Design//)). | ||
- | * //Logical coupling//: A module makes some assumptions about another module without referencing it. For example a module //A// only sorts a list because some other module //B// which //A// technically does not know about needs it sorted. | ||
Line 53: | Line 31: | ||
===== Strategies ===== | ===== Strategies ===== | ||
- | * Indirection: | + | * Indirection: |
* Dependency Inversion/ | * Dependency Inversion/ | ||
- | * Use lower form of coupling | + | * Use lower form of coupling: |
- | * Merge modules: | + | * Merge modules: |
- | * Hide information: Information which is hidden cannot be depended upon. | + | * Hide information |
===== Caveats ===== | ===== Caveats ===== | ||
Line 70: | Line 48: | ||
===== Origin ===== | ===== Origin ===== | ||
/* the *primary* source */ | /* the *primary* source */ | ||
- | * W. P. Stevens, | + | |
===== Evidence ===== | ===== Evidence ===== | ||
Line 76: | Line 54: | ||
/* * [[wiki: | /* * [[wiki: | ||
- | * [[wiki: | + | * [[wiki: |
- | * [[wiki: | + | * [[wiki: |
/* * [[wiki: | /* * [[wiki: | ||
Line 113: | Line 91: | ||
===== Description Status ===== | ===== Description Status ===== | ||
/* Choose one of the following and comment out the rest: */ | /* Choose one of the following and comment out the rest: */ | ||
- | /*[[wiki: | + | [[wiki: |
- | + | / | |
- | [[wiki: | + | |
/ | / | ||
===== Further Reading ===== | ===== Further Reading ===== | ||
- | * Albert Endres and Dieter Rombach: //[[resources: | + | * Albert Endres and Dieter Rombach: //A Handbook of Software and Systems Engineering// |
* [[wp> | * [[wp> | ||
* [[wiki> | * [[wiki> | ||
* Martin Fowler: // | * Martin Fowler: // | ||
- | * {{page> | + | * Craig Larman: //Applying UML and Patterns |
- | + | ||
- | ===== Discussion ===== | + | |
- | Discuss this wiki article and the principle on the corresponding [[talk: |
principles/low_coupling.txt · Last modified: 2021-10-18 21:49 by christian