principles:generalization_principle
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
principles:generalization_principle [2013-02-23 11:56] – +EUHM christian | principles:generalization_principle [2021-10-20 21:20] (current) – +++ restored +++ christian | ||
---|---|---|---|
Line 3: | Line 3: | ||
===== Variants and Alternative Names ===== | ===== Variants and Alternative Names ===== | ||
- | * Build Generality into Software | + | * Build Generality into Software(({{page> |
+ | * Abstractions Live Longer than Details(({{page> | ||
+ | * Rule of Power (RoP) | ||
===== Context ===== | ===== Context ===== | ||
* [[contexts: | * [[contexts: | ||
+ | * [[contexts: | ||
+ | * [[contexts: | ||
+ | * [[contexts: | ||
+ | * [[contexts: | ||
+ | |||
===== Principle Statement ===== | ===== Principle Statement ===== | ||
Line 21: | Line 27: | ||
A general solution abstracts from the specific tasks and solves a superset of them. Parameterization of some kind is used to specify what has to be done in a given situation. | A general solution abstracts from the specific tasks and solves a superset of them. Parameterization of some kind is used to specify what has to be done in a given situation. | ||
+ | A module can be more general than another one. But there are two aspects of this: First of all there is functionality. If module '' | ||
===== Rationale ===== | ===== Rationale ===== | ||
Line 30: | Line 36: | ||
===== Strategies ===== | ===== Strategies ===== | ||
- | + | * Make modules configurable at runtime or deployment time by using configuration files. | |
- | * Use parameterizable modules | + | * Use parameterizable modules(method parameters, object attributes, parametric types, etc.) |
+ | * Use constants | ||
* Find suitable abstractions | * Find suitable abstractions | ||
+ | |||
===== Caveats ===== | ===== Caveats ===== | ||
- | Making a [[glossary: | + | Making a [[glossary: |
- | Another problem is the [[wp>turing tarpit]]. This means that the module is so general that arbitrarily complex tasks can be performed but those of interest, meaning the rather simple tasks that occur over and over again, are also difficult to do. This is a violation of the [[Easy to Use and hard to Misuse|EUHM]] principle. | + | Another problem is the [[anti-patterns: |
See also section [[#contrary principles]]. | See also section [[#contrary principles]]. | ||
Line 44: | Line 52: | ||
===== Origin ===== | ===== Origin ===== | ||
- | FIXME | + | The term " |
+ | |||
+ | {{page> | ||
===== Evidence ===== | ===== Evidence ===== | ||
Line 66: | Line 77: | ||
* **[[Keep It Simple Stupid]] (KISS)**: A generalized solution is typically not simple anymore. This is the typical conflict between generality and simplicity. | * **[[Keep It Simple Stupid]] (KISS)**: A generalized solution is typically not simple anymore. This is the typical conflict between generality and simplicity. | ||
* [[Easy to Use and Hard to Misuse]] (EUHM): Too general solutions may lead to complicated usage of the module. | * [[Easy to Use and Hard to Misuse]] (EUHM): Too general solutions may lead to complicated usage of the module. | ||
+ | * [[Rule of Explicitness]] (RoE): RoE often results in specific solutions. Generality often requires stating something implicitly. | ||
==== Complementary Principles ==== | ==== Complementary Principles ==== | ||
Line 77: | Line 88: | ||
{{page> | {{page> | ||
- | ===== Example | + | ===== Examples |
===== 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: | + | [[wiki: |
/ | / | ||
Line 89: | Line 100: | ||
===== Further Reading ===== | ===== Further Reading ===== | ||
- | * | + | |
+ | |||
+ | ===== Discussion ===== | ||
+ | |||
+ | Discuss this wiki article and the principle on the corresponding [[talk: | ||
principles/generalization_principle.txt · Last modified: 2021-10-20 21:20 by christian