If you're a programmer using C++, Smalltalk, or Eiffel, or if you're about to migrate to object orientation for the first time, you need to know the most important principles of object-oriented design. For In a reliable design, why must a variable's cone of polymorphism lie within that of a method. Is connascence good or bad? How could the inherited methods of a superclass violate the invariant of a subclass -- and how can this be prevented? Page-Jones answers these questions and more, with characteristic clarity, demystifying the fundamentals of object orientation in a language-independent way. He provides a comprehensive notation for object-oriented design that allows you to depict the design for a whole system or to jot down back-of-the-envelope ideas. features 150+ diagrams and exercises Topics Include * Encapsulation * Information Hiding * State Retention * Object Identity * Synchronous and Asynchronous Messages * Classes and Subclasses * Inheritance * Polymorphism * Genericity * Reusability * The Object-Communication Diagram * States and Transitions * Connascence * Class Domains * Encumbrance * State Space and Behavior * Class Cohesion * Guide to Object-Oriented Terminology * Object-Orientation in a Historical Context From the Foreword ". . . vintage Page-Jones. . . . Meilir is a gifted teacher. . . . a relentlessly pragmatic focus based on real-world experience . . . compact examples to guide the developer, whether novice or old hand, toward better object-oriented software solutions. . . . Who could ask for more?" -- Larry L. Constantine
Magnificent guide to any level developer. Doesn't matter if you have one month or twenty years development experience in any language. This book alwyas has something to add yo your skills and your eevryday writing style. Just read it, you won't lose.
Section 3 "The principles of object-oriented design" are still very relevant - especially chapter 8 on Encapsulation and Connasence, Chapter 9 Domains, Encumberance, and Cohesion and Chapter 11 The Perils of Inheritance and Polymorphism
If you want an academic understanding of object-oriented design, this book will give it to you. For in-depth understanding of object oriented design you still have to start fully mastering the object-oriented aspects of a programming language such as Java or C++. When I read the book, the unified modeling language was not yet in existence, so the book's take on OO diagrams was helpful. Most of the material has not been outdated by later developments, so in that sense it's fairly strong.