UML: DIAGRAMMA DI SEQUENZA UC n. 4: Basi di dati andrea.reale@unibo.it
2 UML e diagrammi di interazione Abbiamo visto il diagramma delle classi in UML Utilizzato per rappresentare strutturalmente il dominio del problema da risolvere Mostra associazioni e dipendenze statiche tra classi di oggetti Non riesce a catturarne il comportamento e le interazioni Modello statico del sistema Diagrammi di interazione Il loro scopo è mostrare come istanze specifiche di Classi (individuate nel modello statico) collaborano ed interagiscono per raggiungere il loro scopo progettuale Realizzare le funzionalità del sistema Realizzare una sotto/mini funzionalità di una parte del sistema
3 Tipi di diagrammi di interazione in UML 2 Diagramma di sequenza Enfatizza la sequenza temporale di scambio di messaggi (invocazione di operazioni) tra oggetti utilizzata per raggiungere un obiettivo Diagramma di comunicazione Enfatizza i collegamenti di comunicazione tra oggetti piuttosto che la sequenza in sé Diagramma di sintesi dell interazione Unisce una rappresentazione delle interazioni tra oggetti ad una comportamentale (vedi diagrammi delle attività) Diagramma dei tempi Notazione ripresa dall ambito elettronico. Utile per mostrare specifiche e vincoli temporali esistenti nelle interazioni tra oggetti.
4 Diagramma di sequenza: esempio atreno stazionebologna : Stazione stazionerimini : Stazione getpartenza() partenza getarrivo() arrivo calcola() durata
5 Diagramma di sequenza: esempio atreno stazionebologna : Stazione stazionerimini : Stazione arrivo : Orario partenza : Orario getpartenza() partenza getarrivo() arrivo minutidamezzanotte() minutidamezzanotte() Message2 diff() durata
6 Diagrammi di sequenza: livello di astrazione Come per il diagramma delle classi (in realtà come per ogni diagramma UML) il livello di dettaglio da usare in un diagramma di sequenza dipende Dallo scopo comunicativo Dalla fase del processo di sviluppo in cui ci si trova Fase di analisi Interazione fra oggetti che rappresentano istanze di alto livello del dominio del problema Si sacrificano i dettagli a vantaggio di chiarezza comunicativa (e grafica) Fase di progettazione Si rappresentano le interazioni più dettagliate fra componenti/istanze di oggetti del sistema che si andrà ad implementare Si privilegia il dettaglio che in casi estremi può essere anche massimo (blueprint)
7 Diagramma di sequenza Un po di teoria nome : Classe Partecipante Rappresentato nel diagramma come un rettangolo Indica il più delle volte un oggetto di una classe (una istanza) modellata nei diagrammi statici. All interno del rettangolo vale la seguente sintassi: nome : Classe Solo il nome è obbligatorio Se quello che si rappresenta è un istanza della classe, allora il testo nel box è sottolineato
8 Diagramma di sequenza Un po di teoria nome : Classe Lifeline Rappresentata come linea tratteggiata sotto il box del partecipante Indica l esistenza del partecipante all interno del sistema.
9 Diagramma di sequenza Un po di teoria nome : Classe Attivazione Indica che l istanza corrispondente è attiva Normalmente corrisponde al fatto che si sta eseguendo un operazione sull istanza.
10 Diagramma di sequenza Un po di teoria sorgente target Messaggi o1 messaggio() o2 Partecipanti in un diagramma possono scambiarsi messaggi Tipicamente, corrispondono all invocazione di operazioni Esistono diversi tipi di messaggio che possono essere scambiati
11 Tipi di Messaggio: Messaggio Sincrono o1 messaggio() o2 Invocazione sincrona Stessa semantica dell invocazione di metodo in Java Un oggetto invia un messaggio (richiesta di operazione) al target e aspetta la sua risposta
12 Tipi di Messaggio: Risposta Messaggio di risposta Messaggio di rispsta ad una richiesta precedente Tipicamente, valore di ritorno dell esecuzione di una operazione
13 Tipi di Messaggio: Messaggio Asincrono o1 messaggio() o2 Invocazione asincrona Indicato con una freccia dalla punta «a metà» o, in altre notazione, da una freccia dalla punta vuota Indica che il chiamante può proseguire la propria esecuzione senza attendere l esecuzione dell operazione e la relativa risposta Meccanismo diverso dal tipo di chiamate a metodi in Java (sempre sincrono) Esistono tecniche per ottenere l effetto di invocazioni asincrone anche in Java Non lo vedremo in questo corso
14 Invocazione sincrona vs asincrona Invocazione sincrona o1 o2 o3 messaggio1() messaggio2()
15 Invocazione sincrona vs asincrona Invocazione sincrona o1 o2 o3 messaggio1() La sorgente del messaggio deve aspettare la risposta prima di poter fare altro messaggio2()
16 Invocazione sincrona vs asincrona Invocazione asincrona o1 o2 o3 messaggio1() messaggio2()
17 Invocazione sincrona vs asincrona Invocazione asincrona o1 messaggio1() o2 o3 La sorgente del messaggio non deve aspettare la risposta prima di poter fare altro messaggio2() Nell esempio manda un altro messaggio ad un altro oggetto ATTENZIONE: Non è detto che le risposte vengano ricevute in ordine
18 Parametri nei messaggi Nei messaggi che rappresentano invocazione di operazioni sull oggetto target si possono specificare parametri nella forma nome : tipo Parametri possono essere omessi Il tipo dei parametri è spesso omesso I parametri corrispondono ai cosidetti «parametri attuali» passati nell invocazione dell operazione, non ai «parametri formali»
19 Found messages Found Message (messaggio «trovato») Messaggi per i quali la sorgente non è specificata Spesso rappresentano il messaggio che innesca la sequenza di interazioni rappresentata nel diagramma Il loro scopo è di mostrare che il messaggio può essere inviato da oggetti/component/sottosistemi logicamente esterni al componente di cui si mostra l interazione Complementari ai found messages sono i lost messages
20 Lost messages Lost Message (messaggio «perduto») Messaggi per i quali il target non è specificato Spesso rappresentano il messaggio che si restituisce al partecipante che ha innescato l interazione Il loro scopo è di mostrare che il messaggio può essere ricevuto da oggetti/component/sottosistemi logicamente esterni al componente di cui si mostra l interazione
21 Messaggi di creazione Indicano che un oggetto istanzia un altro oggetto Si utilizza il nome del messaggio new La freccia non punta alla lifeline ma al box che rappresenta l istanza appena creata
22 Messaggi di distruzione Indicano che un oggetto elimina intenzionalmente un altro oggetto In C++ può corrispondere ad una chiamata al distruttore In Java non c è un operazione esplicita: garbage collector Si può utilizzare comunque per rappresentare un intenzione piuttosto che l azione esplicita
23 Strutture di controllo Nei linguaggi di programmazione con il termine struttura di controllo si indicano le istruzioni (e la loro modalità d uso) che alterano il flusso puramente sequenziale del programma Istruzioni condizionali (if-then-else,?: ) Iterazioni ( for, while, do-while ) Anche UML definisce dei simboli grafici equivalenti utilizzabili nei diagrammi di sequenza Basati sul concetto di Combined Fragment (letteralmente, «frammento combinato»)
Combined Fragment 24
25 Combined Fragments: Operatore Operatore
26 Combined Fragments: Tipo di Operatore Come vedremo subito, l operatore di un combined fragment stabilisce il significato delle interazioni rappresentate al suo interno Esistono diversi tipi di operatori. Alcuni esempi: alt: alternativa opt: interazione opzionale loop: iterazione break: interazione da interrompere
27 Combined Fragment: Operandi Operando1 Operando2
28 Combined Fragments: Operandi Operando1 Operando interno ad un combined fragment individua a sua volta un frammento di interazione, i.e., una sequenza specifica di scambio di messaggi Operando2 Notazione Diversi operandi all interno di un combined fragment sono separati da linee orizzontali tratteggiate
29 Combined Fragment: Guardie Guardia Guardia
30 Combined Fragments: Guardie Guardia Rappresentata nell ambito di un operando di un combined fragment E una condizione logica racchiusa tra parentesi quadre (es, [ saldo >= prezzo ]) Abilita l esecuzione dell operando a cui si riferisce nel caso in cui la condizione logica sia verificata Il significato specifico dipende dal tipo di operatore
Combined fragment: «alt» 31
32 Combined fragment: «alt» Accetta due o più operandi e rappresenta l esecuzione alternativa del framento di interazione di uno di questi Al più uno tra gli operandi viene eseguito: quello con la guardia verificata Le condizioni delle guardie devono essere mutuamente esclusive
33 Combined fragment: «alt» if ( saldo >= prezzo ) { boolean ok = unconto.preleva(); return ok; } else { return false; }
Combined fragment: «opt» 34
35 Combined fragment: «opt» Accetta un solo operando che viene eseguito se e solo se la sua guardia viene valutata vera E equivalente ad un alt con due operanti in cui il secondo operando è vuoto
36 Combined fragment: «opt» if ( saldo >= prezzo ) { boolean ok = unconto.preleva(); return ok; }
Combined fragment: «loop» 37
38 Combined fragment: «loop» Accetta un solo operando che viene eseguito fin quando la guardia viene valutata vera Informalmente, spesso possono essere utilizzate anche espressioni più semplici ma di più comodo uso (es. [ 5 volte ], [ i <- 0 to 5 ], )
39 Combined fragment: «loop» while ( saldo > 0 ) { unconto.preleva(); saldo = unconto.richiestasaldo(); }
Combined fragment: «break» 40
41 Combined fragment: «break» Accetta un solo operando che viene eseguito quando la guardia viene valutata vera Quando l operando del brake viene eseguito, tutte le interazioni successive al combine fragment vengono ignorate!
42 Combined fragment: «loop» if ( saldo <= 0 ){ equitalia.segnala( ); return; } if ( saldo <= 0 ){ equitalia.segnala( ) throw new Exception(); }
43 Un esempio Pagamento in un supermercato *da http://www.sparxsystems.com/enterprise_architect_user_guide/modeling_languages/fragment.html
*da http://www.sparxsystems.com/enterprise_architect_user_guide/modeling_languages/fragment.html 44
45 Esercizio Ordinazioni in un negozio Avete salvato il modello statico UML del problema del negozio studiato la scorsa lezione? Creiamo insieme il diagramma di sequenza che descrive lo scambio di messaggi necessario per portare a termine un ordine tramite quel modello.
46.. ed ora ++SnowTrain