Chapter 1 Programming by Intention
Programming by Intention: A Demonstration
Readability and Expressiveness
Chapter 2 Separate Use from Construction
Other Practical Considerations
Chapter 3 Define Tests Up Front
A Trim Tab: Testing and Testability
Setting Ourselves Up for Change
A Reflection on Up-Front Testing
Improving Clarity of Scope: Avoiding Excess Work
Chapter 4 Shalloway’s Law and Shalloway’s Principle
The Role of Design Patterns in Reducing Redundancy
Few Developers Spend a Lot of Time Fixing Bugs
Redundancy and Other Code Qualities
Unencapsulated Code: The Sabotage of the Global Variable
Encapsulation of Member Identity
The Difficulty of Encapsulating Reference Objects
Breaking Encapsulation with Get()
Practical Advice: Encapsulate Your Impediments
Chapter 6 Interface-Oriented Design
Mock Implementations of Interfaces
Interfaces and Abstract Classes
Dependency Inversion Principle
Chapter 7 Acceptance Test–Driven Development (ATDD)
Implementing the Acceptance Tests
What to Do If the Customer Won’t Tell You
Chapter 8 Avoid Over- and Under-Design
The Pathologies of Code Qualities
Minimize Complexity and Rework
Never Make Your Code Worse/Only Degrade Your Code Intentionally
Keep Your Code Easy to Change, Robust, and Safe to Change
A Strategy for Writing Modifiable Code in a Non-Object-Oriented or Legacy System
Chapter 9 Continuous Integration
Multiple Versions: Specialization Branching
Working in Isolation: Development Branching
Test-Driven Development and Merge Cost
Continuous Integration Servers
Chapter 10 Commonality and Variability Analysis
Using Nouns and Verbs as a Guide: Warning, Danger Ahead!
Commonality and Variability Analysis
Object-Oriented Design Captures All Three Perspectives
A New Paradigm for Finding Objects
Tips for Finding Your Concepts and Variations with an Example
The Analysis Matrix: A Case Study
Selecting the Stories to Analyze
Chapter 11 Refactor to the Open-Closed
Refactoring and Legacy Systems
Refactoring to the Open-Closed
Chapter 12 Needs versus Capabilities Interfaces
Coupling, Damned Coupling, and Dependencies
The Ideal Separation: Needs Interfaces and Capabilities Interfaces
Chapter 13 When and How to Use Inheritance
Initial Vectors, Eventual Results
The Use of Inheritance versus Delegation
Applying the Lessons from the Gang of Four to Agile Development
Appendix A Overview of the Unified Modeling Language (UML)
Class Diagrams Also Show Relationships
Showing the “has-a” Relationship
Composition versus Aggregation
Indicating the Number of Things Another Object Has
Christmas-Tree Lights: An Analogy
Appendix C Encapsulating Primitives
Encapsulating Primitives in Abstract Data Types
18.117.234.225