Search code examples
umlstate-machinestate-pattern

state transition with different guard condition


In the state pattern how is this modeled ?

state A to state B on trigger X and conditon C1 when current state is A

state A to state C on trigger X and condition C2 when current state is A

how is this usually accomplished ? I have a lot of guard conditions that I may need to implement.


Solution

  • That's pretty standard see e.g. this example.

    [Edited on basis it's not homework!]

    Assuming I understand right:

    • You have one event (X) which can trigger one of two possible transitions
    • Selecting which transition to fire is made according to which condition holds true (C1 or C2)

    If so that's a standard case for using guard conditions. The syntax would be:

    • X[C1] as the label on the transition A->B, and
    • X[C2] on the transition A->C.

    C1 & C2 must evaluate to booleans, so it would be fine to substitute var==2 as per your comment. i.e. the labels would become X[var==2] and X[var==3].

    For it to be semantically correct, C1 & C2 must be mutually exclusive in state A - otherwise you have non-determinism.

    hth.