- Books
- Design Patterns: Elements of Reusable Object-Oriented Software by Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides (Addison-Wesley, 1995) is probably the most influential resource on object-oriented design. Chapters 1, 2, and 6 are essential reading for understanding object-oriented design in general or, in particular, the role of patterns in object-oriented design.
- Patterns in Java: A Catalog of Reusable Design Patterns Illustrated with UML by Mark Grand (Wiley, 1998) is not as well written as Design Patterns, especially regarding general object-oriented design issues, but the patterns in the catalog are easier to understand, particularly because the examples are written using the Java language and the recommendations address issues common for Java developers.
- Core J2EE Patterns: Best Practices and Design Strategies by Deepak Alur, John Crupi, and Dan Malks (Prentice Hall, 2001) is a catalog of patterns for the design and architecture of multitier enterprise applications.
- UML Distilled: Applying the Standard Object Modeling Language by Martin Fowler with Kendall Scott (Addison-Wesley, 2000) offers an excellent introduction to the essentials of UML. It includes a short but valuable discussion of using Class-Responsibility-Collaboration cards for object-oriented design.
- The Unified Modeling Language User Guide by Grady Booch, Ivar Jacobson, and James Rumbaugh (Addison-Wesley, 1998) is helpful when you need more than just the essentials.
- Web resources
- developerWorks has two good introductory articles on the Java programming language and on object-oriented design in general:
- "The OO design process: Getting started" by Allen Holub
- "The object primer: Using object-oriented techniques to develop software" by Scott W. Ambler
- There are also several articles on the Java language, patterns, and UML:
- "A UML workbook" ( Part 1, Part 2, and Part 3 ) by Granville Miller
- "An overview of object relationships: The basics of UML and Java associations" by Scott W. Ambler
- "Use your singletons wisely: Know when to use singletons, and when to leave them behind" by J. B. Rainsberger
- "Developing Java solutions using Design Patterns" by Kelby Zordrager
- There are several Web sites with good information on patterns. The Hillside Group plays a major role in the pattern community and its site, in particular, is an excellent starting point:
- "Christopher Alexander: An Introduction for Object-Oriented Designers" is an interesting read for those wanting to learn more about the father of design patterns.
- The most discussed and dissected pattern, in this tutorial and elsewhere, is the Singleton pattern. Here are two articles that cover the topic thoroughly from different perspectives:
- "Implementing the Singleton Pattern in Java" by Rod Waldhoff
- "When is a singleton not a singleton?" by Joshua Fox
- developerWorks has two good introductory articles on the Java programming language and on object-oriented design in general:
- UML tools
- UML tools are of two types: those that provide CASE (Computer Aided Software Engineering) and those that are only for creating diagrams. The CASE tools use UML diagrams to generate code. They can also reverse-engineer code and generate diagrams. Some people find these capabilities to be useful. Rational Rose and Together/J are in this category, while ArgoUML and SmartDraw provide only drawing capabilities:
- Rational Rose is an industrial-strength software design tool (and much more) that strictly enforces its interpretation of UML. This can be frustrating if developers are using it for conceptual or informal designs. It's expensive, but you can download a 15-day evaluation version to test out.
- Together/J is also an industrial-strength software design tool that enforces its interpretation of UML.
- ArgoUML is a free, Java language, open source, UML diagramming tool. It's much smaller than Rational Rose or Together/J because it doesn't have the code generation and other engineering tools, and it is significantly easier to use. Be aware that the current version, 0.9.5 (as of December 2001), is beta and has significant bugs.
- SmartDraw is an inexpensive general-purpose diagramming tool that includes support for UML. Because it is designed as a general-purpose tool, it can be awkward to use for UML. Don't miss the comprehensive UML tutorial from SmartDraw.
- UML tools are of two types: those that provide CASE (Computer Aided Software Engineering) and those that are only for creating diagrams. The CASE tools use UML diagrams to generate code. They can also reverse-engineer code and generate diagrams. Some people find these capabilities to be useful. Rational Rose and Together/J are in this category, while ArgoUML and SmartDraw provide only drawing capabilities:

