Version: | 1.0 | Quick Links | |
Author: | Nik Boyd | Study Goals | |
Started: | January, 2005 | Study Schedule | |
Updated: | January, 2005 | Study Questions |
This guide provides a structured introduction to the book:
Rebecca Wirfs-Brock, Alan McKean. Object Design: Roles, Responsibilities, Collaborations. Addison-Wesley Publishing Co., Inc., 2003. ISBN 0-201-37943-0.
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:
The proposed discussion order is intended 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) | Sessions 10 |
Considers the need for flexibility and extensibility in designs, esp. the need to support variations and the attendant benefits of design patterns. | |
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 |
|
|
The following books are recommended as supplemental reading for Object Design.
Michael Jackson. Problem Frames: Analyzing and Structuring Software Development
Problems. 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.
Benjamin L. Kovitz. Practical Software Requirements: A Manual of Content and Style. 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.
M.H. Halstead. Elements of Software Science. 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.
S.A. Whitmire. Object-Oriented Design Measurement. 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.
K.J. Lieberherr. Adaptive Object-Oriented Software: The Demeter Method with Propagation Patterns. 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.
A.J. Riel. Object-Oriented Design Heuristics. 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.
Wolfgang Pree. Design Patterns for Object-Oriented Software
Development. 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.
E. Gamma, R. Helm, R. Johnson, J. Vlissides. Design Patterns: Elements of Reusable Object-Oriented Software. 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.
S.R. Chidamber, C.F. Kemerer. A Metrics Suite for Object Oriented
Design. IEEE Transactions on Software Engineering v20 #6, June 1994.
N.
Fenton. Software Measurement: A Necessary Scientific Basis. IEEE
Transactions on Software Engineering v20 #3, March 1994.
R. Sharble, S.
Cohen. The Object-Oriented Brewery: A Comparison of Two Object-Oriented
Development Methods. ACM SIGSOFT Software Engineering Notes v18 #2, Apr.
1993.
L.A. Laranjeira. Software Size Estimation for Object-Oriented
Systems. IEEE Transactions on Software Engineering v16 #5, May
1990.
E.J. Weyuker. Evaluating Software Complexity Measures. IEEE
Transactions on Software Engineering v14 #9, September 1988.
L.H. Putnam.
A General Empirical Solution to the Macro Software Sizing and Estimating
Problem. IEEE Transactions on Software Engineering vSE-4 #4, July
1978.