Table of Contents
1. What does it mean to be object oriented, anyway?
Encapsulation. Information / implementation hiding. State
retention. Object identity. Messages. Message structure. Message
arguments. The roles of objects in messages. Types of messages.
Classes. Inheritance. Polymorphism. Genericity. 2. Object
orientation--who ordered that?
Where did object orientation come from? Larry Constantine. O.J.
Dahl and K. Nygaard. Alan Kay, Adele Goldberg and others. Edsger
Dijkstra. Barbara Liskov. David Parnas. Jean Ichbiah and others.
Bjarne Stroustrup. Bertrand Meyer. 0 Grady Booch, Ivar Jacobson and
Jim Rumbaugh. Object orientation in a social context. The history
of the mainstream. To the barricades: the object-oriented
revolutionaries. Forward to the past: the object-oriented
reactionaries. Enter the evolutionists (stage middle). Object
orientation as an engineering discipline. What's object orientation
good for? Analyzing users' requirements. Designing software.
Constructing software. Maintaining software. Using software.
Managing software projects.
II. UML NOTATION.
3. The basic notation for classes, attributes and
The class symbol. Notation for attributes. Notation for operations.
Overloaded operations. Public, protected and private features.
Class attributes and operations. Abstract classes and features. The
utility. Parameterized classes. 4. Class diagrams.
The generalization construct. Single inheritance. Multiple
inheritance. Subclass partitioning. Partitioning discriminators.
The association construct. The basic UML notation for associations.
Associations depicted as classes. Higher-order associations.
Navigability of associations. "Whole / part" associations.
Composition. Aggregation. 5. Object-interaction
The collaboration diagram. Depicting a message. Polymorphism in the
collaboration diagram. Iterated messages. Use of self in messages.
The sequence diagram. Asynchronous messages and concurrent
execution. Depicting an asynchronous message. The callback
mechanism. Asynchronous messages with priority. Depicting a
broadcast (non-targeted) message. 6. State diagrams.
Basic state diagrams. Nested states. Concurrent states and
synchronization. Transient states from message-result arguments.
Continuously variable attributes. 7. Additional design
Depicting system architecture. Packages. Deployment diagrams for
hardware components. Deployment diagrams for software components.
Depicting the human interface. The window-layout diagram. The
window-navigation diagram. A brief digression: what's
object-oriented about a GUI?
III. FUNDAMENTAL DESIGN PRINCIPLES.
8. Encapsulation and connascence.
Encapsulation structure. Levels of encapsulation. Design criteria
governing interacting levels of encapsulation. Connascence.
Varieties of connascence. Contranascence. Connascence and
encapsulation boundaries. Connascence and maintainability.
Connascence abuses in object-oriented systems. 9. Domains,
encumbrance and cohesion.
Domains of object classes. The foundation domain. The architectural
domain. The business domain. The application domain. The source of
classes in each domain. Encumbrance. Definition of encumbrance. The
use of encumbrance. The Law of Demeter. Class cohesion: a class and
its features. Mixed-instance cohesion. Mixed-domain cohesion.
Mixed-role cohesion. 10. State space and behavior.
State-space and behavior of a class. The state-space of a subclass.
The behavior of a subclass. The class invariant as a restriction on
a state-space. Preconditions and postconditions. 11. Principles
of robust class hierarchies.
The principle of type conformance. Subclasses as subtypes.
Conformance: the principles of contravariance and covariance. An
example of contravariance and covariance. A graphic illustration of
contravariance and covariance. A summary of the requirements for
type conformance. The principle of closed behavior. 12. The
perils of inheritance and polymorphism.
Abuses of inheritance. Mistaken aggregates. Inverted hierarchy.
Confusing class and instance. Misapplying is a. The danger of
polymorphism. Polymorphism of operations. Polymorphism of
variables. Polymorphism in messages. Polymorphism and genericity.
13. Organizing features.
Mix-in classes. A business example. A graphics example. Rings of
operations. 14. Quality of a class interface.
State support in a class interface. Behavior support in a class
interface. Operation cohesion in a class interface. 15.
Development of an object-oriented component.
Appendix A Checklist for an object-oriented design
Appendix B The object-oriented design owner's manual.
About the Author
Meilir Page-Jones is President and Senior Consulting Methodologist
at Wayland Systems, and has extensive experience in training,
consulting, and hands-on system development. He created several of
Wayland's courses on object-oriented software engineering and
project management, including The Synthesis Method for
Object-Oriented Systems Development and Analysis and Design
for Client/Server Systems Development. Formerly the head of the
Structured Design Department at Yourdon Inc., Meilir wrote the
best-selling Practical Guide to Structured Systems Design and
Practical Project Management. He has also written numerous
articles for the Journal of Object-Oriented Programming,
Object Magazine, Software Development Magazine, and
Computerworld, and has spoken at many conferences, including
OOPSLA, Software Development, and Object Expo.