principles:encapsulate_the_concept_that_varies
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revisionLast revisionBoth sides next revision | ||
principles:encapsulate_the_concept_that_varies [2021-09-02 12:26] – old revision restored (2021-05-19 11:22) 65.21.179.175 | principles:encapsulate_the_concept_that_varies [2021-10-18 21:31] – old revision restored (2019-10-07 08:29) christian | ||
---|---|---|---|
Line 5: | Line 5: | ||
===== Context ===== | ===== Context ===== | ||
/* fill in contexts here: */ | /* fill in contexts here: */ | ||
- | * [[contexts: | + | * [[contexts: |
+ | * [[contexts: | ||
+ | * [[contexts: | ||
===== Principle Statement ===== | ===== Principle Statement ===== | ||
Line 47: | Line 48: | ||
* Visitor: New operations have to be added to a given more or less static inheritance structure of classes. | * Visitor: New operations have to be added to a given more or less static inheritance structure of classes. | ||
* ... | * ... | ||
+ | |||
+ | ===== Caveats ===== | ||
+ | |||
+ | See section [[#contrary principles]]. | ||
+ | |||
===== Origin ===== | ===== Origin ===== | ||
+ | |||
+ | The principle is stated, explained and used in the GoF book: | ||
Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: // | Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: // | ||
+ | |||
+ | But the idea if ECV is actually much older. It was first presented in | ||
+ | |||
+ | David Parnas: // | ||
+ | |||
===== Evidence ===== | ===== Evidence ===== | ||
Line 64: | Line 77: | ||
==== Generalizations ==== | ==== Generalizations ==== | ||
- | |||
- | * [[Generalization Principle]] (GP): Encapsulating a varying concept typically results in a more generally applicable solution. This is especially true when an abstract concept is encapsulated by introducing an interface or an abstract class. | ||
==== Specializations ==== | ==== Specializations ==== | ||
Line 75: | Line 86: | ||
* **[[More Is More Complex]] (MIMC)**: ECV demands adding a new class for a new varying concept. | * **[[More Is More Complex]] (MIMC)**: ECV demands adding a new class for a new varying concept. | ||
- | | + | * [[Model Principle]] (MP): ECV sometimes results in classes which do not correspond |
- | | + | |
==== Complementary Principles ==== | ==== Complementary Principles ==== | ||
- | * [[Dependency Inversion Principle]] (DIP): ECV may result | + | * [[Low Coupling]] (LC): ECV results |
* [[Liskov Substitution Principle]] (LSP): ECV may result in the introduction of an abstract base class. Here it is important to get the abstraction right. Otherwise LSP may be violated. | * [[Liskov Substitution Principle]] (LSP): ECV may result in the introduction of an abstract base class. Here it is important to get the abstraction right. Otherwise LSP may be violated. | ||
- | + | * [[Generalization Principle]] (GP): Encapsulating a varying concept typically results in a more generally applicable solution. This is especially true when an abstract concept is encapsulated by introducing an interface or an abstract class. | |
+ | * [[Dependency Inversion Principle]] (DIP): ECV may result in the introduction of an abstract base class. Here DIP demands that other classes should only depend on this new abstract base class and not on the concrete subclasses. | ||
+ | * [[Information Hiding/ | ||
==== Principle Collections ==== | ==== Principle Collections ==== | ||
Line 89: | Line 100: | ||
- | ===== Example | + | ===== Examples |
Line 102: | Line 113: | ||
* Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides: // | * Erich Gamma, Richard Helm, Ralph Johnson and John Vlissides: // | ||
| | ||
- | * Bertrand Meyer: //[[wp> | + | * [[Single Responsibility Principle]] |
- | * Robert C. Martin: //Agile Software Development, | + | * [[Open-Closed Principle]] |
- | * [[http:// | + | |
+ | ===== Discussion ===== | ||
+ | |||
+ | Discuss this wiki article |
principles/encapsulate_the_concept_that_varies.txt · Last modified: 2021-10-18 21:31 by christian