A class abstracts the common
structure and behavior of a group of objects.
The class is used like a template to create
instances
of the type of object the class represents.
Through inheritance a subclass
can inherit the attributes and operations of a superclass.
The subclass is a subtype of the superclass.
An abstract class is a superclass
that defines a common set of attributes and behavior for each
of its subclasses.
An abstract class may provide methods for some of the operations.
In a composition relationship,
an object is part of its containing object.
The container is responsible for the part.
The persistence of the part is often the same as the persistence
of the container.
In an aggregation relationship,
an object is contained in another object.
If the container disappears, the contained objects may continue
to exist.
The contained object may also be related to several containers.
In an association relationship,
an object is known by another object.
Associated objects may know about each other,
exchange messages with each other, but neither is responsible
for the existance of the other.
In a utilization relationship,
a client object uses the services of a server object.
The client knows about the server but the server does not
know about the client.
In essense, this is one way association.
In a utilization relationship, the client delegates work to a server.
But, delegation may occur in the other types of relationships.
An aggregate often delegates work to its parts,
and associates often delegate work to each other.