Table of Contents

Preface xi

CHAPTER 1 Introduction: The Need for Multiple Paradigms 1

Domain Engineering and Multiple Paradigms 1
Design, Analysis, Domains, and Families: Term Definitions 4
Beyond Objects 10
Commonality and Variability Analysis 12
Software Families 13
Multi-Paradigm Design 15
Multi-Paradigm Development and Programming Language 18
Commonality Analysis: Other Perspectives 23
Summary 27

CHAPTER 2 Commonality Analysis 29

Commonality: The Essence of Abstraction 29
Priming Analysis: The Domain Vocabulary 35
Dimensions of Commonality and Commonality Categories 39
Examples of Commonality 53
Reviewing the Commonality Analysis 59
Commonality and Evolution 59
Summary 61

CHAPTER 3 Variability Analysis 63

Variability: The Spice of Life 63
The Commonality Base 65
Positive and Negative Variability 66
The Domain and Range of Variability 69
Binding Time 71
Defaults 75
Variability Tables 76
Some Variability Traps 77
Reviewing the Variability Analysis 78
Variability Dependency Graphs 79
Summary 80

CHAPTER 4 Application Domain Analysis 81

Analysis, Domain Analysis, and Beyond 81
Subdomains within a Domain Analysis 90
The Structure of a Subdomain 97
Analysis: The Big Picture 102
Summary 104

CHAPTER 5 Object-Oriented Analysis 107

About Paradigms and Objects 107
Object-Oriented Commonality Analysis 114
Summary 118

CHAPTER 6 Solution Domain Analysis 119

The "Other" Domain 119
The C++ Solution Domain: An Overview 121
Data 122
Overloading 122
Class Templates 123
Function Templates 124
Inheritance 125
Virtual Functions 132
Commonality Analysis and Polymorphism 133
Preprocessor Directives 134
Negative Variability 135
A Summary of the C++ Solution Domain: A Family Table 151

CHAPTER 7 Simple Mixing of Paradigms 153

Putting It All Together: An Overview of Multi-Paradigm Design 153
Activities of Multi-Paradigm Design 162
Example: A Simple Language Translator 168
Design, Not Analysis 181
Another Example: Automatic Differentiation 182
Outboard Paradigms 192
Management Issues 193
Summary 199

CHAPTER 8 Weaving Paradigms Together 201

Method and Design 201
Commonality Analysis: What Dimension of Commonality? 202
Multiple Paradigms: Multiple Dimensions of Variability in One Set of Commonalities 204
Codependent Domains 210
Design and Structure 227
Another Example: A Finite-State Machine 232
Pattern-Based Solution Strategies 239
Summary 239

CHAPTER 9 Augmenting the Solution Domain with Patterns 241

The Value of Idioms and Patterns 241
Commonality and Variability in Common Patterns 248
Patterns of Negative Variability 256
Multi-Paradigm Tools as a Patterns Adjunct 259
Summary 260

References 261
Index 265