A reference property (such as chair
in the example
shown in Figure 8.1 above) can be modeled in a UML class diagram
in the form of an association end owned by its domain class, which is visualized with the
help of a small filled circle (also called a "dot"). This requires to
connect the domain class and the range class of the reference property
with an association line, place an ownership
dot at the end of this line at the range class side, and
annotate this association end with the property name and with a
multiplicity symbol, as shown in Figure 8.2 below for the case of our example. In this way
we get a unidirectional
association, the source class of which is the
property's domain and the target class of
which is the property's range.
The fact that an association end is owned by the class at the other end, as visually
expressed by the association end ownership
dot at the association end chair
in the example
shown in Figure 8.2 below, implies that the association end
represents a reference property. In the example of Figure 8.2, the
represented reference property is
Committee
::chair
having ClubMember
as range. Such an association, with only one association end ownership
dot, is unidirectional in the sense
that it allows `navigation´ (object access) in one direction only: from
the class at the opposite side of the dot (the source class) to the class where the dot is
placed (the target class).
Thus, the two diagrams shown in Figure 8.1 and Figure 8.2 express
essentially equivalent models. When a reference property, like
chair
in Figure 8.1, is modeled by an association end with a
"dot", then the property's multiplicity is attached to the association
end. Since in a design model, all association ends need to have a
multiplicity, we also have to define a multiplicity for the other end at
the side of the Committee
class, which represents the inverse
of the property. This multiplicity (of the inverse property) is not
available in the original property description in the model shown in Figure 8.1, so it has
to be added according to the intended semantics of the association. It can
be obtained by answering the question "is it mandatory that any
ClubMember
is the chair
of a
Committee
?" for finding the minimum cardinality and the
question "can a ClubMember
be the chair
of more
than one Committee
?" for finding the maximum
cardinality.
When the value of a property is a set of values from its range, the
property is non-functional and its multiplicity is
either 0..*
or n..*
where n > 0. Instead of
0..*
, which means "neither mandatory nor functional", we can
simply write the asterisk symbol *
. The association shown in
Figure 8.2 assigns
at most one object of type ClubMember
as chair to an object
of type Committee
. Consequently, it's an example of a
functional
association.
An overview about the different cases of functionality of an association is provided in the following table:
Functionality type | Meaning |
---|---|
one-to-one | both functional and inverse functional |
many-to-one | functional |
one-to-many | inverse functional |
many-to-many | neither functional nor inverse functional |
Notice that the directionality and the functionality type of an association are independent of each other. So, a unidirectional association can be either functional (one-to-one or many-to-one), or non-functional (one-to-many or many-to-many).