|
Properties
Categories
|
Inheritance (Generalization) |
Association | Aggregation | Composition | Dependency (Using, Delegation) |
|---|---|---|---|---|---|
| Semantics (meaning) |
|
|
|
|
|
| Example | A student is a person. | A class has a teacher. A teacher has a class. |
A car has an engine. An engine is part of a car. |
A car has an engine. An engine is part of a car. |
A calculator depends on / delegates to a fraction. A calculator uses a fraction. |
Class Roles |
Parent & Child Superclass & Subclass Base & Derived |
Peer | Whole & Part | Whole & Part | Dependent & Independent Client & Server User & Supplier |
| Directionality (Navigation/Knowledge) |
Unidirectional (Child to Parent) |
Bidirectional | Unidirectional (Whole to Part) |
Unidirectional (Whole to Part) |
Unidirectional (Client to Supplier) |
| Object Binding Lifetimes Sharing |
Strong Coincident (same) Exclusive |
Weak Independent (distinct) Shareable |
Weak Independent (distinct) Shareable |
Strong Coincident (same) Exclusive |
Temporary / Transient Independent Shared |
| Implementation | : public |
2 pointer variables | 1 pointer variable | 1 non-pointer variable | 1 local variable |
Variable(s) |
N/A |
Class scope both classes | Class scope whole class | Class scope whole class | Client function local var |
| Code Pattern | class A
{
...
};
class B : public A
{
...
};
|
class B
{
A* a;
};
class A
{
B* b;
};
|
class B
{
...
};
class A
{
B* b;
};
|
class B
{
...
};
class A
{
B b;
};
|
class A
{
public:
void func(B b) {}
void func(B* b) {}
void func(B& b) {}
};
Return type not significant
|
| UML Class Relationship Symbol | ![]() |
![]() |
![]() |
![]() |
![]() |
| Property | Values | Meaning | |
|---|---|---|---|
| Semantics1 | Is a, Kind of | One object is another object (possible to substitute one object for another). One object is a (special) kind of another (general) object. | |
| Has a, Part of | One object has another object as a part. One object is a part of another object. One object contains another object. | ||
| Depends on | One object depends on (uses, delegates some responsibility to) another object. | ||
| Directionality2 | Bidirectional | Messages are exchanged in both directions (i.e., both objects may send a message). Possible to go from either object to the other. Both objects "know" about each other. | |
| Unidirectional | Messages are sent in only one direction (i.e., only one object sends a message). Possible to go from one object to another but not in the opposite direction. Only one object "knows" about the other. | ||
| Binding3 | Strong/Tight | Lifetime | (Coincident) Object lifetimes are the same: they are created and destroyed at the same time. |
| Sharing | (Exclusive) Objects form an exclusive relationship that does not permit sharing of the parent or part object. | ||
| Weak/Loose | Lifetime | (Independent) Object lifetimes may be different: they may be created and destroyed when convenient (at the same or at different times). | |
| Sharing | (Shareable) Whole objects may share their pars with other objects in the program/design. | ||
| Temporary/ Transient | Lifetime | (Independent) Object lifetimes are different: The client passes an existing object (itself or one of its parts) as an argument to a supplier function's parameter, which the function destroys when it returns. | |
| Sharing | (Shareable) Parameters passed by pointer or reference are shared; parameters passed by value or non-parameter, local variables are not. | ||