This guide provides a structured introduction to the book:
Object Design: Roles, Responsibilities, and Collaborations.
– Rebecca Wirfs-Brock, Alan McKean. Addison-Wesley Publishing Co., Inc., 2003. ISBN 0-201-37943-0.
Study Group Goals
For an introduction to study groups, please see
A Learning Guide to Design Patterns, by Joshua Kerievsky
For this study group on Object Design, we want to:
- understand responsibility-driven design enough to apply it in our professional development practice,
- develop some feel for (and facility with) the various strategies of object and role discovery, responsibility discovery and assignment, and collaboration design.
Proposed Discussions
The proposed discussion order intends to quickly introduce participants to the primary concepts and techniques. The sessions are generally organized to cover the material in a single meeting. However, some sessions may spill over across more than one week if the discussions get lively. For example, folks new to object-oriented design may want to consider an additional session between Chapters 6 and 7 to discuss design patterns. Some of the on-line catalogs in the supplementary readings can be used for this purpose.
| On Design (355-374) | Session 1 |
| Considers design in the context of problems and problem frames. Differentiates core problems from revealing problems, and their consequent (re)solution. | |
| Design Concepts (1-38) | Session 2 |
| Introduces the central concepts of object-oriented design: objects, roles, responsibilities, collaborations, contracts, interfaces, classes, components, patterns, architectures, and architectural styles. | |
| Responsibility-Driven Design (39-75) | Session 3 |
| Provides a summary overview of behaviorally oriented analysis and design, including scripts, exploratory design with CRC cards, and design refinement. | |
| Finding Objects (77-107) | Sessions 4 |
| Discusses candidate object and role discovery strategies. | |
| Responsibilities (109-147) | Session 5 |
| Discusses responsibility discovery, assignment, and assessment. | |
| Collaborations (149-194) | Session 6 |
| Discusses collaboration discovery and design trade-offs, including control, responsibility, patterns, simplicity, visibility, and reliability. | |
| Control Style (195-238) | Session 7 |
| Considers trade-offs related to control: centralization vs. delegation and the design of control centers. | |
| Describing Collaborations (239-276) | Session 8 |
| Provides guidance for capturing collaborations in written forms as stories. | |
| Reliable Collaborations (277-314) | Session 9 |
| Considers the consequences of failures and the need to establish and limit trust in collaborations, as well as how to surface these considerations in design contracts. | |
| Flexibility (315-354) | Session 10 |
| Considers the need for flexibility and extensibility in designs, esp. the need to support variations and the attendant benefits of design patterns. | |
Study Questions
Disclaimer: These questions can and should be augmented and / or replaced by questions raised by the participating study group members.
| On Design (355-374) | Session 1 |
|
|
| Design Concepts (1-38) | Session 2 |
|
|
| Responsibility-Driven Design (39-75) | Session 3 |
|
|
| Finding Objects (77-107) | Sessions 4 |
|
|
| Responsibilities (109-147) | Session 5 |
|
|
| Collaborations (149-194) | Session 6 |
|
|
| Control Style (195-238) | Session 7 |
|
|
| Describing Collaborations (239-276) | Session 8 |
|
|
| Reliable Collaborations (277-314) | Session 9 |
|
|
| Flexibility (315-354) | Sessions 10 |
|
|
Supplemental Readings
The following books are recommended as supplemental reading for Object Design.
Problem Frames: Analyzing and Structuring Software Development Problems.
– Michael Jackson. Addison-Wesley Publishing, Inc., 2000. ISBN 0-201-59627-X.
Problems exist in the world. Software solutions exist in some machine(s). Problem frames provide a structured and systematic way to think about and describe problems (as opposed to solutions). Problem frames, context diagrams, and problem descriptions describe how a machine relates to the world, and what are the requirements that need to be fulfilled by the machine in order to solve a real world problem.
Practical Software Requirements: A Manual of Content and Style.
– Benjamin L. Kovitz. Manning Publications, 1998. ISBN 1-884-77759-7.
Using problem frames as a backdrop, Kovitz focuses on what needs to actually be in the text of requirements and specification documents to make them effectively understood by both developers and end users.
Elements of Software Science.
– M.H. Halstead. Elsevier North-Holland, Inc., 1977. ISBN 0-444-00205-7.
Halstead pioneered the field of software metrics. This treatise still serves as a useful guide for thinking about and working with fundamental software elements such as operands, operators, program length, program volume, vocabulary size, language level, effort, difficulty, and predictive error rates.
Object-Oriented Design Measurement.
– S.A. Whitmire. John Wiley & Sons, Inc., 1997. ISBN 0-471-13417-1.
While the title of this book indicates a focus on object-oriented designs, it also provides metrics applicable to software designs in general. It provides an excellent introduction to the elements of measurement theory, enough to generate a wide range of measurements tailored to specific needs. If you have a metrics-oriented manager or simply want more objective ways of evaluating your designs, this book is highly recommended.
Adaptive Object-Oriented Software: The Demeter Method with Propagation Patterns.
– K.J. Lieberherr. PWS Publishing Co., 1996. ISBN 0-534-94602-X.
Adaptive programming specifies the connections between objects as loosely as possible and defers the binding of algorithms to data structures until as late as possible. The Demeter system provides tools that support adaptive programming.
Object-Oriented Design Heuristics.
– A.J. Riel. Addison-Wesley Publishing Co., Inc., 1996. ISBN 0-201-63385-X.
Riel provides a fairly comprehensive set of 61 heuristics for object-oriented design. Unfortunately, the examples are all written in C++. Still, many of the heuristics are worth considering and easily transfered to Java and C# development.
Design Patterns for Object-Oriented Software Development.
– Wolfgang Pree. Addison-Wesley Publishing, Inc., 1995. ISBN 0-201-42294-8.
Reveals the essential elements of object-oriented software design patterns. Combinations of these elements can be found in all extant object-oriented design patterns. An understanding of these essential elements can be used to generate new design patterns.
Design Patterns: Elements of Reusable Object-Oriented Software.
– E. Gamma, R. Helm, R. Johnson, J. Vlissides. Addison-Wesley Publishing Co., Inc., 1995. ISBN 0-201-63361-2.
Provides an excellent introduction to design patterns and a catalog of solutions to common design problems.
The published literature includes many on-line design patterns and pattern catalogs. The following list provides a representative sample.
The Portland Patterns Repository.
http://c2.com/ppr/titles.html http://c2.com/cgi/wiki?CategoryPattern
The Hillside Patterns Repository.
http://hillside.net/patterns/papersbibliographys.htm
Papers from the Pattern Languages of Programming (PLoP) Conference:
1994 1995 1996 1997 1998 1999
2000 2001 2002 2003 2004
The published literature also includes several papers regarding design and design metrics.
A Metrics Suite for Object Oriented Design.
– S.R. Chidamber, C.F. Kemerer. IEEE Transactions on Software Engineering v20 #6, June 1994.
Software Measurement: A Necessary Scientific Basis.
– N. Fenton. IEEE Transactions on Software Engineering v20 #3, March 1994.
The Object-Oriented Brewery: A Comparison of Two Object-Oriented Development Methods.
– R. Sharble, S. Cohen. ACM SIGSOFT Software Engineering Notes v18 #2, Apr. 1993.
Software Size Estimation for Object-Oriented Systems.
– L.A. Laranjeira. IEEE Transactions on Software Engineering v16 #5, May 1990.
Evaluating Software Complexity Measures.
– E.J. Weyuker. IEEE Transactions on Software Engineering v14 #9, September 1988.
A General Empirical Solution to the Macro Software Sizing and Estimating Problem.
– L.H. Putnam. IEEE Transactions on Software Engineering vSE-4 #4, July 1978.