| |
| |
Foreword | |
| |
| |
| |
Foreword | |
| |
| |
| |
Preface | |
| |
| |
| |
Design Concepts | |
| |
| |
Object Machinery | |
| |
| |
Roles | |
| |
| |
Object Role Stereotypes | |
| |
| |
Roles, Responsibilities, and Collaborations | |
| |
| |
Object Contracts | |
| |
| |
Conditions-of-Use and Aftereffect Guarantees | |
| |
| |
Domain Objects | |
| |
| |
Application-Specific Objects | |
| |
| |
Interfaces | |
| |
| |
Classes | |
| |
| |
Two Roles | |
| |
| |
Composition | |
| |
| |
Inheritance | |
| |
| |
Object Organizations | |
| |
| |
Components | |
| |
| |
Patterns | |
| |
| |
Applying Double Dispatch to a Specific Problem | |
| |
| |
The Real Benefits of Using Patterns | |
| |
| |
Frameworks, Inc. | |
| |
| |
Architecture | |
| |
| |
Architectural Styles | |
| |
| |
Centralized Control Style | |
| |
| |
Dispersed Control: No Centers | |
| |
| |
Delegated Control | |
| |
| |
Examining Interactions: A Layered Architecture Example | |
| |
| |
Locating Objects in Layers | |
| |
| |
Design Description | |
| |
| |
Summary | |
| |
| |
Further Reading | |
| |
| |
| |
Responsibility-Driven Design | |
| |
| |
A Process for Seeing, Describing, and Designing | |
| |
| |
Launching the Production: Project Definition and Planning | |
| |
| |
Setting the Stage: Early Description | |
| |
| |
Staging the Production: Design | |
| |
| |
"Seeing" from Multiple Perspectives | |
| |
| |
Writing the Script: Analysis Descriptions | |
| |
| |
Usage Descriptions | |
| |
| |
Other Specifications | |
| |
| |
Glossaries | |
| |
| |
Conceptual Objects | |
| |
| |
Casting the Characters: Exploratory Design | |
| |
| |
CRC Cards | |
| |
| |
Inventions: Using Patterns | |
| |
| |
Pursuing a Solution | |
| |
| |
Bouncing Between Ideas and Details | |
| |
| |
Tuning the Production: Design Refinement | |
| |
| |
Designing for Flexibility and Extension | |
| |
| |
Designing for Reliability | |
| |
| |
Making Our Design Predictable, Consistent, and Comprehensible | |
| |
| |
Summary | |
| |
| |
Further Reading | |
| |
| |
| |
Finding Objects | |
| |
| |
A Discovery Strategy | |
| |
| |
Looking for Objects and Roles, and Then Classes | |
| |
| |
Why Tell a Design Story? | |
| |
| |
Search Strategies | |
| |
| |
What's in a Name? | |
| |
| |
Describing Candidates | |
| |
| |
Characterizing Candidates | |
| |
| |
Connecting Candidates | |
| |
| |
Looking for Common Ground | |
| |
| |
Defend Candidates and Look for Others | |
| |
| |
Summary | |
| |
| |
Further Reading | |
| |
| |
| |
Responsibilities | |
| |
| |
What Are Responsibilities? | |
| |
| |
Where Do Responsibilities Come From? | |
| |
| |
Strategies for Assigning Responsibilities | |
| |
| |
Recording Responsibilities | |
| |
| |
Making Initial Assignments | |
| |
| |
Getting Unstuck | |
| |
| |
Implementing Objects and Responsibilities | |
| |
| |
Testing Your Candidates' Quality | |
| |
| |
Summary | |
| |
| |
Further Reading | |
| |
| |
| |
Collaborations | |
| |
| |
What Is Object Collaboration? | |
| |
| |
Preparing for Collaboration | |
| |
| |
Recording Candidate Collaborations | |
| |
| |
The Design Story for the Speak for Me Software | |
| |
| |
Collaboration Options | |
| |
| |
Who's In Control? | |
| |
| |
How Much Should Objects Trust One Another? | |
| |
| |
Strategies for Identifying Collaborations | |
| |
| |
Looking at an Individual Object's Role: Stereotypes Imply Collaborations | |
| |
| |
Looking at Individual Responsibilities: They Imply Collaborations | |
| |
| |
Designing the Details of a Complex Responsibility | |
| |
| |
Designing Collaborations for a Specific Task | |
| |
| |
Identifying Applicable Patterns | |
| |
| |
Identifying How Architecture Influences Collaborations | |
| |
| |
Solving Problems in Collaborations | |
| |
| |
Simulating Collaborations | |
| |
| |
Planning a Simulation | |
| |
| |
Running a Simulation | |
| |
| |
Designing Good Collaborations | |
| |
| |
The Law of Demeter: A Case Study | |
| |
| |
Making Collaborations Possible | |
| |
| |
Guidelines for Making Connections | |
| |
| |
Designing Reliable Collaborations | |
| |
| |
When Are We Finished? | |
| |
| |
Summary | |
| |
| |
Further Reading | |
| |
| |
| |
Control Style | |
| |
| |
What Is Control Style? | |
| |
| |
Control Style Options | |
| |
| |
Making Trade-offs | |
| |
| |
Centralizing Control | |
| |
| |
Delegating Control | |
| |
| |
The Limits of Control Decisions | |
| |
| |
Developing Control Centers | |
| |
| |
A Case Study: Control Style for External User Events | |
| |
| |
Centralizing Control in the MessageBuilder | |
| |
| |
Refactoring Decision Making into State Methods within the MessageBuilder | |
| |
| |
Abstracting Away Decisions | |
| |
| |
Delegating More Responsibility | |
| |
| |
Designing the Control Style for the Guessing Neighborhood | |
| |
| |
Designing a Similar Control Center: Can We Be Consistent? | |
| |
| |
Summary | |
| |
| |
| |
Describing Collaborations | |
| |
| |
Telling Collaboration Stories | |
| |
| |
A Strategy for Developing a Collaboration Story | |
| |
| |
Establishing Scope, Depth, and Tone | |
| |
| |
Listing What You Will Cover | |
| |
| |
Deciding on the Level of Detail | |
| |
| |
Showing a Bird's-Eye View | |
| |
| |
Showing Collaborators Only | |
| |
| |
Showing a Sequence of Interactions Among Collaborators | |
| |
| |
Showing an In-Depth View | |
| |
| |
Showing a Focused Interaction | |
| |
| |
Showing an Implementation View | |
| |
| |
Showing How to Adapt a Collaboration | |
| |
| |
Where UML Diagrams Fall Short | |
| |
| |
Choosing the Appropriate Form | |
| |
| |
Tell It, Draw It, Describe It: Guidelines | |
| |
| |
Organizing Your Work | |
| |
| |
Adding Emphasis | |
| |
| |
Unfolding Your Story | |
| |
| |
Understanding What's Fundamental | |
| |
| |
Putting It All Together | |
| |
| |
Preserving Stories | |
| |
| |
Summary | |
| |
| |
Further Reading | |
| |
| |
| |
Reliable Collaborations | |
| |
| |
Understanding the Consequences of Failure | |
| |
| |
Increasing Your System's Reliability | |
| |
| |
Determining Where Collaborations Can Be Trusted | |
| |
| |
Trusted Versus Untrusted Collaborations | |
| |
| |
Implications of Trust | |
| |
| |
Identifying Collaborations to Be Made Reliable | |
| |
| |
What Use Cases Tell Us | |
| |
| |
Distinguish Between Exceptions and Errors | |
| |
| |
Object Exceptions Versus Use Case Exceptions | |
| |
| |
Object Exception Basics | |
| |
| |
Exception- and Error-Handling Strategies | |
| |
| |
Determining Who Should Take Action | |
| |
| |
Designing a Solution | |
| |
| |
Brainstorm Exception Conditions | |
| |
| |
Limit Your Scope | |
| |
| |
Record Exception-Handling Policies | |
| |
| |
Documenting Your Exception-Handling Designs | |
| |
| |
Specifying Formal Contracts | |
| |
| |
Reviewing Your Design | |
| |
| |
Summary | |
| |
| |
Further Reading | |
| |
| |
| |
Flexibility | |
| |
| |
What Does It Mean to Be Flexible? | |
| |
| |
Degrees of Flexibility | |
| |
| |
The Consequences of a Flexible Solution | |
| |
| |
Nailing Down Flexibility Requirements | |
| |
| |
Recording Variations | |
| |
| |
Variations and Realizations | |
| |
| |
Identifying the Impact of a Variation | |
| |
| |
Exploring Strategies for Realizing Flexibility | |
| |
| |
Using Templates and Hooks to Support Variations | |
| |
| |
The Role of Patterns in Flexible Designs | |
| |
| |
Varying an Object's Behavior with the Strategy Pattern | |
| |
| |
Hiding Interacting Objects with Mediator | |
| |
| |
Making a Predefined Object or System Fit Using Adapter | |
| |
| |
How Do Patterns Increase Flexibility? | |
| |
| |
How to Document a Flexible Design | |
| |
| |
Consider Your Audience | |
| |
| |
Describing How to Make a Variation | |
| |
| |
Changing a Working System's Design | |
| |
| |
Summary | |
| |
| |
Further Reading | |
| |
| |
| |
On Design | |
| |
| |
The Nature of Software Design | |
| |
| |
Tackling Core Design Problems | |
| |
| |
Frame the Problem | |
| |
| |
Dealing with Revealing Design Problems | |
| |
| |
A Story About Managing Shared Information | |
| |
| |
A Story About Connection Problem Complexity | |
| |
| |
A Story About a Design Problem That Never Got Easier | |
| |
| |
Can Revealing Problems Be Wicked, Too? | |
| |
| |
Strategies for Solving Revealing Problems | |
| |
| |
Redefining the Problem | |
| |
| |
Synthesizing a Solution | |
| |
| |
Working on the Rest | |
| |
| |
Designing Responsibly | |
| |
| |
Further Reading | |
| |
| |
Bibliography | |
| |
| |
Index | |