>We use these foundations of commonality and variation to formalize the concept of paradigm. A paradigm, as the term is popularly used in contemporary software design, is a way of organizing system abstractions around properties of common- ality and variation. The object paradigm organizes systems around abstractions based on commonality in structure and behavior and variation in structure and algorithm. The template paradigm is based on structural commonality across family members, with variations explicitly factored out into template parameters. Overloaded functions form families whose members share the same name and semantics, and in which each family member is differentiated by its formal param- eter types.
>A domain is an area of specialization or interest. We talk about the application domain—the body of knowledge that is of interest to users. Because it is of interest to users, it is hopefully of interest to us. We break down application domains into application subdomains—we divide and conquer. We talk about the solution domain, which is of central interest to the implementors but of only superficial interest to system users. Any given design may deal with multiple solution domains at once, for example, C++ constructs, patterns, and maybe state machines and parser-generators.
アプリケーションドメインはユーザが関心を持つものに対しての知識の集まり
ソリューションドメインは実装する人が関心を持つものに対しての知識の集まり
Chapter 2 Commonality Analysis p.55
2.1 Commonality: The Essence of Abstraction
2.1.1 Deductive and Inductive Commonality
2.1.2 Software Families
Finding Domains
2.2 Priming Analysis: The Domain Vocabulary
2.2.1 The Domain Dictionary
2.2.2 Design Epistemology
2.3 Dimensions of Commonality and Commonality Categories p.64
2.3.1 (Data) Structure
2.3.2 Name and Behavior
2.3.3 Algorithm p.75
2.4 Examples of Commonality
2.5 Reviewing the Commonality Analysis
2.6 Commonality and Evolution
Chapter 3 Variability Analysis p.85
3.1 Variability: The Spice of Life
3.2 The Commonality Base
3.3 Positive and Negative Variability
3.3.1 Positive Variability
3.3.2 Negative Variability
3.4 The Domain and Range of Variability
3.4.1 The Text Editing Buffers Example
3.4.2 Good Parameters of Variation
3.5 Binding Time
3.5.1 Binding Time and Flexibility
3.5.2 Are Objects about Deferred Binding?
3.5.3 Efficiency and Binding Time
3.5.4 Binding Time Alternatives p.93
Source Time
Compile Time
Link (and Load) Time
Run Time
3.6 Defaults
3.7 Variability Tables p.95
3.8 Some Variability Traps
3.9 Reviewing the Variability Analysis
3.10 Variability Dependency Graphs
Chapter 4 Application Domain Analysis
4.1 Analysis, Domain Analysis, and Beyond
4.1.1 Traditional Analysis
4.1.2 System Families: Domain Analysis
Family Members in the Application and Solution Domains
Balancing Abstraction and Specification
Levels of Domain Abstraction p.105
4.1.3 Application Domain Analysis and Solution Domain Analysis