Linguaggio di modellazione unificato (UML) è un linguaggio di modellazione nel campo dell'ingegneria del software che mira a stabilire modalità standard per visualizzare la progettazione di un sistema. UML guida la creazione di più tipi di diagrammi come diagrammi di interazione, struttura e comportamento. UN diagramma di sequenza è il più comunemente usato interazione diagramma.

Diagramma di interazione
Un diagramma di interazione viene utilizzato per mostrare il comportamento interattivo di un sistema. Poiché visualizzare le interazioni in un sistema può essere difficile, utilizziamo diversi tipi di diagrammi di interazione per catturare varie caratteristiche e aspetti dell'interazione in un sistema.
- Un diagramma di sequenza descrive semplicemente l'interazione tra gli oggetti in ordine sequenziale, ovvero l'ordine in cui si verificano queste interazioni.
- Possiamo anche usare i termini diagrammi di eventi o scenari di eventi per fare riferimento a un diagramma di sequenza.
- I diagrammi di sequenza descrivono come e in quale ordine funzionano gli oggetti in un sistema.
- Questi diagrammi sono ampiamente utilizzati da uomini d'affari e sviluppatori di software per documentare e comprendere i requisiti per i sistemi nuovi ed esistenti.
Argomenti importanti per i diagrammi di sequenza
- Notazione del diagramma di sequenza
- Attori
- Come creare diagrammi di sequenza?
- Casi d'uso dei diagrammi di sequenza
- Sfide legate all'utilizzo dei diagrammi di sequenza
1. Notazione del diagramma di sequenza
1.1. Attori
Un attore in un diagramma UML rappresenta un tipo di ruolo in cui interagisce con il sistema e i suoi oggetti. È importante notare qui che un attore è sempre al di fuori dell'ambito del sistema che intendiamo modellare utilizzando il diagramma UML.

Utilizziamo attori per rappresentare vari ruoli tra cui utenti umani e altri soggetti esterni. Rappresentiamo un attore in un diagramma UML utilizzando la notazione 'persona stilizzata'. Possiamo avere più attori in un diagramma di sequenza.
Per esempio:
Qui l'utente nel sistema di prenotazione del posto viene mostrato come un attore laddove esiste al di fuori del sistema e non fa parte del sistema.

1.2. Linee di vita
Una linea di vita è un elemento con nome che raffigura un singolo partecipante in un diagramma di sequenza. Quindi, in pratica, ogni istanza in un diagramma di sequenza è rappresentata da un'ancora di salvezza. Gli elementi della linea di vita si trovano in alto in un diagramma di sequenza. Lo standard in UML per la denominazione di una linea di vita segue il seguente formato:
Nome istanza: nome classe

10 1 milione
Mostriamo un'ancora di salvezza in un rettangolo chiamato Testa con il suo nome e tipo. La testa si trova sopra una linea tratteggiata verticale (chiamata stelo) come mostrato sopra.
- Se vogliamo modellare un'istanza senza nome, seguiamo lo stesso schema tranne che ora la parte del nome della linea di vita viene lasciata vuota.
- Differenza tra un'ancora di salvezza e un attore
- Un'ancora di salvezza ritrae sempre un oggetto interno al sistema mentre gli attori vengono utilizzati per rappresentare oggetti esterni al sistema.
Di seguito è riportato un esempio di diagramma di sequenza:

1.3. Messaggi
La comunicazione tra gli oggetti viene rappresentata tramite messaggi. I messaggi vengono visualizzati in ordine sequenziale sulla linea di vita.
- Rappresentiamo i messaggi utilizzando le frecce.
- Linee di vita e messaggi costituiscono il nucleo di un diagramma di sequenza.

I messaggi possono essere sostanzialmente classificati nelle seguenti categorie:
Messaggi sincroni
Un messaggio sincrono attende una risposta prima che l'interazione possa andare avanti. Il mittente attende finché il destinatario non ha completato l'elaborazione del messaggio. Il chiamante continua solo quando sa che il destinatario ha elaborato il messaggio precedente, ovvero riceve un messaggio di risposta.
- Un gran numero di chiamate nella programmazione orientata agli oggetti sono sincrone.
- Usiamo a punta di freccia solida per rappresentare un messaggio sincrono.

