| |
| |
Preface | |
| |
| |
From Object Orientation to Patterns to True Object Orientation | |
| |
| |
From Artificial Intellegence to Patterns to True Object Orientation | |
| |
| |
A Note About Conventions Used in This Book | |
| |
| |
Feedback | |
| |
| |
Acknowledgments | |
| |
| |
| |
An Introduction to Object-Oriented Software Development | |
| |
| |
| |
The Object-Oriented Paradigm | |
| |
| |
Overview | |
| |
| |
Before The Object-Oriented Paradigm: Functional Decomposition | |
| |
| |
The Problem of Requirements | |
| |
| |
Dealing with Changes: Using Functional Decomposition | |
| |
| |
Dealing with Changing Requirements | |
| |
| |
The Object-Oriented Paradigm | |
| |
| |
Object-Oriented Programming in Action | |
| |
| |
Special Object Methods | |
| |
| |
Summary | |
| |
| |
| |
The UML--The Unified Modeling Language | |
| |
| |
Overview | |
| |
| |
What Is the UML? | |
| |
| |
Why Use the UML? | |
| |
| |
The Class Diagram | |
| |
| |
Interaction Diagrams | |
| |
| |
Summary | |
| |
| |
| |
The Limitations of Traditional Object-Oriented Design | |
| |
| |
| |
A Problem That Cries Out for Flexible Code | |
| |
| |
Overview | |
| |
| |
Extracting Information from a CAD/CAM System | |
| |
| |
Understand the Vocabulary | |
| |
| |
Describe the Problem | |
| |
| |
The Essential Challenges and Approaches | |
| |
| |
Summary | |
| |
| |
| |
A Standard Object-Oriented Solution | |
| |
| |
Overview | |
| |
| |
Solving with Special Cases | |
| |
| |
Summary | |
| |
| |
Supplement: C++ Code Examples | |
| |
| |
| |
Design Patterns | |
| |
| |
| |
An Introduction to Design Patterns | |
| |
| |
Overview | |
| |
| |
Design Patterns Arose from Architecture and Anthropology | |
| |
| |
Moving from Architectural to Software Design Patterns | |
| |
| |
Why Study Design Patterns? | |
| |
| |
Other Advantages to Studying Design Patterns | |
| |
| |
Summary | |
| |
| |
| |
The Facade Pattern | |
| |
| |
Overview | |
| |
| |
Introducing the Facade Pattern | |
| |
| |
Learning the Facade Pattern | |
| |
| |
Field Notes: The Facade Pattern | |
| |
| |
Relating the Facade Pattern to the CAD/CAM Problem | |
| |
| |
Summary | |
| |
| |
| |
The Adapter Pattern | |
| |
| |
Overview | |
| |
| |
Introducing the Adapter Pattern | |
| |
| |
Learning the Adapter Pattern | |
| |
| |
Field Notes: The Adapter Pattern | |
| |
| |
Relating the Adapter Pattern to the CAD/CAM Problem | |
| |
| |
Summary | |
| |
| |
Supplement: C++ Code Example | |
| |
| |
| |
Expanding Our Horizons | |
| |
| |
Overview | |
| |
| |
Objects: the Traditional View and the New View | |
| |
| |
Encapsulation: the Traditional View and the New View | |
| |
| |
Find What Is Varying and Encapsulate It | |
| |
| |
Commonality/Variability and Abstract Classes | |
| |
| |
Summary | |
| |
| |
| |
The Bridge Pattern | |
| |
| |
Overview | |
| |
| |
Introducing the Bridge Pattern | |
| |
| |
Learning the Bridge Pattern: An Example | |
| |
| |
An Observation About Using Design Patterns | |
| |
| |
Learning the Bridge Pattern: Deriving It | |
| |
| |
The Bridge Pattern in Retrospect | |
| |
| |
Field Notes: Using the Bridge Pattern | |
| |
| |
Summary | |
| |
| |
Supplement: C++ Code Examples | |
| |
| |
| |
The Abstract Factory Pattern | |
| |
| |
Overview | |
| |
| |
Introducing the Abstract Factory Pattern | |
| |
| |
Learning the Abstract Factory Pattern: An Example | |
| |
| |
Learning the Abstract Factory Pattern: Implementing It | |
| |
| |
Field Notes: The Abstract Factory Pattern | |
| |
| |
Relating the Abstract Factory Pattern to the CAD/CAM Problem | |
| |
| |
Summary | |
| |
| |
Supplement: C++ Code Examples | |
| |
| |
| |
Putting It All Together: Thinking in Patterns | |
| |
| |
| |
How Do Experts Design? | |
| |
| |
Overview | |
| |
| |
Building by Adding Distinctions | |
| |
| |
Summary | |
| |
| |
| |
Solving the CAD/CAM Problem with Patterns | |
| |
| |
Overview | |
| |
| |
Review of the CAD/CAM Problem | |
| |
| |
Thinking in Patterns | |
| |
| |
Thinking in Patterns: Step 1 | |
| |
| |
Thinking in Patterns: Step 2a | |
| |
| |
Thinking in Patterns: Step 2b | |
| |
| |
Thinking in Patterns: Step 2c | |
| |
| |
Thinking in Patterns: Step 2d (Facade) | |
| |
| |
Thinking in Patterns: Step 2d (Adapter) | |
| |
| |
Thinking in Patterns: Step 2d (Abstract Factory) | |
| |
| |
Thinking in Patterns: Step 3 | |
| |
| |
Comparison with the Previous Solution | |
| |
| |
Summary | |
| |
| |
| |
The Principles and Strategies of Design Patterns | |
| |
| |
Overview | |
| |
| |
The Open-Closed Principle | |
| |
| |
The Principle of Designing from Context | |
| |
| |
The Principle of Containing Variation | |
| |
| |
Summary | |
| |
| |
| |
Handling Variations with Design Patterns | |
| |
| |
| |
The Strategy Pattern | |
| |
| |
Overview | |
| |
| |
An Approach to Handling New Requirements | |
| |
| |
Initial Requirements of the Case Study | |
| |
| |
Handling New Requirements | |
| |
| |
The Strategy Pattern | |
| |
| |
Field Notes: Using the Strategy Pattern | |
| |
| |
Summary | |
| |
| |
| |
The Decorator Pattern | |
| |
| |
Overview | |
| |
| |
A Little More Detail | |
| |
| |
The Decorator Pattern | |
| |
| |
Applying the Decorator Pattern to the Case Study | |
| |
| |
Another Example: Input/Output | |
| |
| |
Field Notes: Using the Decorator Pattern | |
| |
| |
Summary | |
| |
| |
Supplement: C++ Code Examples | |
| |
| |
| |
The Singleton Pattern and the Double-Checked Locking Pattern | |
| |
| |
Overview | |
| |
| |
Introducing the Singleton Pattern | |
| |
| |
Applying the Singleton Pattern to the Case Study | |
| |
| |
A Variant: The Double-Checked Locking Pattern | |
| |
| |
Field Notes: Using the Singleton and Double-Checked Locking Patterns | |
| |
| |
Summary | |
| |
| |
Supplement: C++ Code Examples | |
| |
| |
| |
The Observer Pattern | |
| |
| |
Overview | |
| |
| |
Categories of Patterns | |
| |
| |
More Requirements for the Case Study | |
| |
| |
The Observer Pattern | |
| |
| |
Applying the Observer to the Case Study | |
| |
| |
Field Notes: Using the Observer Pattern | |
| |
| |
Summary | |
| |
| |
Supplement: C++ Code Example | |
| |
| |
| |
The Template Method Pattern | |
| |
| |
Overview | |
| |
| |
More Requirements for the Case Study | |
| |
| |
The Template Method Pattern | |
| |
| |
Applying the Template Method to the Case Study | |
| |
| |
Field Notes: Using the Template Method Pattern | |
| |
| |
Summary | |
| |
| |
| |
The Factory Method Pattern | |
| |
| |
Overview | |
| |
| |
More Requirements for the Case Study | |
| |
| |
The Factory Method Pattern | |
| |
| |
Field Notes: Using the Factory Method Pattern | |
| |
| |
Summary | |
| |
| |
| |
The Analysis Matrix | |
| |
| |
Overview | |
| |
| |
In the Real World: Variations | |
| |
| |
Case Study in Variation: An International E-Tail System | |
| |
| |
Field Notes | |
| |
| |
Summary | |
| |
| |
| |
Endings and Beginnings | |
| |
| |
| |
Design Patterns Reviewed from the New Perspective of Object-Oriented Design | |
| |
| |
Overview | |
| |
| |
A Summary of Object-Oriented Principles | |
| |
| |
How Design Patterns Encapsulate Implementations | |
| |
| |
Commonality/Variability Analysis and Design Patterns | |
| |
| |
Decomposing a Problem Domain into Responsibilities | |
| |
| |
Relationships Within a Pattern | |
| |
| |
Patterns and Contextual Design | |
| |
| |
Field Notes | |
| |
| |
Summary | |
| |
| |
| |
Bibliography | |
| |
| |
Design Patterns Explained: The Web Site Companion | |
| |
| |
Recommended Reading on Design Patterns and Object Orientation | |
| |
| |
Recommended Reading for Java Programmers | |
| |
| |
Recommended Reading for C++ Programmers | |
| |
| |
Recommended Reading for COBOL Programmers | |
| |
| |
Recommended Reading on eXtreme Programming | |
| |
| |
Recommended Reading on General Programming | |
| |
| |
Personal Favorites | |
| |
| |
Index | |