Tags and keywords
This one is subtle (there are a few "gotchas" to watch in implementing it) but it's easy once you've got the hang of it.
We are going to send a Signal(Event) that carries multiple values (attribute Properties) to a StateMachine, where it will be consumed by one of:
- A Transition with an 'effect' Behavior.
- A State with an 'entry' Behavior.
- A State with an 'exit' Behavior.
The SignalEvent available to the 'exit' Behavior of a State is for an outgoing Transition.
We have a class Sender
with an owned part target:Consumer
. Note that it is of aggregation kind 'composite', otherwise when you run from the Sender
it won't start the StateMachine of Consumer
.
We have a Signal named SigWithValues
that carries an i:Integer
and a r:Real
value. (You can have course use more complex types with sub-structure, but then you have to do additional unpacking, we'll keep it simple for now.)
The StateMachine ConsumerSTM
has a Transition with a SignalEvent trigger for SigWithValues
and an 'effect' Activity called EffectConsumer
, which simply prints each of the received i:Integer
and a r:Real
with the prefix "effect:".
That happens to be an implementation choice for Magic Model Analyst® (Cameo Simulation Toolkit®) , it is not clearly specified in the UML spec. It's a common sense pattern and easy to follow.
The State Behave
has a similar 'entry' Activity called EntryConsumer
, and an 'exit' Activity called ExitConsumer
, which will be invoked when another SignalEvent for SigWithValues
triggers the outgoing Transition.
The implementation of the driving activity Sender
is a little tricky, but only because this example combines all three cases; in a typical application you would probably not have the same signal type driving each of an 'effect', 'entry', or 'exit' this way. The Next
AcceptEventAction and the End
AcceptEventAction are required to make the Sender
wait while the ConsumerSTM
does its processing.
This is the console output from Magic Model Analyst® (Cameo Simulation Toolkit®) :
00:00:00,000 : **** Class Sender is initialized. ****
00:00:00,000 : **** Class Sender behavior is started! ****
effect: i=1
effect: r=2.2
entry: i=1
entry: r=2.2
exit: i=3
exit: r=4.4
00:00:59,058 : **** Activity Sender execution is terminated. ****
00:00:59,059 : **** Class Sender execution is terminated. ****
Visit also this video showing the simulation in Magic Model Analyst® (Cameo Simulation Toolkit®)
:
You may wish to visit one of these tutorials next: