back to top

Diagrammi di stato: introduzione e transizioni – Guida UML

In questo capitolo ci occumeremo dei diagrammi di stato. Anche questi diagrammi, come i diagrammi di sequenza, descrivano un comportamento dinamico del sistema, ma a differnza di quelli di sequenza che rappresentano le interazioni presenti tra gli oggetti i diagrammi di stato modellano dinamicamento ciò che accade in un determinato oggetto. In sostanza si rappresenta il comportamento di un determinato oggetto di una classe in relazione anche ad input esterni utilizzando i diagrammi di stato. Gli input esterni o il verificarsi di alcune condizioni che hanno come effetto il cambio di stato da parte dell’oggetto sono definiti eventi. E’ importante sottolineare il fatto che la risposta che un determinato oggetto ha ad un particolare evento è in funzione dello stato in cui si trova. Ovvero tutti gli oggetti, istanze di una stessa classe, avranno lo stesso identico comportamento se si verifica un determinato evento e si trovano nello stesso stato. Ma come può essere definito uno stato? Uno stato non è altro che una parte di vita dell’oggetto istanziato nel quale l’oggetto si trova in relazioni ad eventi e nel quale compie delle operazioni più o meno complesse. Ma come sono legati i vari stati che l’oggetto può assumere? Le relazioni tra gli stati sono dette transizioni ovvero si dice che per esempio un oggetto compie una transizione da uno stato A ad uno stato B quando determinate condizioni sono soddisfatte oppure si è verificato un evento che ha dato il via alla transizione. Esiste un particolare tipo di transizione detta transizione sicura nella quale lo stato di partenza e quello di arrivo sono gli stessi e quindi non abbiamo un cambio di stato. Iniziamo con il dire che, per quanto riguarda i diagrammi di stato, esistono quattro componenti principali:

  • Stato iniziale: è lo stato iniziale dell’oggetto. E’ rappresentato con un cerchio colorato di nero
  • Stato generico: rappresenta un generico stato assunto dall’oggetto. E’ rappresentato con un rettangolo con gli angoli stondati.
  • Transizioni: collegano uno stato sorgente ad uno destinazione nel quale l’oggetto può andare. Sono rappresentate con delle frecce con all’estremità una freccia che punta verso lo stato di destinazione.
  • Stato finale: è lo stato finale dell’oggetto. E’ rappresentato dal simbolo dello stato iniziale inscritto in un cerchio più grande a sfondo bianco.

Spesso, in UML, viene definito un altro tipo di stato ovvero lo stato composto: questi tipi di stati hanno la proprietà di racchiudere al loro interno altri stati e sono molto utilizzati per dare una rappresentazione compatta del diagramma. Solitamente, per operazioni che richiedono un gran numero di stati, viene data una rappresentazione compatta con l’utilizzo degli stati composti e poi si procede ad effettuare un diagramma degli stati per ogni stato composto. In UML non viene dato un limite per quanto riguarda l’aggregazione in quanto uno stato composto potrebbe contenere al suo interno due stati composti che a loro volta potrebbero contenerne altri. Certo è che, questo tipo di rappresentazione, non è molto corretta in quanto la probabilità di “perdersi” nella lettura del grafico è altissima. Per questo motivo si consiglia di utilizzare un solo livello di raggruppamento, definendo uno stato composto formato da due o più stati semplici.

Sia per quanto riguarda le transizioni che gli stati, esistono delle convenzioni per la loro descrizione e verranno forniti alcuni esempi grafici per meglio chiarire i concetti. Per quanto riguarda le transizioni possiamo dire che, la scrittura deve eseguire la seguente sintassi:

Evento [guardia]/azione 1; azione 2;...;azione n

Per quanto riguarda la parola chiave Evento indica chiarmente il nome dell’evento che abbiamo preso in considerazione. La guardia è un costrutto opzionale e sostanzialmente controlla che sia verificate alcune condizioni prima di effettuare la transizione. Dunque il passaggio di un’oggetto da uno stato ad un altro, regolata da una transizione con guardia, non è immediato in quanto il solo evento non può far attivare la transizione. I costrutti azione 1.. azione n rappresentano tutte le azioni che l’oggetto compie dopo la transizione. Per chiarire ciò che fino adesso è stato esposto è opportno mostrare un esempio grafico:

Esempio di trasizioni in UML
PubblicitÃ