Vol. 14, No. 2, August 2001, 291--293

Richard C. Lee and William M. Tepfenhart
UML and C++: A Practical Guide to Object-Oriented Development (2nd Edition)
Published by Prentice-Hall, Upper Saddle River, New Jersey 07458, 2001
Paperback, 557 pages, USA $ 50,99
ISBN 0-13-029040-8
http://www.pearsoneduc.com

In general about the book

UML and C++: A Practical Guide to Object-Oriented Development presents a broad perspective on object-oriented development using the Unified Modeling Language (UML) and C++. It provides a practical approach to analysis, design, and programming in the object- oriented technology introducing different types of system modeling, such as behavioral modeling, data modeling and object modeling, describing the notation defined in UML and how these notations may be used to develop different types of system models. The book gives a 'recipe' or step-by-step guide to do all of the steps of object-oriented technology. In order to acquaint readers with different backgrounds, the authors include sections that review the relevant theories and numerous examples that clarify discussion about described concepts.

The book is aimed at students and busy professionals who work on large systems, especially those who need to integrate their new systems with legacy systems. The book is self- contained, and does not require a background in C++ and relevant methods.

Chapter content

The authors organize the book into 23 chapters, one appendix, references and index.

Chapter 1 (The Information Management Dilemma) provides the reasons for companies to use object-oriented technology and for software professionals to understand the technology.

Chapter 2 (Managing Complexity: Analysis and Design) addresses the business of software and the need to manage complexity. A number of abstraction mechanisms and concepts that solve some of problems associated with complexity are presented.

Chapter 3 (Object-oriented programming) describes the basic terminology and key concepts in object-oriented technology and presents the principles of object-oriented paradigm, such as encapsulation, information hiding, message passing, late binding, delegation, class and objects, inheritance and polimorphism, and relationships.

Chapter 4 (Bounding the Domain) describes how to employ use cases to bind the domain to relevant objects. The fundamental concepts associated with use cases are defined, namely the goal, system, the actors, use cases, and use case bundles. Guidelines for developing and documenting use cases are also presented.

Chapter 5 (Finding the Objects) describes how to find potential objects, the first step emloying object-oriented technology. The authors recommend the original four steps method for finding objects and suggest a list of potential objects/classes.

Chapter 6 (Identifying Responsibilities) describes how to differentiate between 'real' objects and 'false' objects by identifying attributes and services associated with the identified objects. The authors recommend the four steps approach for identifying responsibilities that includes identification and specification of attributes, and identification and specification of services.

Chapter 7 (Specifying Static Behavior) describes techniques for specifying static behavior, and for specifying/documenting control of objects. The authors recommend the existing method developed by McMenamin and Palmer to specify the behavior of objects. In this chapter, the UML notations for an activity diagram, a collaboration diagram and a sequence diagram are addressed.

Chapter 8 (Dynamic Behavior) presents techniques for capturing dynamic behavior of objects including techniques used to identify and specify events. The eight steps approach for performing behavioral analysis is recommended.

Chapter 9 (Identifying Relationships) describes three very important relationships: generalization/specialization, links, and aggregation that are available for organizing all objects in a system, and describes how to identify and specify the relationships. In summary, the authors recommend 11 steps for finding relationships.

Chapter 10 (Rules) describes how to incorporate declarative facts into the object-oriented model about object knowledge and a rule-based mechanism for their implementation. The documenting guidelines for the various rules using UML are presented.

Chapter 11 (The Model) describes how we can document object-oriented concepts using UML and how to make objects into classes to take advantage of the machanisms of C++.

Chapter 12 (Design) considers the technology necessary to implement the application model. In this chapter, the authors add to the model all the technology-dependent objects (classes) to make the application implementable and describe how we can use UML's concepts in the object-oriented system and detailed design.

Chapter 13 (C++ Fundamentals), Chapter 14 (Implementing Class),

Chapter 15 (C++ Libraries), Chapter 16 (Implementing Static Behavior), Chapter 17 (Implementing Dynamic Behavior), Chapter 18 (Implementing and Deleting Objects), Chapter 19 (Implementing Generalization/Specializa\-tion), and Chapter 20 (Implementing More Relationships) present an excellent overview of OO programming using C++.

Chapter 21 (Introduction to the Case Studies) introduces the two case studies demonstrating the different approaches to developing an object-oriented model. The first case study presents a breakout game that is developed utilizing expert knowledge. The second case study presents a microwave oven that is developed utilizing use cases as the means for bounding the domain. The following chapters 22 nad 23 present the two case studies.

Target audience

The book is suitable both for professional software analysts and developers who need to use object-oriented technology based on UML and C++. I strongly recommend this book to students, as the authors present useful guidelines for using the discussed methodologies.

Slobodanka Djordjevic-Kajan
Faculty of Electronic Engineering
Beogradska 14, P.O. Box 73
18000 Nish, Yugoslavia