R120 - modelint/shlaer-mellor-metamodel GitHub Wiki

R120 / 1c:1c-1

Association is formalized by zero or one Class

Class formalizes zero or one Class


By 'formalize' we mean that an Association class holds the Attribute References necessary to map instances of the participating Classes in a given Association. Without an Association Class, an Association must be formalized by attribute references in one of its one or two participating Classes.

We model the rule that a Class may or may not participate as an Association Class on some Association, but if it does, that is the only Association where it may play that role. Put differently, a Class either is or is not an Association Class. If it is an Association Class, it serves this role on a single Association.

Note that a class that does play an Association Class role, may play roles in other Relationships as well. For example, a Class might simultaneously be a subclass of some Generalization while it serves as an Association Class on some Association. Or an Association Class may be a superclass or be a participating class in some othe Association. This is why we don't simply specialize Class into Association and 'Non-Association' Class.

A given Association may or may not be formalized by an Association Class. If it is, it is formalized by exactly one Association Class.

Formalization

Association Class.(Rnum, Domain) -> Association.(Rnum, Domain)
Association Class.(Class, Domain) -> Class.(Name, Domain)