Diagrammi di interazione

Un diagramma di interazione di UML mostra l'interazione tra un insieme di oggetti, basata sullo scambio di messaggi.

Cos'è un'interazione?

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.

Diagrammi di sequenza e di comunicazione
...

Con diagrammi di interazione ci riferiamo a due tipi di diagrammi più specifici:

  • diagrammi di sequenza
  • diagrammi di comunicazione

L'immagine sotto mostra un diagramma di sequenza:
Pasted image 20230711163627.png
il cui significato è del tipo:

  • una classe A ha un metodo di nome doOne e un attributo di tipo B
  • la classe B ha dei meotid doTwo e doThree che vengono chiamati da A

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:
Pasted image 20230711164133.png

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.

Notazione comune dei diagrammi di interazione UML
...

Pasted image 20230711164639.png

Notazione base per i diagrammi di sequenza
...

Pasted image 20230711164826.png
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.

Illustrare i messaggi di ritorno
...

Ci sono due modalità:

  • utilizzare per il messaggio la sintassi retVar = message(parameter)
  • utilizzare una linea di messaggio di risposta (o ritorno) alla fine di una barra di esecuzione.

La linea di messaggio di ritorno è vuota e tratteggiata.
Pasted image 20230711165329.png

Messaggi a self o this
...

Pasted image 20230711165419.png
Viene usata una barra di esecuzione annidata.

Creazione di istanze
...

Pasted image 20230711165524.png
La linea per la creazione di messaggi utilizza la parola chiave create e la linea è tratteggiata con la freccia piena.

Distruzione di un oggetto (anche se raramente si distruggono degli oggetti)
...

Pasted image 20230711165724.png

Formazione di collegamenti
...

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:
Pasted image 20230711165957.png
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 diagrammi possono anche utilizzare dei frame (ALT, LOOP, ...)
...

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).

Pasted image 20230711173519.png

Operatore frameSignificato
altAlternativa (costrutto if-else)
optFrammento opzionale che viene eseguito se la guardia è vera (un'istruzione if)
loopFrammento da eseguire ripetutamente finché la guardia è vera

Esempio: iterare su una collezione
Pasted image 20230711173833.png

Messaggi e casi polimorfi
...

Pasted image 20230711174111.png
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:
Pasted image 20230711174137.png
insieme a diagrammi di sequenza separati che descrivono nel dettaglio ciascun caso polimorfo, ciascuno che inizia con un messaggio trovato polimorfo:
Pasted image 20230711174400.png

Chiamate sincrone e asincrone
...

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.
Pasted image 20230711174913.png

Prossimo argomento: diagrammi delle classi.