If you create software using object-oriented languages and tools, then Responsibility-Driven Design has likely influenced your work.
Object Design: Roles, Responsibilities, and Collaborations focuses on the practice of designing objects as integral members of a community where each object has specific roles and responsibilities. The authors present the latest practices and techniques of Responsibility-Driven Design and show how you can apply them as you develop modern object-based applications.
Working within this conceptual framework, Rebecca Wirfs-Brock and Alan McKean present how user requirements, system architecture, and design patterns all contribute to the design of an effective object model. They introduce a rich vocabulary that designers can use to discuss aspects of their designs, discuss design trade-offs, and offer practical guidelines for enhancing the reliability and flexibility of applications. In addition, case studies and real-world examples demonstrate how the principles and techniques of Responsibility-Driven Design apply to real-world software designs.
As all experienced designers know, software design is part art and inspiration and part consistent effort and solid technique. Object Design: Roles, Responsibilities, and Collaborations will help all software designers--from students to seasoned professionals--develop both the concrete reasoning skills and the design expertise necessary to produce responsible software designs.
Review By: Tony Alabi 05/11/2004
In "Object Design: Roles, Responsibilities, and Collaborations," the authors provide a solid introduction to responsibility-driven design that will benefit the object-oriented programming student as well as the seasoned programming enthusiast.
The book is very well organized. The authors keep the reader engaged, enthused, and non-intimidated by using clear language to explain how abstraction items are introduced and described, as well as appropriate sidebar comments and a bulletin-driven method of illustrating the various entities. They also include useful visual aids such as charts, graphs, and diagrams. The author’s writing style is inspiring, allowing the reader to easily comprehend the concepts by using real-life examples to describe data objects, their roles, and uses. This definitely is a much better object-design approach than the conventional design method.
This book provides object-oriented programmers a great deal of assistance in approaching programming from a different perspective by offering an informal and simple design approach. Because the core of the book deals with the conceptual phase of object-oriented design, the book focuses on a couple of common design problems that are usually encountered when major objects have to be defined and their roles determined.
The chapter on responsibilities presents the reader with examples of good and bad choices of responsibilities. The authors go to great length to explain to the reader the key points of object-oriented programming. They describe how certain objects can be broken down into smaller objects to the level of a perfect object; thus assigning roles and responsibilities to these objects. They also define the various groups of object entities and the roles and responsibilities of objects, as well as the relationships of the various objects with one another. Because some objects are deemed perfect objects and are not aware of other existing objects, these objects are equipped with the ability to communicate with other object’s attributes such as global, message-passing, reference, and creation. With the aid of a CRC card, the issue of control is discussed, and what is mainly addressed here is the flow control of the design.
The chapter on Reliable Collaborations, touches on some key QA-related issues, such as understanding the consequences of collaboration failures, trusted versus untrusted collaborations, and how to make collaborations reliable. One section explains how to distinguish between errors and exceptions, and explains that numerous test cases can be introduced to address what might cause objects to veer off course in some designs.
The authors’ presentation of object-oriented design successfully reconciles higher-level abstraction techniques with mundane activities. Rather than settle for the complex and rigid form of conventional object-oriented programming, students and seasoned professionals alike, will glean from this book how to achieve an informal and simple object-oriented design approach by understanding various design patterns, reasons for alternative design approaches, and how to make design trade-offs.