Single Assigner - modelint/shlaer-mellor-metamodel GitHub Wiki
A single assigner will create a reference from any instance on one side of an Association to any instance on the other side, selection algorithm permitting.
See [MB] and [OOA96] for an example and detailed explanation.
Briefly though, consider the example of the two Classes: Clerk
and Customer
. Only one Clerk
may be assigned to a Customer
at a time and vice versa. When a Clerk
becomes available, the Shlaer-Mellor concurrency rules [LSSYNC] would otherwise permit each waiting Customer
to simultaneously grab that same Clerk
, violating the one-to-one Association multiplicity constraint.
The Single Assigner specifies a single, platform independent, point of control to resolve the conflict. The Assigner State Model and its Activities will ensure that only one Customer
and Clerk
are related at a time. Just as importantly, the Assigner assures that no Clerk
or Customer
waits when a reference can be established.
images/state-subsystem/single-assigner-10.png
The ‘single’ in Single Assigner means that any Customer
may potentially link with any Clerk
provided both are available and the selection algorithm doesn’t exclude either instance for some reason. So, there is only a single pool of relatable instances and only one token required on the Assigner State Model.