Those objects that are participating in a particular relation can be
grouped under a role type. For example, we can group those objects that
are participating in the Marriage relation at this particular moment to
form the Wife and Husband object types.
There are at least three ways to model the participating types and role
types of a relation:
1) Both the participating types and the role type
In the example above, both the possible husbands and actual
husbands have their own object types, namely Man and
Husband. This model corresponds to the way people normally
refer to relations, as in "Marriages have men as husbands",
or "A husband is a married man.", so requirements gathering
is easier. It has more overhead than the other two
techniques, because there are two object types instead of
one.
2) Just the participating type
If no new features apply to the role type, then it is not
necessary to model it. For example, if the model says
nothing new about husbands, it can be omitted. If the
husband concept is needed on occasion, then the user can
test whether a particular man is married to see if he is a
husband. If the husband concept is needed a lot, then this
is not the best technique.
3) Just the role type
For example, the Marriage relation may be modelled only
between Husband and Wife. This technique is best when the
application does not need to know who the potential husbands
and wives are, only the actual husbands and wives. The
participating types are still modelled, in a sense, since
they are needed to determine the legal elements; however,
they can't be used for modelling of potentially married
people, because they restricted to be identical to the role
type.
Anti-role types
The difference between participating type and the role type are those
things that are not participating in the relation, but could. For
example, bachelors is one of the anti-role types of Marriage.
Role types and images
Role types are identical to the images and co-images of place mappings
(see hasImage/isImageOf and hasCoimage/isCoimageOf). We have already
seen how relations are defined independently of their implementation as
mappings (see Mapping). Likewise, Role types do not depend on the
images and co-images of a mapping implementation.