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.