“Declarative” stato composito con sottostati concorrenti in UML
-
26-10-2019 - |
Domanda
Dato un sistema che contiene due componenti, A e B, e
Il sistema si avvia A e B contemporaneamente. Ora A può passare attraverso gli stati {A.Starting, A.READY}, e B può essere in stati {B.Starting, B.DoingX, B.DoingY}. (Eventi di transizione tra A e gli stati di B sono chiamati di conseguenza: B.doingx => B va a B.DoingX ecc ...)
Voglio modello che
- Anche se A è in A.Starting, o B è in B.Starting, il sistema è "di partenza"
- Il sistema si trova in stato di "DoingX" quando A è in A.READY e B è in B.DoingX
- Il sistema si trova in stato di "DoingY" quando A è in A.READY e B è in B.DoingY
Se non mi sbaglio, la forcella / join pseudo-stato potrebbero essere utilizzati qui.
Ma fare questi elementi del modello hanno la semantica dichiarativa dello stato composto di cui sopra? C'è un altro modo per modellare questo?
(Nota: gli schemi sono da http://yuml.me )
Soluzione
Perché non basta tirare questi pezzi? Ecco un'altra idea su come si potrebbe modellare (supponendo ho capito correttamente):
-
uno stato "Avvio", che contiene gli stati che si riferiscono come A.Starting e B.Starting nelle regioni parallele (si può usare fork / join qui, o semplicemente fare affidamento sul comportamento predefinito di tutte le regioni di essere attivato quando "Avvio" stato viene immesso)
-
un altro stato "fare" che contiene una regione con il tuo stato "A.READY" e un'altra regione in parallelo, che contiene i due stati "B.DoingX" e "B.DoingY".
Se si ha realmente bisogno di avere uno stato globale "DoingX", quindi potrebbe essere necessario creare due stati che corrispondono a A.READY.
In ogni modo, in una prospettiva più ampia: Credo che il vostro punto di vista è un po 'fuori qui, quando si dice che il "sistema è in stato ...". Piuttosto, il sistema modellato da tale macchina a stati a è in un insieme di stati. Così normalmente, sarei perfettamente felice di dire che "il sistema è attualmente in A.READY e B.DoingX".
Forse tutto ciò che serve è un cambiamento di terminologia. Che dire di questo:
Il sistema è in Configurazione "DoingX" quando A.READY e B.DoingX stati sono attivi?
In risposta al commento: Sì, questo è normale, qui è la parte corrispondente dalla specifica sovrastruttura (versione 2.4 beta):
In una macchina a stati gerarchico più di uno stato può essere attivo allo stesso tempo. [...] l'attuale “stato” attiva è rappresentata da una serie di alberi di stati partire dai piú maggior parte degli stati delle regioni radice verso il sottostato attivo più interno. Ci riferiamo a tale albero stato un come Stato di configurazione .