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