Messaggi asincroni
Un messaggio asincrono non attende una risposta dal destinatario. L'interazione va avanti indipendentemente dal fatto che il destinatario elabori o meno il messaggio precedente. Usiamo a punta di freccia foderata per rappresentare un messaggio asincrono.

1.4. Creare un messaggio
Usiamo un messaggio Create per istanziare un nuovo oggetto nel diagramma di sequenza. Ci sono situazioni in cui una particolare chiamata di messaggio richiede la creazione di un oggetto. È rappresentato con una freccia tratteggiata e su di essa è etichettata la parola di creazione per specificare che si tratta del simbolo del messaggio di creazione.
Per esempio:
La creazione di un nuovo ordine su un sito di e-commerce richiederebbe la creazione di un nuovo oggetto della classe Ordine.
numero di Armstrong

1.5. Cancella il messaggio
Usiamo un messaggio di eliminazione per eliminare un oggetto. Quando a un oggetto viene deallocata memoria o viene distrutto all'interno del sistema utilizziamo il simbolo Elimina messaggio. Distrugge la presenza dell'oggetto nel sistema. È rappresentato da una freccia che termina con una x.
Per esempio:
Nello scenario seguente, quando l'ordine viene ricevuto dall'utente, l'oggetto della classe dell'ordine può essere distrutto.

1.6. Messaggio personale
Potrebbero verificarsi alcuni scenari in cui l'oggetto deve inviare un messaggio a se stesso. Tali messaggi sono chiamati Self Messages e sono rappresentati con a Freccia a forma di U .

Un altro esempio:
Considera uno scenario in cui il dispositivo desidera accedere alla propria webcam. Tale scenario è rappresentato utilizzando un messaggio personale.

1.7. Messaggio di risposta
I messaggi di risposta vengono utilizzati per mostrare il messaggio inviato dal destinatario al mittente. Rappresentiamo un messaggio di ritorno/risposta utilizzando un punta della freccia aperta con una linea tratteggiata . L'interazione prosegue solo quando il destinatario invia un messaggio di risposta.

Per esempio:
cicli Java
Considera lo scenario in cui il dispositivo richiede una foto all'utente. Qui il messaggio che mostra la foto inviata è un messaggio di risposta.

1.8. Messaggio trovato
Un messaggio Trovato viene utilizzato per rappresentare uno scenario in cui un'origine sconosciuta invia il messaggio. È rappresentato utilizzando un freccia diretta verso un'ancora di salvezza da un punto finale.
Per esempio:
Considera lo scenario di un guasto hardware.

Può essere dovuto a molteplici ragioni e non siamo sicuri di cosa abbia causato il guasto hardware.

1.9. Messaggio perduto
Un messaggio Smarrito viene utilizzato per rappresentare uno scenario in cui il destinatario non è noto al sistema. È rappresentato utilizzando una freccia diretta verso un punto finale da una linea di vita.
Per esempio:
Considera uno scenario in cui viene generato un avviso.

L'avviso potrebbe essere generato per l'utente o per altro software/oggetto con cui la linea di vita sta interagendo. Poiché la destinazione non è nota in anticipo, utilizziamo il simbolo del messaggio smarrito.

1.10. Guardie ✔
Per modellare le condizioni utilizziamo le guardie in UML. Vengono utilizzati quando dobbiamo limitare il flusso di messaggi con il pretesto che una condizione è soddisfatta. Le guardie svolgono un ruolo importante nel consentire agli sviluppatori di software di conoscere i vincoli associati a un sistema o a un particolare processo.
Per esempio:
Per poter prelevare contanti, avere un saldo maggiore di zero è una condizione che deve essere soddisfatta come mostrato di seguito.


