This book is a revised edition of my earlier book Practical Object-Oriented Design. It shares the same aims as the earlier book, namely to provide a practical introduction to design which will be of use to people with experience of programming who want to learn how to express the design of object-oriented programs more abstractly.
The most significant change from the earlier book is that the notation used is now that of UML, the Unified Modeling Language. UML is to a large extent an evolutionary development of the OMT language used in the earlier book, so this change has not necessitated great changes in the structure and content of the book.
As with the earlier book, much emphasis is placed on clearly explaining the constructs and notation of the design language, and demonstrating the close relationship between the design and the implementation of object-oriented programs. Unlike questions of methodology and process, these issues are treated rather superficially in many books. If they are not clearly understood, however, it is difficult to make meaningful use of a notation such as UML. In addition, the book addresses a number of pragmatic issues which are often omitted from design books, such as the integration of a design with an existing framework, the use of patterns in design, dealing with persistent data, and the physical design of object-oriented programs.