Other Reference Materials
Knowledge is of two kinds; we know a subject ourselves,
or we know where we
can find information upon it.
— Samuel Johnson
The most recent additions to the list
are on the top. This does not mean they are "ranked" Number 1
Object Oriented Topics
The subject of Object Oriented analysis and
design is both broad and deep. The following readings only scratch the surface
and do not represent any substantial survey of the subject. They represent turning
point books, in which my understanding of the subject was moved to higher
Designing Flexible Object–Oriented
Systems with UML, Charles Richter, MacMillan Technical Publishing,
1999. This is a "summary" book that has several good chapters on
architecture modeling. The problem with most UML books, and this book as
well, is they assume that the OO aspects of UML modeling are well know,
when in fact they are not. The value of the this book is the chapters on architecture
modeling. This is an issue in UML for programmers. The high system
architecture is usually now defined in any formal way. The result is nice
UML for classes, maybe some sequence diagrams for the core components, but
usually not much high level UML. This is a place to start.
Fundamentals of Object–Oriented Design in UML, Meiler
Page–Jones, Addison Wesley, 2000. This is a "how to" book for
designing OO systems that starts fro the beginning and ends with a serious
set of guidelines. My experience with clients is they have some concept of
OO that is usually flawed. The primary reason is they have come from a functional
decomposition background build C/C++ or Visual Basic code using
pseudo–OO techniques. They usually have not heard of CRC Cards, the
Wirfs–Brock book, Patterns, or Frameworks. The first approach is to
layout the functions that need to be performed, hook them up with method
calls and call that an OO design. Between this book, the Peter Coad book
and Bertrand Meyer's book, there is no reason not to understand how to
build good OO systems.
Java Design, Peter Coad, Yourdon Press, 1999. This is a wonderful
hands on book from the author of Together/J. It describe strategies for
building OO systems using Java. The use of inheritance is discouraged,
while decomposition, interfaces and threads are encouraged. It will
take several readings to absorb all the details, but well worth the
The CRC Card Book, David Bellin and Susan Suchman Simone, Addison
Wesley, 1997. This book must be read by anyone claiming to be a OO
designer. The CRC Card approach is not as popular as it once was (or ever
was), since the OO development is now in the realm of rapid development
and has lost some of the analysis and design processes. For anyone
designing a OO based system, starting with a set of CRC cards will
eliminate many of the redaction processes used later to clean up the mess.
Using CRC Cards, Nancy M. Wilkinson, Cambridge University Press,
1995. This is a foundation book, along with the Bellin book that
must be read and understood before proceeding with any large scale OO
Designing Object Oriented Systems
Rebecca Wirfs–Brock, Brian Wilkerson, and Lauren Wiener, Prentice Hall,
1990. If you're going to start designing OO systems, then start with this
book. Although it may appear dated, the concepts are timeless. This is not
a programming book, it is a design book – responsibility driven
design. This is the problem with many of
the approaches today, they start with a programming language, and skip the
fundamental concept that design is not the same as implementation.
Refactoring: Improving the Design of
Existing Code, Martin Fowler, Addison Wesley, 1999. Refactoring is the
concept of changing the software in such a way that it doesn't alter the external
behavior of the code, yet improves the internal structure. The concept of refactoring
is derived from Smalltalk, but has moved into other programming languages.
As the cost of making changes to an existing system decreases with
the deployment of IDE's, refactoring becomes a viable option for many
Object–Oriented Engineering: Volume 1, Edward V. Berard, Prentice
Hall, 1993. Don't be put off by the publishing date of this book, it
contains state–of–the–art issues and concepts in the OO world.
Object–Oriented Design Heuristics,
Arthur J. Reil, Addison Wesley, 1996. Rule books for designing OO system
are usually too simple to be of any use. This book provides an in
depth set of heuristics for the design and development of OO systems.
The CRC Card Book, David Belin
and Susan Suchman Simone, Addison Wesley, 1997. This is basically a psychology
book on how to extract a consensus from a diverse group of people. The
Class Responsibility Collaboration (CRC) concept is powerful OO technique
for discovering the logical components of a system. The CRC technique is
not for everyone or for every OO problem. It must be practiced with care
if usable results are to be expected.
Object–Oriented Methods: A Foundation,
James Martine and James Odell, Prentice Hall, 1995. This is a "foundation"
book that should be read by managers as well as architects.
Data Management: Object–Oriented and Extended Relational Database
Systems, R. G. G. Cattell, Addison Wesley, 1994. The author is from
Sun and describes the ins and outs of object to relational database
Combines with Booch OMT UML Process and Products, Putnam Texel and
Charles Williams, Prentice Hall, 1997. This is a how to book for
build industrial strength OO based systems. Although the book uses Booch notation
for some diagrams, UML diagrams can be found as well. An overall process
is defined in detail. This process can be used directly for software
Development: The Fusion Method, Derek Coleman, et.al., Prentice Hall,
1994. This is a first book on Fusion, the HP OO method.
Development at Work: Fusion in the Real World, Ruth Malan, Prentice
Hall, 1996. This is a continuation of the previous Fusion book.
Advanced Object–Oriented Analysis
& Design using UML, James J. Odell, Sigs Reference Library, 1998.
This book is a collection of papers on OO analysis and design. The UML
part has been thrown in to capture the then emerging UML marketing blitz.
The section titled "Object Aggregation," contains concepts vital
to all good design process. Many of the concepts in this section are
unknown to most OO designers. Another article titled "Events and
Their Specification," was a significant contribution to my
understanding of events and event processes. Again a subject not well
understood by many OO designers.
Pitfalls of Object–Oriented
Development, Bruce F. Webster, M&T Books, 1995. This is one of
those anti-patterns books before anti–patterns were coined. It
takes a very hard look at the hype and buzz–word approaches to OO
development. This book must be read by every OO designer before they can
claim to understand the risks of OO development.
Alexander, C. (1979). The Timeless Way of Building.
New York: Oxford University Press.
Anti–Patterns: Refactoring Software, Architectures, and Projects in
Crisis, Brown, W., Malveau, R, McCormick, H., Mowbray, T. (1998).
New York: John Wiley & Sons.
Pattern Languages of Program Design, Coplien, J. O.,
& Schmidt, D.C. Editors, Addison-Wesley Publishing Company,
Pattern Languages of Program Design 2, Vlissides,
J.M., Coplien, J.O., Kerth, N.L., Addison-Wesley Publishing Company,
Pattern Languages of Program Design 3, Martin, R.,
Riehle, D., & Buschmann, F. Addison Wesley Longman,
Pattern Languages of Program Design
4, Neil Harrison, Brian Foote and Hans Rohnert, Addison Wesley Longman,
Patterns of Software Systems Failure and Success,
Jones, C. Boston, Thomson International Press, 1996.
The Patterns Handbook: Techniques, Strategies, and
Applications, .Rising, L., New York: SIGS Books/Cambridge
University Press, 1998.
Patterns For Conducting Process Improvement,
Appleton, B. Proceedings of the 1997 Fourth Conference of Patterns
Languages of Program Design, 1997. Read
the online version.
For anyone interested in developing new process patterns,
I hope that you find the resources listed below (in addition to the online
process patterns resources and the process improvement and process-related
resources) valuable to your efforts. I've included references to papers
that deal with organizational patterns in general, instead of the more
specific process patterns.
S. W. (1998a). Process Patterns: Building Large-Scale Systems Using
Object Technology. New York: SIGS Books/Cambridge University Press.
S. W. (1998b). More Process Patterns: Delivering Large-Scale Systems
Using Object Technology. New York: SIGS Books/Cambridge University
Generative Development-Process Pattern Language,
Coplien, J.O. Pattern Languages of Program Design, Addison Wesley Longman,
Inc., pp. 183-237, 1995.
A Pattern Language of Competitive Development,
Cunningham, W., Pattern Languages of Program Design 2, Addison-Wesley
Publishing Company., 1996, pp. 371-388.
for System Testing, DeLano, D.E. &
Rising, L., Pattern Languages of Program Design 3, Addison Wesley
Longman, Inc., 1998., pp. 503-525.
cycle and Refactoring Patterns That Support Evolution and Reuse,
Foote, B. and Opdyke, W.F., Pattern Languages of Program Design,
Addison Wesley Longman, Inc., 1995, pp. 239-257.
Organizational Patterns for Teams, Harrison, N.B.,
Pattern Languages of Program Design 2, Addison-Wesley Publishing
Company.,1996, pp. 345-352.
Patterns for Designing in Teams, Weir, C.,
Languages of Program Design 3, Addison Wesley Longman, Inc., 1998, pp.