Il diagramma di sequenza sopra mostra il diagramma di sequenza per un lettore musicale basato sulle emozioni:
- Innanzitutto l'applicazione viene aperta dall'utente.
- Il dispositivo ottiene quindi l'accesso alla web cam.
- La webcam cattura l'immagine dell'utente.
- Il dispositivo utilizza algoritmi per rilevare il volto e prevedere l'umore.
- Quindi richiede al database il dizionario dei possibili stati d'animo.
- L'umore viene recuperato dal database.
- L'umore viene visualizzato all'utente.
- La musica viene richiesta dal database.
- La playlist viene generata e infine mostrata all'utente.
2. Come creare diagrammi di sequenza?
La creazione di un diagramma di sequenza prevede diversi passaggi e in genere viene eseguita durante la fase di progettazione dello sviluppo del software per illustrare come i diversi componenti o oggetti interagiscono nel tempo. Ecco una guida passo passo su come creare diagrammi di sequenza:
- Identificare lo scenario:
- Comprendi lo scenario specifico o il caso d'uso che desideri rappresentare nel diagramma di sequenza. Potrebbe trattarsi di un'interazione specifica tra oggetti o del flusso di messaggi in un particolare processo.
- Elenca i partecipanti:
- Identificare i partecipanti (oggetti o attori) coinvolti nello scenario. I partecipanti possono essere utenti, sistemi o entità esterne.
- Definire le linee di vita:
- Disegna una linea tratteggiata verticale per ciascun partecipante, che rappresenta l'ancora di salvezza di ciascun oggetto nel tempo. La linea di vita rappresenta l'esistenza di un oggetto durante l'interazione.
- Disporre le linee di vita:
- Posizionare le linee di vita orizzontalmente nell'ordine del loro coinvolgimento nell'interazione. Questo aiuta a visualizzare il flusso di messaggi tra i partecipanti.
- Aggiungi barre di attivazione:
- Per ogni messaggio, disegna una barra di attivazione sull'ancora di salvezza del partecipante mittente. La barra di attivazione rappresenta la durata del tempo durante il quale il partecipante elabora attivamente il messaggio.
- Disegna messaggi:
- Utilizza le frecce per rappresentare i messaggi tra i partecipanti. I messaggi scorrono orizzontalmente tra le linee di vita, indicando la comunicazione tra gli oggetti. Diversi tipi di messaggi includono i messaggi sincroni (freccia continua), asincroni (freccia tratteggiata) e auto-messaggi.
- Includi messaggi di ritorno:
- Se un partecipante invia un messaggio di risposta, disegna una freccia tratteggiata che ritorna al mittente originale per rappresentare il messaggio di risposta.
- Indicare Tempistica e Ordine:
- Utilizza i numeri per indicare l'ordine dei messaggi nella sequenza. Puoi anche utilizzare linee tratteggiate verticali per rappresentare il verificarsi di eventi o il passare del tempo.
- Includi condizioni e cicli:
- Utilizza frammenti combinati per rappresentare condizioni (come le istruzioni if) e cicli nell'interazione. Ciò aggiunge complessità al diagramma di sequenza e aiuta a dettagliare il flusso di controllo.
- Considera l'esecuzione parallela:
- Se si stanno svolgendo attività parallele, rappresentatele disegnando linee tratteggiate verticali parallele e posizionando i messaggi di conseguenza.
- Revisione e perfezionamento:
- Rivedi il diagramma di sequenza per chiarezza e correttezza. Assicurati che rappresenti accuratamente l'interazione prevista. Perfeziona secondo necessità.
- Aggiungi annotazioni e commenti:
- Includere eventuali informazioni aggiuntive, annotazioni o commenti che forniscano contesto o chiarimenti per gli elementi nel diagramma.
- Presupposti e vincoli del documento:
- Se sono presenti presupposti o vincoli relativi all'interazione, documentarli insieme al diagramma.
- Utensili:
- Utilizza uno strumento di modellazione UML o un software di creazione di diagrammi per creare un diagramma di sequenza accurato e dall'aspetto professionale. Questi strumenti spesso forniscono funzionalità per facilitare la modifica, la collaborazione e la documentazione.
3. Casi d'uso dei diagrammi di sequenza
- Visualizzazione del comportamento del sistema:
- I diagrammi di sequenza vengono utilizzati per illustrare il comportamento dinamico di un sistema mostrando le interazioni tra vari componenti, oggetti o attori nel tempo.
- Forniscono una rappresentazione chiara e visiva del flusso di messaggi ed eventi in uno scenario specifico.
- Progettazione e architettura del software:
- Durante la fase di progettazione dello sviluppo del software, i diagrammi di sequenza aiutano gli sviluppatori e gli architetti a pianificare e comprendere come i diversi componenti e oggetti interagiranno per realizzare funzionalità specifiche.
- Forniscono un modello per il comportamento del sistema.
- Comunicazione e collaborazione:
- I diagrammi di sequenza fungono da strumento di comunicazione tra le parti interessate, inclusi sviluppatori, progettisti, project manager e clienti.
- Aiutano a trasmettere interazioni complesse in un formato visivo di facile comprensione, favorendo la collaborazione e la comprensione condivisa.
- Chiarimento dei requisiti:
- Quando si perfezionano i requisiti di sistema, i diagrammi di sequenza possono essere utilizzati per chiarire e specificare le interazioni previste tra i componenti del sistema o tra il sistema e le entità esterne.
- Contribuiscono a garantire una comprensione comune del comportamento del sistema tra tutte le parti interessate.
- Debug e risoluzione dei problemi:
- Gli sviluppatori utilizzano i diagrammi di sequenza come strumento di debug per identificare e analizzare i problemi relativi all'ordine e alla tempistica dei messaggi durante le interazioni del sistema.
- Fornisce una rappresentazione visiva del flusso di controllo e aiuta a individuare e risolvere i problemi.
4. Sfide legate all'uso dei diagrammi di sequenza
- Complessità e dimensione:
- Man mano che i sistemi diventano più complessi, i diagrammi di sequenza possono diventare grandi e complessi. Gestire le dimensioni del diagramma pur rappresentando accuratamente le interazioni può essere difficile e i diagrammi eccessivamente complessi possono diventare difficili da comprendere.
- Livello di astrazione:
- Trovare il giusto equilibrio in termini di astrazione può essere difficile. I diagrammi di sequenza devono essere sufficientemente dettagliati per trasmettere le informazioni necessarie, ma troppi dettagli possono sopraffare i lettori. È importante concentrarsi sulle interazioni più critiche senza impantanarsi nelle minuzie.
- Natura dinamica:
- I diagrammi di sequenza rappresentano gli aspetti dinamici di un sistema e, di conseguenza, possono cambiare frequentemente durante il processo di sviluppo. Mantenere aggiornati i diagrammi di sequenza con l'evoluzione del sistema può essere una sfida, soprattutto in ambienti di sviluppo agili o in rapida evoluzione.
- Ambiguità nei messaggi:
- A volte può essere difficile definire l'esatta natura dei messaggi tra gli oggetti. L'ambiguità nel contenuto o nel significato del messaggio può portare a incomprensioni tra le parti interessate e influire sull'accuratezza del diagramma di sequenza.
- Concorrenza e parallelismo:
- Rappresentare processi concorrenti e paralleli può essere complesso. Sebbene i diagrammi di sequenza dispongano di meccanismi per indicare l'esecuzione parallela, visualizzare più interazioni che si verificano simultaneamente può essere impegnativo e potrebbe richiedere elementi diagrammatici aggiuntivi.
- Vincoli in tempo reale:
- Rappresentare vincoli in tempo reale e requisiti temporali precisi può essere impegnativo. Sebbene i diagrammi di sequenza forniscano una rappresentazione sequenziale, catturare e comunicare accuratamente aspetti in tempo reale potrebbe richiedere documentazione aggiuntiva o diagrammi complementari.