Tags and keywords
A Transition between States in a StateMachine can have an optional 'effect' Behavior:
A target State of the Transition can have an 'entry' Behavior:
In the case where the Transition is triggered by a Signal with attributes, the 'effect' or 'entry' Behavior should have 'in' parameters matching those Signal attributes.
What happens if you have both an 'effect' Behavior and an 'entry' Behavior? What happens if you have neither? What happens when the 'effect' or 'entry' Behavior parameters don't exactly match the Signal attributes? Some cases are explored here.
Note that an 'effect' or 'entry' Behavior must be owned by its Transition or State, so you can't directly use a Behavior owned by the owner of the StateMachine; for such cases use wrapper Activities, which are indicated here related to their wrapped Activities using a custom Stereotype «wraps».
EffectVsEntry
of the StateMachine, they are just OpaqueBehaviors that print the value 'v'. But in general 'effect' or 'entry' Behaviors might need to access the owning context.The tool MOSTLY looks after this "wrapping" for you:
But some tool actions "steal ownership" of such Behaviors! The example also shows some "pathological" cases. In Magic Model Analyst® (Cameo Simulation Toolkit®) one can in fact feed some inconsistent arguments into an 'effect' or 'entry' Behavior. The OpaqueBehaviorStringArg
with argument s:String
accepts the v:Real
without complaint! If you instead use an OpaqueBehavior BlockArg
with argument b:FAILME
- where FAILME
is a Block - you at least get a warning like this:
There are also cases where the Signal TrigEffectOrEntry
is not consumed at all. There is no Transition with trigger TrigEffectOrEntry
from State HadEffectBlockArg
. A warning is correctly issued to the simulation console: