UML-lezione Zulliridotta
Transcript
UML-lezione Zulliridotta
Introduzione Nel mondo odierno …..sviluppo di applicazioni Object Oriented. Esigenza di avere un linguaggio universale per modellare gli oggetti linguaggio UML, Unified Modeling Language. L'UML è un metodo per descrivere l'architettura di un sistema in dettaglio. Agnese Zulli Introduzione La forza dell'Unified Modeling Language consiste nel fatto che chiunque sia coinvolto nel sistema di sviluppo possa capire ed esaminare in modo efficiente il sistema e prendere parte alla sua costruzione in modo attivo. esempio: acquistare un appartamento 4 camere da letto, 3 bagni e di circa 180 metri quadri. In realtà vorremmo dire tutti i dettagli possibili (finestre, porte, ecc.) servendoci, a tale scopo, della mappa della casa. Idem per la "macchina" dello sviluppo di sistemi software. Invece di leggere la piantina della casa, in questo caso ci si servirà dei diagrammi UML che non fanno altro che documentare in modo esauriente e a tutti i livelli le caratteristiche tecniche che dovranno essere implementate. Agnese Zulli I vantaggi del linguaggio UML Elenchiamo, qui di seguito, alcuni dei benefici derivanti dall'utilizzo del linguaggio UML: Un sistema software viene disegnato e documentato ancor prima che ne venga scritto il relativo codice. la scrittura del codice stessa è resa più agevole ed efficiente. I costi di sviluppo, dunque, si abbassano notevolmente . è più facile prevedere e anticipare eventuali "buchi" nel sistema. Avere una chiara idea, a chiunque sia coinvolto nello sviluppo, di tutto l'insieme che costituisce il sistema. Più facile effettuare eventuali modifiche future al codice. Agnese Zulli Componenti UML Svariati elementi grafici per la creazione dei diagrammi. L'UML utilizza delle regole per combinare i componenti nella creazione dei diagrammi. L'obiettivo dei diagrammi è quello di costruire molteplici viste di un sistema tutte correlate tra di loro. Il linguaggio UML consiste di nove diagrammi di base, ma è possibile costruire e aggiungere diagrammi differenti. Agnese Zulli Class Diagram Definizione: Una classe è una categoria o un gruppo di oggetti (con questo termine includiamo, per comodità anche gli esseri viventi) che hanno attributi simili e comportamenti analoghi. Esempio: computers, automobili, piante, animali, ecc. I Class Diagrams forniscono le rappresentazioni utilizzate dagli sviluppatori. Agnese Zulli Object Diagram Un oggetto è una istanza di una classe - ovvero un qualcosa di specifico che ha dei valori determinati per i suoi attributi e dei comportamenti specifici. Agnese Zulli Use Case Diagram Uno Use Case (caso d'uso) è una descrizione di un comportamento particolare di un sistema dal punto di vista dell'utente. Requisiti del sistema dal punto di vista utente. Simbolo particolare per l'actor (l'utente o un altro sistema che interagisce). Definizione: L'actor è l'entità che interagisce con uno use case facendo partire la sequenza di azioni descritte dallo use case stesso. Agnese Zulli State Diagram Gli State Diagrams rappresentano gli stati degli oggetti ad un determinato istante, durante il funzionamento del sistema, ed i loro cambiamenti nel tempo. Stato iniziale (Start State) e stato finale (End State). Per esempio, ogni persona può essere identificato dai seguenti stati: neonato, infante, bambino, adolescente, adulto, anziano. Agnese Zulli Sequence Diagram I class diagrams e gli object diagrams rappresentano informazione statica. Il sequence diagram mostra le dinamiche, basate sul tempo, delle varie interazioni tra gli oggetti. Agnese Zulli Activity Diagram Le attività che si riscontrano all'interno di use case o all'interno del comportamento di un oggetto accadono, tipicamente, in una sequenza ben definita. Tale sequenza viene rappresentata con gli activity diagrams. Agnese Zulli Collaboration Diagram Gli elementi di un sistema lavorano insieme per realizzare e soddisfare le necessità del sistema. Un linguaggio di modellazione deve avere un modo per rappresentare tale cooperazione. Agnese Zulli Component Diagram Ognuno nel team di lavoro si occupa di lavorare su un componente differente. Il component diagram descrive questa importante caratteristica. Agnese Zulli Deployment Diagram Il Deployment Diagram mostra l'architettura dal punto di vista fisico e logistico di un sistema. i computer e i vari dispositivi presenti, le connessioni che intercorrono tra di essi, software installato su ogni macchina. Agnese Zulli Domanda Ma è proprio necessario sviluppare tutti e nove i diagrammi che l'UML mette a disposizione? La risposta a questa domanda può variare in relazione alla complessità del Sistema che si intende costruire Agnese Zulli Class Diagram Gli oggetti possono essere suddivisi in categorie e, quindi, in classi connesse tra di loro tramite delle relazioni. Graficamente una classe in UML: Il nome della classe, per convenzione, è con l'iniziale maiuscola o, se composta, con tutte le iniziali di ogni parola in maiuscolo. Un attributo rappresenta una proprietà di una classe e descrive un insieme di valori che la proprietà può avere quando vengono istanziati oggetti di quella determinata classe. Agnese Zulli Un Attributo in minuscolo. Se, consiste di più parole, allora la prima parola in minuscolo mentre le successive avranno la prima lettera in maiuscolo. Es: Informazioni-Cliente : informazioniCliente. Informazioni addizionali che possono essere unite agli attributi di una classe sono le "Constraints" e le Note. Le "Constraints" sono delle caselle di testo racchiuse tra parentesi che permettono di specificare una o più regole che la classe è tenuta a seguire obbligatoriamente. La lista degli attributi di una classe graficamente ….: Agnese Zulli Un'Operazione è un'azione che gli oggetti di una certa classe possono compiere. Analogamente al nome degli attributi, scritta in minuscolo, se composta, scritta con il primo carattere maiuscolo. La lista delle operazioni (metodi) viene rappresentata graficamente : Agnese Zulli I metodi possono avere delle informazioni addizionali. eventuali parametri il tipo restituito, se il metodo rappresenta una funzione. Le Note solitamente sono associate con gli attributi e/o con i metodi. Esse forniscono una informazione aggiuntiva ad una classe. Una nota può contenere sia elementi grafici che elementi di testo. Agnese Zulli Associazioni Quando più classi sono connesse l'una con l'altra da un punto di vista concettuale, tale connessione viene denominata associazione. Quando una classe si associa con un'altra, ognuna di esse gioca un ruolo all'interno dell'associazione. E' possibile mostrare questi ruoli sul diagramma, Più classi possono connettersi ad una singola classe. Agnese Zulli Esattamente come una classe, un'associazione può avere attributi ed operazioni. In questo caso si parla di una Classe Associazione Agnese Zulli Vari tipi di relazioni: Agnese Zulli La molteplicità è un tipo speciale di associazione in cui si mostra il numero di oggetti appartenenti ad una classe che interagisce con il numero di oggetti della classe associata. Asterisco (*) per rappresentare le opzioni "molti" e "più". Un’associazione può esplicitare anche una molteplicità (o cardinalità) che esprime il numero di oggetti che partecipano all'associazione stessa. I valori possibili sono: molti (*) uno (1) zero o più (0..*) uno o più (1..*) zero o uno (0..1) all'interno di un range (2..4) Agnese Zulli Una classe può trovarsi in associazione con se stessa. Ciò si verifica quando una classe contiene oggetti che possono giocare svariati ruoli. Tali associazioni sono chiamate: "Associazioni Riflessive". Agnese Zulli Ereditarietà e Generalizzazione Se si conosce qualcosa riguardo ad una categoria di cose, automaticamente si conosce qualcosa che è possibile trasferire ad altre categorie che, in qualche modo, discendono dalla categoria che conosciamo. Ad esempio, su un animale generico (mangia, dorme, é nato, si sposta da un luogo ad un altro, ecc.), potremo dire che tutte le sottocategorie di animali (rettili, anfibi, mammiferi, ecc.) erediteranno le stesse caratteristiche. Tale meccanismo, in Analisi Object Oriented, viene definito come: Ereditarietà Agnese Zulli Ereditarietà Un esempio di ereditarietà Una classe figlia (o sottoclasse) può ereditare gli attributi e le operazioni da un'altra classe (che viene definita classe padre o super classe) che sarà sempre più generica della classe figlia. Nella generalizzazione, una classe figlia può rappresentare un valido sostituto della classe padre. Cioè, in qualunque posto appaia la classe padre, sarebbe possibile far apparire la classe figlia. Il viceversa non è, invece, vero. Agnese Zulli Le classi astratte sono utilizzate soltanto come classi base per l'ereditarietà e non forniscono alcun oggetto implementabile. Agnese Zulli Aggregazioni Una classe può rappresentare il risultato di un insieme di altre classi che la compongono. Questo è un tipo speciale denominata aggregazione. Le classi che costituiscono i componenti e la classe finale sono in una relazione particolare del tipo: parte - intero (part-whole) Rombo raffigurato sulla linea stessa vicino all' "intero". Un esempio di aggregazione Esaminiamo le "parti" che costituiscono un Televisore. Agnese Zulli Il Class Diagram che ne deriva sarà il seguente: Agnese Zulli Una composizione è un tipo più forte di aggregazione. Ogni componente in una composizione può appartenere soltanto ad un "intero". Il simbolo è il rombo colorato di nero. esattamente ad un intero In tale associazione ogni componente appartiene esattamente ad un intero Agnese Zulli Class Diagram: un esempio pratico Scrivere un documento di testo. L'utente ha due possibilità iniziali: Cominciare a scrivere un nuovo documento Aprire un documento esistente . Ogni documento è composto di svariate pagine, e ogni pagina, da una testata, dal corpo del documento e da un piè di pagina. Il corpo del documento è formato da frasi. Le frasi da parole e segni di punteggiatura. Le parole da lettere, numeri e/o caratteri speciali. Inoltre, vi è la possibilità di aggiungere delle immagini e delle tabelle nel documento. Dopo aver terminato il documento, l'utente può scegliere di salvarlo o stamparlo. Agnese Zulli Abbiamo descritto il processo di creazione di un documento. Siamo in grado di estrarre la seguente lista di parole chiave: documento , editor di documenti, Microsoft Word, testo , tastiera, intestazione, piè pagina, corpo del documento, data, ora, numero di pagina, collocazione del file, pagina, frase, parola, segno di punteggiatura, lettera, numero, carattere speciale, immagine, tabella, riga, colonna, cella, utente. Come è possibile osservare, l'oggetto attorno a cui ruota un po' tutto il discorso è il Documento. Per tale ragione, sarà una buona idea identificare nel Documento la classe centrale del nostro Class Diagram. Agnese Zulli Si è detto, poi, che ogni documento è composto di pagine. La Pagina sarà, dunque, un buon candidato per essere una classe del nostro diagramma. Agnese Zulli E’ bene definire altre due classi: Intestazione e PiePagina, che hanno i seguenti attributi in comune: data, ora, numeroDiPagina e pathFile. La somiglianza tra Intestazione e PièPagina ci spinge a definire ancora una nuova classe in comune utilizziando il concetto di ereditarietà. La classe padre sarà BottomUp e conterrà gli attributiin comune e le operazioni : visualizza(), modifica() e nascondi(). Le classi Intestazione e PiePagina (figlie di BottomUp) dovranno, quindi, definire, rispettivamente, soltanto le operazioni: nuovaIntestazione() e nuovoPiePagina(). Agnese Zulli Agnese Zulli Il corpo di un documento può essere descritto come un array di caratteri. Faremo uso della classe Carattere con alcune sottoclassi. La classe Carattere avrà gli attributi: codiceASCII e tipo e definirà le operazioni: Normale(), Corsivo(), Grassetto() e Sottolineato(). Come discendenti della classe Carattere definiremo poi: Lettera, SegnoDiPunteggiatura, CarattereSpeciale e Numero. Inoltre, nel corpo del documento, come detto, possono comparire tabelle o immagini. Entrambe costituiranno altre due nuove classi nel nostro diagramma Agnese Zulli La Classe Tabella contiene gli attributi numeroDiRighe e numeroDiColonne e definisce le operazioni inserisciRiga( ) e inserisciColonna( ). Agnese Zulli Utilizzando le associazioni tra le classi che abbiamo descritto otterremo dunque il seguente Class Diagram che descrive il nostro esempio: Il modello descritto potrà essere specializzato sempre di più e, quindi, crescere Agnese Zulli Use Case Diagrams Gli Use Case sono collezioni di scenari, che riguardano l'utilizzo del sistema, in cui ogni scenario descrive una sequenza di eventi. La sequenza di eventi descritta da uno Use Case viene iniziata da una persona, o da un altro sistema. Le entità che iniziano la sequenza di eventi sono definiti Actors. Il risultato della sequenza deve portare a qualcosa di utile. Agnese Zulli Introduzione all’Use Case Un actor inizia la sequenza di un particolare use case, ed un actor (possibilmente lo stesso che ha iniziato, ma non necessariamente) riceve un ritorno dallo use case. L'actor che inizia la sequenza è sempre alla sinistra mentre l'actor che riceve gli effetti è alla destra. Una linea di associazione, connette un actor allo use case e rappresenta la comunicazione tra l'actor e lo use case, Agnese Zulli Per ogni use case, ogni scenario avrà la propria pagina così rappresentata : Un actor che dà inizio alla sequenza Le Pre condizioni per lo use case I passi dello scenario vero e proprio Le Post Condizioni quando lo scenario è completo L'actor che beneficia dello use case Gli Use Case Diagram visualizzano gli use case, dando del valore aggiunto alla raccolta di informazioni. Agnese Zulli Relazioni tra Use Cases E’ possibile riutilizzare gli use cases. Per far ciò si possono usare due modi: Inclusion: utilizzare i passi appartenenti ad una sequenza di un use case e inglobarli in un altro use case. Extension: creare un nuovo use-case aggiungendo dei passi ad un use case esistente. L'inclusion e la extension rappresentano una sorta di relazioni tra use case, ma ne esistono altri due tipi : la generalizzazione (Generalization) e il raggruppamento (Grouping). Agnese Zulli Relazioni tra Use Cases Inclusion L'inclusion permette il riutilizzo di uno use case all'interno di un altro use case. Graficamente si utilizza lo stesso simbolo utilizzato per la dipendenza tra classi, con la parola <<include>>. Extension L'extension permette di creare un nuovo use case aggiungendo dei passi in più ad un use case già esistente. Anche qui linea tratteggiata con una freccia finale, insieme con la parola <<extends>>. Il punto di extension appare sotto il nome dell'use case stesso Agnese Zulli Generalization Nella eredità tra use case, lo use case figlio eredita il comportamento ed il significato dal padre ed in più aggiunge le sue caratteristiche specifiche. Graficamente : linea continua con un triangolo aperto che punta al padre. Grouping In alcuni use case diagrams, ci potrebbero essere molti use case e, magari, si desidererebbe organizzare il diagramma in modo migliore.. Il modo più semplice è di organizzare a gruppi gli use case che in qualche modo siano correlati Agnese Zulli Use Case Diagram Esempio Macchina self-service per alimenti e bevande. Il principale use case della macchina stessa potrà essere definito come : "Acquisto di un prodotto". Proviamo ad esaminare ogni possibile scenario all'interno di questo use case. Lo use case "Acquista un prodotto“ L'actor in questo use case è il cliente. inserire delle monete all'interno della macchina, selezionare il tipo di prodotto (o più di uno, se la macchina lo consente) ricevere dalla macchina la lista dei prodotti scelti prima di procedere all'acquisto vero e proprio. Agnese Zulli Lo use case per tale tipo di scenario può essere il seguente: Ma vengono alla mente altri tipi di scenari. Ci si deve chiedere: Ci è stato chiesto di gestire questi tipi di scenari? Se la risposta è affermativa, supponiamo allora che la macchina non sia in grado di soddisfare la richiesta del cliente. Sarà quindi preferibile presentare un messaggio al cliente con una nuova scelta o la restituzione delle monete. Agnese Zulli Se, invece, si è verificato lo scenario in cui è stato fornito un errato ammontare di monete, si suppone che la macchina restituirà l'importo originale di soldi al cliente. Quanto descritto rappresenta lo scenario di un use case dal punto di vista di un utente (e quindi di un actor). Ma potrebbero esserci anche altri tipi di actors. Per esempio, il fornitore di prodotti e il proprietario della macchina. Altri due use case che chiameremo: "Ricarica la Macchina" e "Ritira le Monete". Agnese Zulli Lo use case "Ricarica la Macchina" Le azioni periodiche del fornitore sono: Disattiva la macchina Apre il contenitore dei prodotti Riempie ogni scompartimento fino alla massima capacità Chiude il contenitore dei prodotti e riattiva la macchina La precondizione è rappresentata dal trascorrere dell'intervallo di tempo tra una ricarica e l'altra e la post condizione è che il fornitore ottiene un nuovo insieme di potenziali clienti. Lo use case diagram, in questo caso, è rappresentato dalla seguente figura: Agnese Zulli Lo use case "Ritira Le Monete“ I passi che il proprietario della macchina deve fare sono uguali a quelli del fornitore, non con i prodotti ma con i soldi. La post condizione, in tal caso, è rappresentata dai soldi ritirati dal proprietario. Lo use case che descrive tale scenario è, dunque, rappresentato nella figura seguente: Agnese Zulli Alcuni passi necessari allo Use Case "Ritira le monete" (disattivare la macchina, aprire il contenitore, ecc.) sono uguali a quelli visti per "Ricarica la macchina". Possiamo avvalerci dell'utilizzo dell'inclusion combinando allora i due passi: Disattiva la macchina e apre il contenitore in uno use case che denominiamo: "Disattiva la macchina". Alla stessa maniera definiamo un nuovo Use case che chiamiamo "Riattiva la Macchina" che inglobi i passi di chiudere il contenitore e riattivare la macchina. Agnese Zulli Cerchiamo ora di raffinare ulteriormente i nostri use cases. Lo use case "Ricarica la macchina" potrebbe essere la base per un altro use case: "Ricarica la macchina in base alle vendite". Questo rappresenta un buon esempio di extension di uno use case. Dopo l'inclusion e l'extension così definiti, lo use case "Ricarica la macchina" può diventare: Agnese Zulli Sarà possibile definire un Actor più generico (Agente del Fornitore) che inglobi molte delle caratteristiche del Proprietario e del Fornitore. Tale generalizzazione è mostrata nella figura che segue: Un esempio di generalizzazione di un Actor Agnese Zulli La figura mostra il diagramma finale completo per la macchina self service Agnese Zulli State Diagrams Descriveremo gli elementi comportamentali che mostrano come varie parti di un diagramma UML possano cambiare nel tempo. E’ necessario avere un meccanismo che gestisca le modifiche all'interno del modello stesso ===> State Diagrams. Gli State Diagrams visualizzano gli stati che un oggetto può attraversare e i passaggi transitori che intercorrono tra questi stati, oltre a mostrarne il punto di partenza e il punto di arrivo. Agnese Zulli Definizione: Uno State Diagram mostra gli stati di un singolo oggetto. Un cerchio nero pieno rappresenta il punto di partenza di una sequenza di stati mentre il punto di arrivo viene rappresentato da due cerchi concentrici (tale figura viene anche definita "occhio di bue"). L'area in alto contiene il nome dello stato, l'area centrale contiene le variabili di stato (timers, contatori, date, ecc.) e l'area in basso rappresenta le attività (cioè quello che accade quando il sistema entra in un determinato stato e cosa, invece, succede quando il sistema abbandona quello stato. Agnese Zulli Un esempio State Diagrams Modello che descrive il funzionamento di un tostapane. Quali sono i passi perchè un tostapane riesca a preparare un toast? accendere il tostapane mettere le fette di pan carrè all'interno di esso attendere alcuni minuti perchè sia cotto il toast. Agnese Zulli Ma quello rappresentato non è il diagramma finale. Per prevenire che il toast si bruci, la resistenza del tostapane deve produrre calore che non superi determinati valori di temperatura. Naturalmente, perché il toast si cuocia a dovere è necessario anche che la temperatura non vada al di sotto di un certo valore minimo. Per tale ragione un termometro misura la temperatura prodotta dalla resistenza e quando il limite massimo viene raggiunto la resistenza passa in uno stato di attesa e non emette altro calore. Tale stato perdura finché la temperatura decresce fino ad arrivare al valore minimo. A questo punto ritorna lo stato di "In Lavorazione". Con questi ulteriori dettagli, il nostro State Diagram diverrà: Agnese Zulli Sequence Diagrams E’ necessario, oltre alla definizione degli stati, instaurare una comunicazione tra gli oggetti in relazione allo scorrere del tempo ===> Sequence Diagram Le interazioni tra gli oggetti devono avvenire seguendo un ordine ben preciso. Vediamo meglio in dettaglio di analizzare i componenti di un sequence diagram. Agnese Zulli I componenti dei Sequence Diagrams Oggetti Disposti in sequenza da sinistra verso destra. Da ogni rettangolo parte una linea tratteggiata verso il basso (lifeline). Lungo la lifeline si trova un piccolo rettangolo (activation). L'activation rappresenta l'esecuzione di un'operazione di cui l'oggetto si fa carico. La lunghezza del rettangolo, invece, rappresenta la durata dell'activation. Agnese Zulli Messaggi Un messaggio che viaggia da un oggetto ad un altro, viene disegnato tra le lifeline degli oggetti di riferimento. Un messaggio a se stesso viene definito Ricorsione. Rappresentazioni grafiche dei messaggi. Simple: Rappresenta il trasferimento del controllo da un oggetto ad un altro Synchronous: Se un oggetto invia un messaggio sincrono, allora si attende che gli venga restituita una risposta al messaggio stesso prima di poter continuare con altre operazioni. Asynchronous: Diversamente dai messaggi sincroni, se un oggetto invia un messaggio asincrono, non attende che gli venga inviata alcuna risposta prima di continuare con altre operazioni Agnese Zulli Il Tempo Il sequence diagram rappresenta il trascorrere del tempo se visto in direzione verticale. Agnese Zulli Un esempio visto, macchina Self-Service Definiamo i tre oggetti della Macchina Self-Service con cui descrivere il nostro diagramma: La Parte Frontale. - L'interfaccia che la macchina presenta all'utente La Cassetta delle monete - La parte in cui vengono accumulate le monete e che gestisce i vari controlli della macchina Il Contenitore dei Prodotti - La parte che contiene gli alimenti che vengono acquistati dal cliente Il Sequence Diagram che modelleremo farà uso della seguente sequela di azioni: Il cliente inserisce le monete nella macchina Il cliente esegue la selezione del prodotto desiderato Le monete arrivano nella Cassetta delle Monete Il dispositivo di controllo della Cassetta delle monete verifica se il prodotto è presente La Cassetta delle Monete aggiorna la sua riserva di monete Il dispositivo di controllo della Cassetta delle Monete informa il Contenitore dei Prodotti che può espellere il prodotto desiderato dalla Parte Frontale della macchina Agnese Zulli Agnese Zulli