| | Copyright |
| | Robert C. Martin Series |
| | Foreword |
| | Foreword |
| | Preface |
| | Acknowledgments |
| | About the Authors |
| | Section I. Agile Development |
| | | Chapter 1. Agile Practices |
| | | The Agile Alliance |
| | | Principles |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 2. Overview of Extreme Programming |
| | | The Practices of Extreme Programming |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 3. Planning |
| | | Initial Exploration |
| | | Release Planning |
| | | Iteration Planning |
| | | Defining "Done" |
| | | Task Planning |
| | | Iterating |
| | | Tracking |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 4. Testing |
| | | Test-Driven Development |
| | | Acceptance Tests |
| | | Serendipitous Architecture |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 5. Refactoring |
| | | A Simple Example of Refactoring: Generating Primes |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 6. A Programming Episode |
| | | The Bowling Game |
| | | Conclusion |
| | | Overview of the Rules of Bowling |
| | Section II. Agile Design |
| | | Chapter 7. What Is Agile Design? |
| | | Design Smells |
| | | Why Software Rots |
| | | The Copy Program |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 8. The Single-Responsibility Principle (SRP) |
| | | Defining a Responsibility |
| | | Separating Coupled Responsibilities |
| | | Persistence |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 9. The Open/Closed Principle (OCP) |
| | | Description of OCP |
| | | The Shape Application |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 10. The Liskov Substitution Principle (LSP) |
| | | Violations of LSP |
| | | Factoring Instead of Deriving |
| | | Heuristics and Conventions |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 11. The Dependency-Inversion Principle (DIP) |
| | | Layering |
| | | A Simple DIP Example |
| | | The Furnace Example |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 12. The Interface Segregation Principle (ISP) |
| | | Interface Pollution |
| | | Separate Clients Mean Separate Interfaces |
| | | Class Interfaces versus Object Interfaces |
| | | The ATM User Interface Example |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 13. Overview of UML for C# Programmers |
| | | Class Diagrams |
| | | Object Diagrams |
| | | Collaboration Diagrams |
| | | State Diagrams |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 14. Working with Diagrams |
| | | Why Model? |
| | | Making Effective Use of UML |
| | | Iterative Refinement |
| | | When and How to Draw Diagrams |
| | | Conclusion |
| | | Chapter 15. State Diagrams |
| | | The Basics |
| | | Using FSM Diagrams |
| | | Conclusion |
| | | Chapter 16. Object Diagrams |
| | | A Snapshot in Time |
| | | Active Objects |
| | | Conclusion |
| | | Chapter 17. Use Cases |
| | | Writing Use Cases |
| | | Diagramming Use Cases |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 18. Sequence Diagrams |
| | | The Basics |
| | | Advanced Concepts |
| | | Conclusion |
| | | Chapter 19. Class Diagrams |
| | | The Basics |
| | | An Example Class Diagram |
| | | The Details |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 20. Heuristics and Coffee |
| | | The Mark IV Special Coffee Maker |
| | | OOverkill |
| | | Bibliography |
| | Section III. The Payroll Case Study |
| | | Chapter 21. COMMAND and ACTIVE OBJECT: Versatility and Multitasking |
| | | Simple Commands |
| | | Transactions |
| | | Undo Method |
| | | Active Object |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 22. TEMPLATE METHOD and STRATEGY: Inheritance versus Delegation |
| | | Template Method |
| | | Strategy |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 23. Facade and Mediator |
| | | Facade |
| | | Mediator |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 24. Singleton and Monostate |
| | | Singleton |
| | | Monostate |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 25. Null Object |
| | | Description |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 26. The Payroll Case Study: Iteration 1 |
| | | Rudimentary Specification |
| | | Analysis by Use Cases |
| | | Reflection: Finding the Underlying Abstractions |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 27. The Payroll Case Study: Implementation |
| | | Transactions |
| | | Main Program |
| | | The Database |
| | | Conclusion |
| | | About This Chapter |
| | | Bibliography |
| | Section IV. Packaging the Payroll System |
| | | Chapter 28. Principles of Package and Component Design |
| | | Packages and Components |
| | | Principles of Component Cohesion: Granularity |
| | | Principles of Component Coupling: Stability |
| | | Conclusion |
| | | Chapter 29. Factory |
| | | A Dependency Problem |
| | | Static versus Dynamic Typing |
| | | Substitutable Factories |
| | | Using Factories for Test Fixtures |
| | | Importance of Factories |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 30. The Payroll Case Study: Package Analysis |
| | | Component Structure and Notation |
| | | Applying the Common Closure Principle (CCP) |
| | | Applying the Reuse/Release Equivalence Principle (REP) |
| | | Coupling and Encapsulation |
| | | Metrics |
| | | Applying the Metrics to the Payroll Application |
| | | The Final Packaging Structure |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 31. Composite |
| | | Composite Commands |
| | | Multiplicity or No Multiplicity |
| | | Conclusion |
| | | Chapter 32. Observer: Evolving into a Pattern |
| | | The Digital Clock |
| | | The OBSERVER Pattern |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 33. Abstract Server, Adapter, and Bridge |
| | | Abstract Server |
| | | Adapter |
| | | Bridge |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 34. PROXY and GATEWAY: Managing Third-Party APIs |
| | | Proxy |
| | | Databases, Middleware, and Other Third-Party Interfaces |
| | | Table Data Gateway |
| | | Using Other Patterns with Databases |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 35. Visitor |
| | | Visitor |
| | | Acyclic Visitor |
| | | Decorator |
| | | Extension Object |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 36. State |
| | | Nested Switch/Case Statements |
| | | Transition Tables |
| | | The State Pattern |
| | | Classes of State Machine Application |
| | | Conclusion |
| | | Bibliography |
| | | Chapter 37. The Payroll Case Study: The Database |
| | | Building the Database |
| | | A Flaw in the Code Design |
| | | Adding an Employee |
| | | Transactions |
| | | Loading an Employee |
| | | What Remains? |
| | | Chapter 38. The Payroll User Interface: MODEL VIEW PRESENTER |
| | | The Interface |
| | | Implementation |
| | | Building a Window |
| | | The Payroll Window |
| | | The Unveiling |
| | | Conclusion |
| | | Bibliography |
| | | Appendix A. A Satire of Two Companies |
| | | Appendix B. What Is Software? |
| | | Afterword |
| | | InsideFrontCover |
| | | Manifesto for Agile Software Development |
| | | Principles behind the Agile Manifesto |
| | | InsideBackCover |
| | | Practices of Extreme Programming |
| | | The Principles of Object Oriented Design |
| | Index |