I Communication diagram mostrano come gli oggetti collaborano per realizzare un’interazione.
Un communication diagram è un grafo i cui vertici sono oggetti e cui archi rappresentano link di comunicazione fra oggetti.
L’ordinamento temporale è indicato facendo precedere il messaggio da un numero di sequenza.
Per le chiamate innestate si utilizza una dot notation.
Sono anche noti come Collaboration Diagram.
In un communication diagram dovrebbero comparire gli stessi elementi di un sequence diagram (la conversione automatica è possibile).
Non bisogna confondere communication diagram e object diagram.
Un diagramma di stato descrive il comportamento di un sistema, una parte di un sistema, o di un oggetto specifico.
Uno stato è rappresentato da un rettangolo arrotondato con il suo nome.
In un dato istante, uno e un solo stato del diagramma può verificarsi.
Tutti gli stati sono considerati stabili: solo un evento può causare la transizione da uno stato all’altro.
Stati speciali (pseudostati):
Una transizione è un cambiamento di stato in risposta ad un evento.
È considerata istantanea.
Viene etichettata con la sintassi:
Spesso le auto-transizioni sono indicate come attività interne. All’interno dello stato vengono descritti eventi, trigger e attività.
Entry identifica le attività che si svolgono all’ingresso nello stato.
Exit identifica le attività che si svolgono all’uscita dallo stato.
Talvolta gli stati non corrispondono a periodi in cui l’oggetto è in attesa inerte di un evento ma a periodi di tempo necessari al completamento di un’attività.
In tal caso si parla di Activity State.
Tale modellazione è coerente con quella di una macchina di Moore, nella quale le azioni sono legate agli stati.
Lo stato In Ricerca è un Activity State.
L’arco di uscita dallo stato non etichettato indica l’uscita per terminazione dell’attività.
Cerca nuovo hardware è una descrizione più precisa dell’attività dell’activity state.
Non essendoci una guardia, è l’unica attività che può essere eseguita da quello stato.
Il concetto di Activity State è molto simile al concetto di attività che verrà definito nell’ambito degli Activity Diagram.
UML 1 distingueva tra Azioni ed Attività:
Un diagramma di stato può essere innestato all’interno di uno stato.
Gli stati del diagramma interno sono detti sotto-stati.
Gli archi possono essere diretti verso il superstato (e in tal caso si intende che siano diretti verso il suo stato iniziale) o verso un suo sottostato.
Uno statechart a livello di dettaglio può essere implementato utilizzando una catena di switch nidificati.
Switch (statoCorrente) {
Case stato1:
Switch (unEvento)
Case evento1:
if (guardia1)
azioneEvento1;
Break;
Case stato2 ...
...
}
Una soluzione più efficace in sistemi object oriented consiste nell’utilizzo del pattern State.
Lo statechart viene tradotto con:
Gli statechart diagrams sono utili quando si vuole modellare il comportamento di una classe complessa.
Nella modellazione di dettaglio, gli statechart diagram possono essere implementati efficacemente utilizzando il pattern State.
I diagrammi di stato sono particolarmente utili nella modellazione di sistemi ad eventi.
Un caso particolare molto importante è rappresentato dalle interfacce utente visuali (GUI – Graphical User Interface).
In tal caso uno stato può corrispondere ad una finestra, mentre un evento trigger corrisponde ad un evento generato dall’utente (un tasto premuto, un click del mouse, etc.).
Un activity diagram può essere usato per modellare un flusso di lavoro (workflow):
Un activity diagram rappresenta un estensione di un diagramma di flusso, con l’introduzione, in particolare, delle esecuzioni concorrenti.
Un activity diagram nasce, nell’ambito di UML, come una estensione dello statechart diagram.
Nelle ultime versioni se ne è, però, completamente distaccato, per cui ha senso studiarlo separatamente.
Le attività sono definite come azioni elaborative che il sistema deve compiere e sono modellate con rettangoli dai bordi arrotondati identificate dal nome dell’attività stessa.
Il flusso tra le attività è modellato con frecce entranti/uscenti dall’attività.
Per convenzione, l’ingresso nell’attività coincide con il suo inizio; l’uscita dall’attività coincide con il suo completamento.
Esistono anche qui degli stati iniziali e finali delimitanti il diagramma.
Il branch è una attività di decisione.
Corrisponde ad un IF;
È modellata con un rombo che abbia un solo arco entrante e più di un arco uscente;
Ogni arco uscente è etichettato con una condizione di guardia (tra parentesi quadre);
Le condizioni devono essere tra loro mutuamente esclusive.
Il merge è l’elemento duale del branch
Corrisponde ad un END IF;
È anch’esso modellato con un rombo, ma con un solo arco uscente e più di un arco entrante.
Il fork rappresenta una biforcazione del flusso in due o più thread.
È rappresentato con una barra orizzontale nella quale entra un solo arco e ne esce più di uno.
Gli archi uscenti non sono etichettati e si intende che altrettanti thread siano avviati contemporaneamente a seguito della biforcazione.
Il join è il duale del fork.
È rappresentato anch’esso da una barra orizzontale nella quale entra più di un arco e ne esce uno solo.
Fork e Join corrispondono esattamente alle omonime primitive concettuali della programmazione concorrente.
Gli activity diagram possono essere utilizzati per modellare interazioni tra classi diverse.
L’activity diagram è suddiviso in ‘corsie’ verticali (swimlanes), in ognuna delle quali trovano posto le activity che si riferiscono ad una particolare classe.
Il limite degli activity diagram è probabilmente la descrizione troppo dettagliata dei problemi.
Per poter supportare diversi livelli di astrazione, è possibile racchiudere attività complesse in attività generiche, e dettagliarle separatamente in altri grafici.
Negli activity diagram non compaiono esplicitamente eventi, a differenza degli statechart diagram.
Per compensare tale mancanza, sono stati introdotti i segnali:
1. Introduzione
4. Casi d'uso
6. Class Diagram – parte prima
7. Class diagram – parte seconda
8. Class diagram – parte terza
9. Modellazione architetturale
10. Sequence Diagram
14. Progettazione Architetturale
15. Design Patterns – Parte prima
16. Design Patterns – Parte seconda
17. Progettazione dell'interfaccia utente
Martin Fowler, UML Distilled, cap. 10 (statechart diagram), cap. 11 (activity diagram), cap. 12 (communication diagram).