Un diagramma di interazione di UML mostra l'interazione tra un insieme di oggetti, basata sullo scambio di messaggi.
Un interazione è una specifica di come alcuni oggetti si scambiano messaggi nel tempo per eseguire un compito nell'ambito di un certo contesto.
Un'interazione è motivata dalla necessità di eseguire un determinato compito. Tale compito è rappresentato da un messaggio che dà inizio all'interazione, inviato a un oggetto designato come responsabile per tale compito. Se il compito è complesso, questo oggetto non lo svolge da solo, ma collabora e interagisce con altri oggetti.
Con diagrammi di interazione ci riferiamo a due tipi di diagrammi più specifici:
L'immagine sotto mostra un diagramma di sequenza:
il cui significato è del tipo:
I diagrammi di comunicazione mostrano le interazioni tra gli oggetti in un formato a grafo in cui gli oggetti possono essere posizionati ovunque nel diagramma:
Ogni tipo di diagramma ha i suoi vantaggi, tuttavia i diagrammi di sequenza hanno più strumenti UML a disposizione. I diagrammi di comunicazione occupano meno spazio, poiché non si è costretti a far interagire orizzontalmente le classi (cosa che avviene per i diagrammi di sequenza). Questi ultimi vengono utilizzati quando si devono abbozzare dei diagrammi UML, mentre i diagrammi di sequenza sono più utili quando si ha necessità di andare nel dettaglio, a causa del loro potere a livello di notazione.
Un messaggio trovato è un messaggio il cui mittente non è specificato, normalmente si tratta di messaggi provenienti dallo strato della UI.
La barra d'esecuzione indica è il periodo di tempo per cui un'operazione è eseguita.
Una linea con freccia piena indica un messaggio sincrono.
Ci sono due modalità:
La linea di messaggio di ritorno è vuota e tratteggiata.
Viene usata una barra di esecuzione annidata.
La linea per la creazione di messaggi utilizza la parola chiave create e la linea è tratteggiata con la freccia piena.
Per gestire, per esempio, l'associazione tra un oggetto software Sale e molti oggetti SalesLineItem, l'oggetto Sale può mantenere una collezione lineItems che è una lista di oggetti SalesLineItem. Per formare il collegamento da una Sale s a una SalesLineItem sli, l'oggetto software s deve aggiungere l'oggetto sli alla sua collezione lineItems usando un essaggio add, come mostrato di seguito:
lineItems è un membro di s (che è una Sale), sli è stato passato da un messaggio trovato ed è giunto fino alla Sale che lo aggiunge utilizzando il metodo add della lista di SalesLineItem.
I frame sono regioni o frammenti dei diagrammi; hanno un operatore (come alt e loop) e una guardia (ovvero una condizione, della forma [test booleano], che va posizionata sopra alla linea di vita che deve valutare tale condizione).
Operatore frame | Significato |
---|---|
alt | Alternativa (costrutto if-else) |
opt | Frammento opzionale che viene eseguito se la guardia è vera (un'istruzione if) |
loop | Frammento da eseguire ripetutamente finché la guardia è vera |
Esempio: iterare su una collezione
Un approccio per mostrare il polimorfismo consiste nell'utilizzare più diagrammi di sequenza: uno che mostra il messaggio polimorfo all'oggetto della superclasse astratta o dell'interfaccia:
insieme a diagrammi di sequenza separati che descrivono nel dettaglio ciascun caso polimorfo, ciascuno che inizia con un messaggio trovato polimorfo:
Una chiamata di messaggio asincrono non attende una risposta: non è bloccante.
Vengono utilizzare negli ambienti multi-thread come .NET o Java per creare e iniziare nuovi thread di esecuzione.
Prossimo argomento: diagrammi delle classi.