Per quanto mi ricordo, questo è stato modellato dopo le reti di Petri.
Ricordo che questa parte della specifica è cambiata tra la mia versione PDF della specifica (20003 gennaio 6) e quando l'UML 2.0 è stato finalizzato nei file Rational Rose (che non posso e non gestirò )
In ogni caso, per riassumere le specifiche, mentre possono esserci più azioni che sono in grado di sparare in qualsiasi momento, UML non si occupa della loro concorrenza. Citando la specifica:
However, the fact that the UML allows for concurrently executing objects does not necessarily imply a distributed software structure. Some implementations may group together objects into a single task and execute sequentially—so long as the behav- ior of the implementation conforms to the sequencing constraints of the specification.
Inoltre, UML non si occupa del passare del tempo, si occupa solo dei requisiti relativi alla sequenza. Ancora una volta, citazione:
The UML does not provide for the specification of a time metric, but only describes sequences of executions.
Detto questo , in una rete di Petri, quando ci sono una o più azioni eseguibili, almeno una dovrà essere eseguita nel passaggio successivo. L'ordine di esecuzione tra questi, proprio come nella vita reale, è indeterminabile. Può anche essere che, date due azioni eseguibili, sparare a una di esse renderà impossibile l'altra a sparare.
Pertanto, nel caso in cui la tua azione sia l'unica azione nel sistema che è eseguibile (perché gli altri non hanno il loro input o sufficiente perché hai un solo flusso di controllo), sarà essere eseguito nel passaggio successivo . Quando arriverà il prossimo passo, nessuno può, e nessuno è disposto a dirtelo.
Nel caso in cui desideri ottenere garanzie, prendi in considerazione modellazione LTL delle tue azioni UML. UML è formale per essere modellabile con LTL.