Practical Object-Oriented Design in Ruby: An Agile Primer

Practical Object-Oriented Design in Ruby: An Agile Primer

by Sandi Metz

NOOK Book(eBook)

$33.99 $35.99 Save 6% Current price is $33.99, Original price is $35.99. You Save 6%.
View All Available Formats & Editions

Available on Compatible NOOK Devices and the free NOOK Apps.
WANT A NOOK?  Explore Now

Product Details

ISBN-13: 9780132930888
Publisher: Pearson Education
Publication date: 09/05/2012
Series: Addison-Wesley Professional Ruby Series
Sold by: Barnes & Noble
Format: NOOK Book
Pages: 272
File size: 15 MB
Note: This product may take a few minutes to download.

About the Author

Sandi Metz has thirty years of experience working on projects that survived to grow and change. She now writes code every day as a software architect at Duke University, where her team solves real problems for customers who have large object-oriented applications that have been evolving for more than fifteen years. She has spoken at Ruby Nation and speaks regularly at the Gotham Ruby Users Conference.


Table of Contents

Foreword         xv

Introduction         xvii

Acknowledgments         xxi

About the Author         xxiii


Chapter 1: Object-Oriented Design         1

In Praise of Design   2

The Tools of Design   4

The Act of Design   7

A Brief Introduction to Object-Oriented Programming   11

Summary 14


Chapter 2: Designing Classes with a Single Responsibility         15

Deciding What Belongs in a Class   16

Grouping Methods into Classes   16

Organizing Code to Allow for Easy Changes   16

Creating Classes That Have a Single Responsibility   17

Writing Code That Embraces Change   24

Finally, the Real Wheel   33

Summary   34


Chapter 3: Managing Dependencies         35

Understanding Dependencies   36

Writing Loosely Coupled Code   39

Managing Dependency Direction   51

Summary   57


Chapter 4: Creating Flexible Interfaces         59

Understanding Interfaces   59

Defining Interfaces   61

Public Interfaces   62

Private Interfaces   62

Responsibilities, Dependencies, and Interfaces   62

Finding the Public Interface   63

Writing Code That Puts Its Best (Inter)Face Forward   76

The Law of Demeter   80

Summary   83


Chapter 5: Reducing Costs with Duck Typing         85

Understanding Duck Typing   85

Writing Code That Relies on Ducks   95

Conquering a Fear of Duck Typing   100

Summary   104


Chapter 6: Acquiring Behavior Through Inheritance         105

Understanding Classical Inheritance   105

Recognizing Where to Use Inheritance   106

Misapplying Inheritance   114

Finding the Abstraction   116

Managing Coupling Between Superclasses and Subclasses   129

Summary 139


Chapter 7: Sharing Role Behavior with Modules         141

Understanding Roles   142

Writing Inheritable Code   158

Summary   162


Chapter 8: Combining Objects with Composition         163

Composing a Bicycle of Parts   164

Composing the Parts Object   168

Manufacturing Parts   176

The Composed Bicycle   180

Deciding Between Inheritance and Composition   184

Summary   190


Chapter 9: Designing Cost-Effective Tests         191

Intentional Testing   192

Testing Incoming Messages   200

Testing Private Methods   213

Testing Outgoing Messages   215

Testing Duck Types   219

Testing Inherited Code   229

Summary 240


Afterword         241


Index          243


Customer Reviews

Most Helpful Customer Reviews

See All Customer Reviews

Practical Object-Oriented Design in Ruby: An Agile Primer 4.3 out of 5 based on 0 ratings. 4 reviews.
asimy More than 1 year ago
Ms. Metz has written a clear, engaging and thoughtful book on building maintainable object-oriented applications. Her writing is conversational, maybe even deceptively informal, as she leads the reader through just-simple-enough examples which build compelling cases for lightly coupled classes, cautious use of dependency and above all maintainable applications. Further, Ms. Metz doesn't hand down dictums about the "right way" to solve a problem, but carefully analyzes the costs and benefits of different solutions. Even though this book uses Ruby, the principles and approaches she illustrates are general purpose and usable by anyone working in an OO language. Highly recommended.
Anonymous More than 1 year ago
No text was provided for this review.
Anonymous More than 1 year ago
Anonymous More than 1 year ago