Sandi Metz has distilled a lifetime of conversations and presentations about object-oriented design into a set of Ruby-focused practices for crafting manageable, extensible, and pleasing code. She shows readers how to build new applications that can survive success and repair existing applications that have become impossible to change. Each technique is illustrated with extended examples, all downloadable from the companion Web site, poodr.info. The first title to focus squarely on object-oriented Ruby application design, Practical Object-Oriented Design in Ruby will guide students to superior…mehr
Sandi Metz has distilled a lifetime of conversations and presentations about object-oriented design into a set of Ruby-focused practices for crafting manageable, extensible, and pleasing code. She shows readers how to build new applications that can survive success and repair existing applications that have become impossible to change. Each technique is illustrated with extended examples, all downloadable from the companion Web site, poodr.info. The first title to focus squarely on object-oriented Ruby application design, Practical Object-Oriented Design in Ruby will guide students to superior outcomes, whatever your previous Ruby experience. Novice Ruby programmers will find specific rules to live by; intermediate Ruby programmers will find valuable principles they can flexibly interpret and apply; and advanced Ruby programmers will find a common language they can use to lead development and guide their colleagues.Hinweis: Dieser Artikel kann nur an eine deutsche Lieferadresse ausgeliefert werden.
Sandi Metz is a programmer, teacher, author, and sometime consultant. In the past 30+ years she has written innumerable applications and creates practical solutions that produce working software that is easy to change. She has spoken about object-oriented design and refactoring at international Ruby conferences since 2009.
Inhaltsangabe
Introduction xv Acknowledgments xix About the Author xxi Chapter 1: Object-Oriented Design 1 1.1 In Praise of Design 2 1.2 The Tools of Design 4 1.3 The Act of Design 6 1.4 A Brief Introduction to Object-Oriented Programming 10 1.5 Summary 13 Chapter 2: Designing Classes with a Single Responsibility 15 2.1 Deciding What Belongs in a Class 16 2.2 Creating Classes That Have a Single Responsibility 17 2.3 Writing Code That Embraces Change 24 2.4 Finally, the Real Wheel 33 2.5 Summary 35 Chapter 3: Managing Dependencies 37 3.1 Understanding Dependencies 38 3.2 Writing Loosely Coupled Code 41 3.3 Managing Dependency Direction 53 3.4 Summary 59 Chapter 4: Creating Flexible Interfaces 61 4.1 Understanding Interfaces 61 4.2 Defining Interfaces 63 4.3 Finding the Public Interface 65 4.4 Writing Code That Puts Its Best (Inter)Face Forward 77 4.5 The Law of Demeter 80 4.6 Summary 84 Chapter 5: Reducing Costs with Duck Typing 85 5.1 Understanding Duck Typing 85 5.2 Writing Code That Relies on Ducks 95 5.3 Conquering a Fear of Duck Typing 100 5.4 Summary 103 Chapter 6: Acquiring Behavior through Inheritance 105 6.1 Understanding Classical Inheritance 105 6.2 Recognizing Where to Use Inheritance 106 6.3 Misapplying Inheritance 114 6.4 Finding the Abstraction 116 6.5 Managing Coupling between Superclasses and Subclasses 129 6.6 Summary 139 Chapter 7: Sharing Role Behavior with Modules 141 7.1 Understanding Roles 142 7.2 Writing Inheritable Code 158 7.3 Summary 161 Chapter 8: Combining Objects with Composition 163 8.1 Composing a Bicycle of Parts 163 8.2 Composing the Parts Object 168 8.3 Manufacturing Parts 176 8.4 The Composed Bicycle 181 8.5 Deciding between Inheritance and Composition 185 8.6 Summary 191 Chapter 9: Designing Cost-Effective Tests 193 9.1 Intentional Testing 194 9.2 Testing Incoming Messages 202 9.3 Testing Private Methods 215 9.4 Testing Outgoing Messages 217 9.5 Testing Duck Types 221 9.6 Testing Inherited Code 233 9.7 Summary 244 Afterword 245 Index 247