UML Alberto Colombo Fulvio Frati Prima di iniziare... Accedete a \\Titano\Public\IngegneriaSW Scaricate il file BOUML.zip Decomprimete il file direttamente sul Z Use Case Diagram (1) Un caso d’uso è uno specifico modo di utilizzare il sistema da parte di un attore per eseguire una certa funzionalità del sistema stesso “un caso d’uso è una sequenza di transazioni in un sistema il cui compito è di conseguire un risultato di valore misurabile per un singolo attore del sistema” (Jacobson ‘92) Use Case Diagram (2) Rappresenta una funzionalità del sistema dal punto di vista di chi la utilizza: nasce, in genere, con la richiesta che un attore fa al sistema si conclude con la produzione di tutte le risposte relative alla richiesta definisce le interazioni tra attori e sistema relative a questa funzionalità Use Case Diagram (3) Ogni caso d’uso può soddisfare più requisiti Un requisito può dare origine a più casi d’uso Ad ogni caso d’uso possono venire associati più requisiti Use Case Diagram (4) I casi d’uso servono a: chiarire i requisiti del committente in termini comprensibili trovare aspetti comuni (riuso) individuare gli attori del sistema individuare gli eventi a cui il sistema deve rispondere Attori Gli attori sono rappresentati tramite il ruolo che giocano nel caso d’uso e sono normalmente indicati tramite l’icona: <<Attore>> Cassiere Relazione tra attori • E’ possibile definire gerarchie di attori • Associare un attore ad uno o più attori specializzati Utente Banca Utente Sede Centrale Utente Filiale Relazioni tra casi d’uso: generalizzazione/specializzazione Associare un caso d’uso ad uno o più casi d’uso specializzati validare utente validare password validare badge Relazioni tra casi d’uso: include <<include>> : mostra il comportamento comune a uno o più casi d’uso identificarsi al bancomat <<include>> prelevare <<include>> visualizzare saldo Relazioni tra casi d’uso: extend <<extend>>: mostra il comportamento opzionale (alternativo o relativo al trattamento di condizioni anomale) aprire conto corrente <<extend>> trattare condizioni particolari Esercizio: Sportello Bancomat Il Sistema sarà eseguito su uno sportello bancomat automatico L'utente deve essere in grado di depositare assegni sul suo conto L'utente deve essere in grado di prelevare i soldi dal suo conto L'utente deve poter interrogare il Sistema sul saldo del suo conto Se lo richiede, l'utente deve poter ottenere la ricevuta per la transazione. I tipi di transazione sono ritiro o deposito. La ricevuta deve indicare la data della transazione, ilnumero del conto, il saldo precedente e successivo la transazione Dopo ogni transazione, il nuovo saldo deve essere visualizzato all'utente Esercizio: Soluzione Class diagram Rappresenta le classi che compongono il sistema, cioè le collezioni di oggetti, ciascuno con il proprio stato e COMPORTAMENTO (attributi ed operazioni) Specifica, mediante associazioni, le relazioni fra le classi Class diagram: le classi(1) Una classe è una tipologia di oggetti, con propri attributi e operazioni Rappresentazione di una classe in UML: Automobile Nome marca modello colore targa Attributi (proprietà) cambiaTarga cambiaColore Operazioni (metodi) Class diagram: le classi(2) Nome: inizia con una lettera maiuscola, non è sottolineato e non contiene underscore Attributi: proprietà i cui valori identificano un oggetto istanza della classe e ne costituiscono lo stato; iniziano con una lettera minuscola Operazioni/Metodi: insieme di funzionalità che esprimono il comportamento di un oggetto, ovvero ciò che ogni oggetto di questa classe può fare Class diagram: associazioni(1) Associazione: correlazione fra classi; nel diagramma è una linea continua fra due classi, con esplicita semantica nei due sensi Aggregazione Composizione Molteplicità: numero di oggetti che partecipano all’associazione. Esempi di molteplicità sono: 1 Esattamente una istanza 0..* Nessun limite al numero di istanze 1..* Almeno una istanza n..m Da n a m istanze Class diagram: associazioni(2) Clienti 1 emette clienteDal Ordini dataOrdine 0..* stato emesso da getOrdini calcolaTasse calcolaTotale setStato 1..* Articoli codice descrizione peso prezzo 1 1 nell’ordine riguarda atricolo 0..* DettagliOrdine quantità calcolaPeso calcolaPrezzo Class diagram: aggregazione Aggregazione: tipo particolare di associazione; esprime concetto “è parte di ” (part of ), che si ha quando un insieme è relazionato con le sue parti. Class diagram: composizione E’ un caso particolare di aggregazione in cui: la parte (componente) non può esistere da sola, cioè senza la classe composto una componente appartiene ad un solo composto Class diagram: aggregazione/composizione Università Docenti aggregazione composizione Dipartimenti Class diagram: ereditarietà Persone nome cognome indirizzo cambiaIndirizzo Clienti superclasse simbolo di ereditarietà PotenzialiClienti codiceCliente clienteDal numVisite contaOrdini sottoclassi Esercizio: Struttura Universitaria Le entità coinvolte sono: Persone Docenti Studenti Frequenze Esami Corsi Esercizio: soluzione Persone nome Docenti Frequenze Studenti periodo matricola 1 * 1 * * sostiene relativo a di 1..* insegna tenuto da Corsi nome durata 1 Esami 1 del corso voto data Sequence Diagram Evidenziano la sequenza temporale delle azioni Non si vedono le associazioni tra oggetti Le attività svolte dagli oggetti sono mostrate su linee verticali La sequenza dei messaggi scambiati tra gli oggetti è mostrata su linee orizzontali Possono corrispondere a uno scenario specifico o a un intero caso d’uso (aggiungendo salti e iterazioni) Si possono annotare con vincoli temporali Sequence Diagram(2) Oggetto: è rappresentato come un box in alto con un nome sottolineato e una linea tratteggiata verticale detta linea di vita dell’oggetto. Il tempo scorre dall’alto verso il basso Messaggio: è una freccia con un nome Chiamata interna (self-call): riferimento ricorsivo di un oggetto a se stesso, per chiamare una delle sue funzioni Sequence Diagram(3) Instance:Class Oggetto in questo intervallo di tempo l’oggetto è in vita e attivo Cancellazione Linea di vita tempo Box di attivazione Sequence diagram: componenti Condizione: è associata ad un messaggio: solo se è soddisfatta il messaggio viene generato Iterazione: indica che un messaggio viene inoltrato più volte ad oggetti diversi di uno stesso gruppo Ritorno: indica il valore restituito all’oggetto chiamante e non un nuovo messaggio; può essere omesso Distruzione: deallocazione di un oggetto come metodo interno o tramite messaggio da un altro oggetto [ha disponib] Sequence diagram: messaggi In generale un messaggio rappresenta il trasferimento del controllo da un oggetto ad un altro Se l’oggetto che invia il messaggio rimane in attesa che l’oggetto ricevente ritorni, si ha un messaggio sincrono Se invece l’oggetto che invia il messaggio prosegue la propria elaborazione in parallelo all’oggetto chiamato, siamo in presenza di un messaggio asincrono. Esempio Esercizio: ordine prodotto Supponiamo di dover illustrare il seguente caso: La finestra Inserisci Ordine manda un “messaggio di preparazione” ad un Ordine L’Ordine invia messaggi di preparazione a tutte le Linee d’Ordine contenute nell’Ordine Ciascuna Linea controlla la disponibilità del proprio Articolo: se è presente lo rimuove dal magazzino e crea un prodotto da consegnare se la disponibilità del prodotto è scesa al di sotto di una certa soglia l’oggetto Articolo genera una richiesta di un nuovo ordine Esercizio: soluzione una finestra “Inserisci Ordine” un Ordine una Linea d’Ordine un Articolo preparazione() Condizione preparazione() controlloDisp() [haDisponib] remove() Iterazione deveRiordina() Ritorno Chiamata interna Creazione [deveRiordinare] do Nuovo ordine Cancellazione [haDisponib] do un Prodotto da Consegnare Collaboration diagram(1) Evidenzia la collaborazione fra gli oggetti, ma lo svolgimento temporale complessivo risulta meno chiaro rispetto ai sequence diagrams. I componenti del diagramma sono sempre oggetti e messaggi ma questa volta non è modellato esplicitamente in maniera grafica lo scorrere del tempo. Gli oggetti sono disposti liberamente, e in modo da rendere chiare le interazioni più importanti Ogni oggetto ha il formato NomeOggetto: NomeClasse ma è possibile indicare solo l’uno o l’altro Collaboration diagram(2) A differenza del sequence diagram, i messaggi sono numerati, in modo da evidenziare esattamente la sequenza I messaggi sono accompagnati da frecce per capire quale oggetto invia il messaggio e quale lo riceve Collaboration diagram: esempio Esercizio: ordine prodotto Supponiamo di dover illustrare il seguente caso: La finestra Inserisci Ordine manda un “messaggio di preparazione” ad un Ordine L’Ordine invia messaggi di preparazione a tutte le Linee d’Ordine contenute nell’Ordine Ciascuna Linea controlla la disponibilità del proprio Articolo: se è presente lo rimuove dal magazzino e crea un prodotto da consegnare se la disponibilità del prodotto è scesa al di sotto di una certa soglia l’oggetto Articolo genera una richiesta di un nuovo ordine Esercizio: soluzione :Finestra di Inserimento Ordine Oggetto 1: preparazione() Messaggio :Ordine 2: [per tutte le linee d’ordine] preparazione() Linea X : Linea d’Ordine Articolo Xx : Articolo 3: controlloDisp() 4: [haDisponib] remove() 7: [ha Disponib] new :Prodotto da consegnare Numero di sequenza :Riordine Articolo Activity Diagram(1) Servono per la modellazione di workflow e per descrivere processi con una forte componente di computazione parallela Il componente principale è l’Attività: si può definire in maniera informale come il “fare qualcosa”, cioè un processo del mondo reale (es. compilare un ordine) o l’esecuzione di una procedura software (es. metodo di una classe) Il diagramma consiste in una sequenza di attività e supporta l’esecuzione di cicli,l’esecuzione parallela e quella condizionale Activity Diagram(2) Oltre alle Attività le altre componenti sono le Transizioni Le transizioni non hanno condizioni e sono innescate semplicemente dal termine dell’attività precedente Activity Diagram(3) Un Activity Diagram può essere associato: A una classe All’implementazione di un’operazione Ad uno Use Case Activity Diagram: Componenti(1) Action state action azione fatta nello stato Stato Iniziale Transizioni scatenate da completion events action1 action2 scatta quando action1 termina Stato Finale Activity Diagram: Branch & Merge Branch: diramazione con una transizione entrante e più di una uscente, con condizioni mutuamente esclusive Non è possibile che valgano entrambe (comportamento ambiguo) o nessuna comportamento bloccato) Se le condizioni sono più di due deve comunque esserne verificata ogni volta una e una soltanto Merge: giunzione con più transizioni entranti ed una sola uscente, termina il blocco aperto dal Branch Activity Diagram: Fork e Join Fork: divisione con una transizione entrante e più di una uscente che si eseguono in parallelo Join: unione con più transizioni entranti ed una sola uscente che può scattare solo dopo che sono terminate le attività degli stati corrispondenti alle transizioni entranti Fork e Join si devono corrispondere! Combinazione di Fork e Join Activity diagram: Esempio Slide Aggiuntive Swimlanes(1) I diagrammi delle attività documentano bene ciò che accade,ma non chi fa che cosa Un modo di risolvere il problema, indicando le responsabilità per le attività, è l’uso delle swimlanes Le swimlanes sono corsie verticali separate da linee continue, in cui ogni corsia è coperta dalla responsabilità di una particolare classe (o sottosistema) Swimlanes(2) Ogni attività deve essere contenuta in una singola swimlane Le transizioni invece possono attraversare le linee verticali di demarcazione Esercizio Sistema di autenticazione ad un servizio: Richiesta password Verifica password Esercizio: soluzione(1) Richiesta connessione Richiesta password Introduzione password [corretta] Accetta connessione [errata] [corretta] Richiesta ri-immetere password [errata] Connessione negata Esercizio: soluzione(2) CLIENT SERVER Richiesta connessione Richiesta password Introduzione password [errata] Richiesta password seconda volta [corretta] Accetta connessione [corretta] [errata] Connessione negata