Object-oriented technology has evolved as a means of managing the complexity inherent in many different kinds of systems, and the object model has proven to be a very powerful and unifying concept. This book provides practical guidance on the analysis and design of object-oriented (OOAD) systems. It provides a sound understanding of the fundamental concepts and historical evolution of the object model, facilitates a mastery of the notation (UML 2.0) and process of OOAD, and teaches how to effectively use OO technology to solve real problems. In addition, the guide offers a collection of five nontrivial examples encompassing a diverse selection of problem domains. The book also includes supplemental material throughout the text including an appendix on OO programming languages, summary of features on a few common languages including C++ and Java, and a glossary of common terms. Appropriate for newcomers to OO and those with experience, this is a pragmatic book that addresses the practical needs and concerns of software engineers.