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 )

È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top