A reference property (such as chair
in the example shown in Figure 11.1 above) can be visualized in a UML class diagram in the form of an association end owned by its
domain class. This requires to connect the domain class and the range class of the reference
property with an association line and annotate the end of this line at the range class side
with a "dot", with the property name and with a multiplicity symbol, as shown in Figure 11.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 is visually
expressed with the help of a small filled circle (also called a "dot") at the end of the
association line. This is illustrated in Figure 11.2 below, where the "dot" at the association end
chair
indicates that the association end represents a reference property
chair
in the class Committee
having ClubMember
as
range.
Thus, the two diagrams shown in Figure 11.1 and Figure 11.2 express essentially equivalent models. When a reference
property is modeled by an association end with a "dot", like chair
in Figure
11.1, 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 11.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 11.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.
The following table provides an overview about the different cases of functionality of an association:
Table 11.3. Functionality types
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).