Macchine di stato, ad esempio macchine di stato UML, statecharts o altre macchine a stati finiti, consentono di eseguire azioni quando una macchina a stati effettua una transizione tra stati o è all'interno di uno stato.
Neilinguaggidiprogrammazioneconeccezioni,possonoverificarsieccezioniall'internoditaliazioni,anchesenonsiaccettanoeccezionicontrollateperleazionineilinguaggidiprogrammazionechehannocontrollatoeccezioniononhannoconsentitotutteleeccezioni.NeilinguaggidiprogrammazionecomeJavaoAdaleeccezionifannopartedellasemanticadellinguaggio,adesempioOutOfMemoryError
oConstraint_Error
,epossonoverificarsiinmoltipunti.Quindilemacchinedistatodevonogestirleinqualchemodo.
Glieventisonospessoaccodatiaunacodadieventiparidellamacchinaastatiegestitiinmodoasincrono.Pertanto,èimpossibilepropagareun'eccezioneaunchiamante.Finorahotrovatoduemetodidigestionedelleeccezioninelleazionidellemacchineastati:
- Richiamaunarichiamatagestoredieccezionidellamacchinaastati,deglistatidiorigineodidestinazioneodellatransizionechevieneeseguita.
Il North State Framework per le macchine a stati UML usa questo metodo. - Genera un evento per l'eccezione e gestisci quell'evento nella macchina a stati. Questo è stato descritto in Modellazione e analisi della gestione delle eccezioni usando gli Statecharts UML .
Tuttavia, non è chiaro per me cosa sia un'eccezione durante una transizione per la semantica delle macchine a stati. Alcune domande che ti vengono in mente sono:
- La transizione viene eseguita quando si verifica l'eccezione?
- È equivalente a un'espressione di guardia che restituisce false e la macchina di stato deve considerare altre transizioni in conflitto con priorità più bassa?
- L'evento è considerato gestito o il computer di stato deve tentare di rielaborarlo dopo che è stato richiamato un gestore di eccezioni?
- E gli effetti collaterali delle azioni delle transizioni che sono state eseguite prima che si verificasse l'eccezione?
- Qual è la priorità dell'evento che viene generato per l'eccezione se ce n'è uno?
Più ci penso, più domande emergono. Sfortunatamente, le specifiche UML e altre descrizioni delle notazioni dei computer di stato non considerano eccezioni. Anche la Semantica precisa delle macchine di stato UML non le considera.
Hai altre idee su come gestire le eccezioni nelle macchine a stati? Quali sono le semantiche di una transizione se si verifica un'eccezione nella sua azione?