"The Object-Oriented Thought Process, Second Edition" will lay the foundation in object-oriented concepts and then explain how various object technologies are used. Author Matt Weisfeld introduces object-oriented concepts, then covers abstraction, public and private classes, reusing code, and devloping frameworks. Later chapters cover building objects that work with XML, databases, and distributed systems (including EJBs, .NET, Web Services and more). Throughout the book Matt uses UML, the standard language for modeling objects, to provide illustration and examples of each concept.
Review By: Harmon Avera, Jr. 09/13/2004"The Object-Oriented Thought Process, 2nd Edition" is a high-level introduction to object-oriented concepts. Written in a clear and conversational style, the book is fairly quick and easy to read. The book's overall organization is logical and seems to flow well from the "small" aspects and mechanics of object construction to the "large" aspects of using objects in Internet and enterprise systems.
The first part of the book focuses on designing and building classes. Several chapters explain the standard ideas behind object-oriented (OO) programming including encapsulation, inheritance, polymorphism, and composition. Weisfeld thinks in terms of objects, specifically the difference between an object's interface and its implementation. He explains object/class anatomy (such as constructors, accessors, public interface methods, error handling, object attribute scope, and overloaded operators) using Java code examples. The last chapter of the first half of the book discusses class design guidelines. The guidelines bridge ideas of designing and building objects through proper implementation of these objects to build useful, working systems. Each chapter ends with a conclusion or summary and several references, both in print and online. The index is about twenty-pages long and quite complete.
The second half of the book explains how objects are designed and used in a global context. Several chapters describe system design by modeling the objects and overall system with the Unified Modeling Language (UML), and designing systems with abstract classes and interfaces. These chapters also describe how objects aid reuse and provide a framework for building similar systems. One chapter describes how to make persistent objects through serialization and relational databases. In latter chapters, Weisfeld delineates Internet-related objects on the client and server sides, various strategies for implementing distribution of objects, and finishes the book with a discussion on design patterns.
Matt Weisfeld's book reads like a collection of lectures from the classes he teaches at Cuyahoga Community College. The range of topics and layout of this short book prevents the author from delving too deeply into any one topic. Beginners might find the examples hard to follow, while experienced Java programmers might find the first part of the book too elementary. Many chapters use selections from the same basic set of five or six references.
Despite these annoyances, there are useful sections in the book. The chapter "Designing with Objects" has an excellent case study showing how system objects are identified, how the set is refined to consolidate similar objects, and how to define the interactions between the objects. Chapter 8 "Designing with Interfaces and Abstract Classes" gives a good explanation of design by contract by using interfaces to specify object functionality. UML is used throughout the book to describe class and system architecture. Chapter 10, "Creating Object Models with UML," gives a good overview of UML syntax with concrete examples of mapping UML diagrams to Java code.
The book really is an introduction OO concepts, which has some annoying aspects and a few things I like very much. I recommend this book to programmers and test designers that are new to OO concepts, but have some programming background.