A place to list and discuss rules of thumb relating to object relationships.
See: Riel, A (1996), Object Oriented Design Heuristics, ISBN 020163385X.
When given a choice in object-oriented design between a Containment Relationship and an Association Relationship, choose the containment relationship.
Related to this, see UML Composition Vs Aggregation
Minimize the number of classes with which another class collaborates.
Minimize the number of messages sent between a class and its collaborators.
Minimize the amount of collaboration between a class and its collaborators.
If a class contains objects of another class, then the containing class should be sending messages to the contained class.
In VFP this is a very "soft" (and arguably inapplicable) heuristic since all objects have implicit
ThisFormSet. Thus you can have inside-out messaging with no coupling costs.
Most of the methods defined on a class should be using most of the data members most of the time.
Classes should not contain more objects than a developer can fit into his short-term memory.
Distribute system intelligence vertically down narrow and deep containment hierarchies.
When implementing SemanticConstraints, it is best to implement them in terms of the class definition.
When implementing semantic constraints in the constructor of a class, place the constraint test in the constructor as far down a containment hierarchy as the domain allows.
The semantic information on which a constraint is based is best decentralized in a central, third-party object when that information is volatile.
The semantic information on which a constraint is based is best decentralized among classes involved in the constraint when that information is stable.
A class must know what it contains, but it should never know who contains it.
Objects that share lexical scope should not have UsesRelationships between them.
Category OOPrinciples Category Class Design, other Object Oriented Heuristics
( Topic last updated: 1999.08.28 02:02:56 AM )