OOAD - Modellazione dinamica
Il modello dinamico rappresenta gli aspetti dipendenti dal tempo di un sistema. Si occupa dei cambiamenti temporali negli stati degli oggetti in un sistema. I concetti principali sono:
Stato, che è la situazione in una particolare condizione durante la vita di un oggetto.
Transizione, un cambiamento nello stato
Evento, un evento che attiva le transizioni
Azione, un calcolo ininterrotto e atomico che si verifica a causa di qualche evento, e
Concorrenza delle transizioni.
Una macchina a stati modella il comportamento di un oggetto mentre attraversa un certo numero di stati nel corso della sua vita a causa di alcuni eventi e delle azioni che si verificano a causa degli eventi. Una macchina a stati è rappresentata graficamente attraverso un diagramma di transizione di stato.
Stati e transizioni di stato
Stato
Lo stato è un'astrazione data dai valori degli attributi che l'oggetto ha in un determinato periodo di tempo. È una situazione che si verifica per un periodo di tempo finito nella vita di un oggetto, in cui soddisfa determinate condizioni, esegue determinate attività o attende che si verifichino determinati eventi. Nei diagrammi di transizione di stato, uno stato è rappresentato da rettangoli arrotondati.
Parti di uno stato
Name- Una stringa differenzia uno stato da un altro. Uno stato può non avere alcun nome.
Entry/Exit Actions - Indica le attività svolte in entrata e in uscita dallo stato.
Internal Transitions - I cambiamenti all'interno di uno stato che non provocano un cambiamento nello stato.
Sub–states - Stati all'interno degli stati.
Stati iniziali e finali
Lo stato iniziale predefinito di un oggetto è chiamato stato iniziale. Lo stato finale indica il completamento dell'esecuzione della macchina a stati. Gli stati iniziale e finale sono pseudo-stati e potrebbero non avere le parti di uno stato regolare tranne il nome. Nei diagrammi di transizione di stato, lo stato iniziale è rappresentato da un cerchio nero pieno. Lo stato finale è rappresentato da un cerchio nero pieno circondato da un altro cerchio nero non riempito.
Transizione
Una transizione denota un cambiamento nello stato di un oggetto. Se un oggetto si trova in un determinato stato quando si verifica un evento, l'oggetto può eseguire determinate attività soggette a condizioni specifiche e modificare lo stato. In questo caso, si dice che si sia verificata una transizione di stato. La transizione fornisce la relazione tra il primo stato e il nuovo stato. Una transizione è rappresentata graficamente da un arco diretto solido dallo stato di origine allo stato di destinazione.
Le cinque parti di una transizione sono:
Source State - Lo stato interessato dalla transizione.
Event Trigger - L'occorrenza per cui un oggetto nello stato sorgente subisce una transizione se la condizione di guardia è soddisfatta.
Guard Condition - Un'espressione booleana che, se True, provoca una transizione alla ricezione del trigger di evento.
Action - Un calcolo atomico e non interrompibile che si verifica sull'oggetto sorgente a causa di qualche evento.
Target State - Lo stato di destinazione dopo il completamento della transizione.
Example
Supponiamo che una persona stia prendendo un taxi dal luogo X al luogo Y. Gli stati della persona possono essere: In attesa (in attesa di taxi), In viaggio (ha un taxi e ci sta viaggiando) e Reached (ha raggiunto il destinazione). La figura seguente mostra la transizione di stato.
Eventi
Gli eventi sono alcune occorrenze che possono attivare la transizione di stato di un oggetto o di un gruppo di oggetti. Gli eventi hanno una posizione nel tempo e nello spazio ma non hanno un periodo di tempo ad essa associato. Gli eventi sono generalmente associati ad alcune azioni.
Esempi di eventi sono clic del mouse, pressione di un tasto, un'interruzione, overflow dello stack, ecc.
Gli eventi che attivano le transizioni vengono scritti accanto all'arco di transizione nei diagrammi di stato.
Example
Considerando l'esempio mostrato nella figura sopra, il passaggio dallo stato di attesa allo stato di guida avviene quando la persona prende un taxi. Allo stesso modo, lo stato finale viene raggiunto, quando raggiunge la destinazione. Queste due occorrenze possono essere definite come eventi Get_Taxi e Reach_Destination. La figura seguente mostra gli eventi in una macchina a stati.
Eventi esterni e interni
Gli eventi esterni sono quegli eventi che passano da un utente del sistema agli oggetti all'interno del sistema. Ad esempio, il clic del mouse o la pressione di un tasto da parte dell'utente sono eventi esterni.
Gli eventi interni sono quelli che passano da un oggetto a un altro all'interno di un sistema. Ad esempio, overflow dello stack, errore di divisione, ecc.
Eventi differiti
Gli eventi differiti sono quelli che non vengono gestiti immediatamente dall'oggetto nello stato corrente ma sono allineati in una coda in modo che possano essere gestiti dall'oggetto in un altro stato in un secondo momento.
Classi di eventi
La classe di eventi indica un gruppo di eventi con struttura e comportamento comuni. Come con le classi di oggetti, anche le classi di eventi possono essere organizzate in una struttura gerarchica. Le classi di eventi possono avere attributi associati, essendo il tempo un attributo implicito. Ad esempio, possiamo considerare gli eventi di partenza di un volo di una compagnia aerea, che possiamo raggruppare nella seguente classe:
Flight_Departs (Flight_No, From_City, To_City, Route)
Azioni
Attività
L'attività è un'operazione sugli stati di un oggetto che richiede un certo periodo di tempo. Sono le esecuzioni in corso all'interno di un sistema che possono essere interrotte. Le attività sono mostrate in diagrammi di attività che ritraggono il flusso da un'attività all'altra.
Azione
Un'azione è un'operazione atomica che viene eseguita come risultato di determinati eventi. Per atomico, si intende che le azioni non sono interrompibili, cioè, se un'azione inizia a essere eseguita, viene completata senza essere interrotta da alcun evento. Un'azione può operare su un oggetto su cui è stato attivato un evento o su altri oggetti che sono visibili a questo oggetto. Un insieme di azioni comprende un'attività.
Azioni di entrata e uscita
L'azione di ingresso è l'azione che viene eseguita entrando in uno stato, indipendentemente dalla transizione che lo ha portato.
Allo stesso modo, l'azione che viene eseguita mentre si esce da uno stato, indipendentemente dalla transizione che lo ha portato fuori, è chiamata azione di uscita.
Scenario
Lo scenario è una descrizione di una sequenza di azioni specificata. Raffigura il comportamento degli oggetti che subiscono una specifica serie di azioni. Gli scenari primari rappresentano le sequenze essenziali e gli scenari secondari raffigurano le sequenze alternative.
Diagrammi per la modellazione dinamica
Esistono due diagrammi principali utilizzati per la modellazione dinamica:
Diagrammi di interazione
I diagrammi di interazione descrivono il comportamento dinamico tra diversi oggetti. Comprende un insieme di oggetti, le loro relazioni e il messaggio che gli oggetti inviano e ricevono. Pertanto, un'interazione modella il comportamento di un gruppo di oggetti correlati. I due tipi di diagrammi di interazione sono:
Sequence Diagram - Rappresenta l'ordine temporale dei messaggi in maniera tabellare.
Collaboration Diagram - Rappresenta l'organizzazione strutturale degli oggetti che inviano e ricevono messaggi attraverso vertici e archi.
Diagramma di transizione di stato
I diagrammi di transizione di stato o le macchine a stati descrivono il comportamento dinamico di un singolo oggetto. Illustra le sequenze di stati che un oggetto attraversa nel corso della sua vita, le transizioni degli stati, gli eventi e le condizioni che causano la transizione e le risposte dovute agli eventi.
Concorrenza di eventi
In un sistema possono esistere due tipi di concorrenza. Sono -
Concorrenza di sistema
Qui, la concorrenza è modellata a livello di sistema. Il sistema complessivo è modellato come l'aggregazione di macchine a stati, in cui ciascuna macchina a stati viene eseguita contemporaneamente alle altre.
Concorrenza all'interno di un oggetto
In questo caso, un oggetto può generare eventi simultanei. Un oggetto può avere stati composti da stati secondari e possono verificarsi eventi simultanei in ciascuno dei sottostati.
I concetti relativi alla concorrenza all'interno di un oggetto sono i seguenti:
Stati semplici e composti
Uno stato semplice non ha sottostrutture. Uno stato che ha stati più semplici annidati al suo interno è chiamato stato composto. Un sottostato è uno stato annidato all'interno di un altro stato. Viene generalmente utilizzato per ridurre la complessità di una macchina a stati. Gli stati secondari possono essere annidati a qualsiasi numero di livelli.
Gli stati compositi possono avere sottostati sequenziali o sottostati concorrenti.
Sottostati sequenziali
Negli stati secondari sequenziali, il controllo dell'esecuzione passa da uno stato secondario a un altro uno dopo l'altro in modo sequenziale. C'è al massimo uno stato iniziale e uno stato finale in queste macchine a stati.
La figura seguente illustra il concetto di sottostati sequenziali.
Sottostati concorrenti
Negli stati secondari simultanei, i sottostati vengono eseguiti in parallelo, o in altre parole, ogni stato ha macchine a stati che eseguono simultaneamente al suo interno. Ciascuna delle macchine a stati ha i propri stati iniziale e finale. Se uno stato secondario simultaneo raggiunge il suo stato finale prima dell'altro, il controllo attende al suo stato finale. Quando tutte le macchine a stati annidate raggiungono i loro stati finali, i sottostati si uniscono di nuovo in un unico flusso.
La figura seguente mostra il concetto di sottostati simultanei.