LABORATORIO DI INFORMATICA
Ingegneria Informatica
a.a. 2002-2003 -2° Ciclo
Unified Modeling Language
1
Unified Modeling Language
Metodi e Modelli
La necessità di utilizzare metodi di progettazione software
deriva dal fatto che i progettisti devono considerare di:
• capire come fare il loro lavoro
• spiegare il loro lavoro ad altri
• capire quando l’altrui lavoro gli viene spiegato
In generale un metodo per lo sviluppo del software descrive
come modellare e costruire i sistemi software in modo
affidabile e riproducibile. Esso cioè permette la costruzione di
modelli a partire da elementi di modelli che costituiscono i
2
concetti fondamentali per rappresentare i sistemi.
Unified Modeling Language
I metodi di progettazione software hanno seguito due
strade:
• Metodi Funzionali
• Metodi Object Oriented
Negli ultimi anni il secondo approccio è stato quello più
seguito ed ha portato alla definizione di un linguaggio
universale per la costruzione di modelli Object Oriented
detto Unified Modeling Language (UML). Questo
linguaggio è stato sottoposto a standardizzazione da parte
dell’ente Object Management Group (OMG).
3
Unified Modeling Language
Il metodo object Oriented esegue la decomposizione di un
sistema in oggetti collaboranti.
Un modello costituisce una unità di base per lo sviluppo:
esso è altamente auto consistente ed è debolmente legato ad
altri modelli attraverso i link di navigazione.
Di norma un modello è relativo ad una specifica fase dello
sviluppo ed è costituito da elementi di modelli.
I modelli definiti in UML sono elencati di seguito.
4
Unified Modeling Language
• Il modello delle classi che cattura la struttura statica
• Il modello degli stati che esprime l’ambiente dinamico di
un oggetto
• Il modello dei casi d’uso che descrive i requisiti dell’utente
• Il modello delle interazioni che rappresenta gli scenari ed i
passaggi di messaggi
• Il modello dell’implementazione che mostra le unità di
lavoro
• Il modello di distribuzione che fornisce dettagli che
riguardano come processare l’allocazione.
5
Unified Modeling Language
Molte prospettive differenti possono essere costruite per un modello di
base, ciascuna delle quali mostra tutto o parte del modello e ciascuna ha
uno o più corrispondenti diagrammi. UML definisce nove tipi di
diagrammi:
• Diagrammi delle sequenze
• Diagrammi delle collaborazioni
• Diagrammi degli oggetti
• Diagrammi delle transizioni di stato
• Diagrammi delle attività
• Diagrammi delle classi
• Diagrammi dei casi d’uso
• Diagrammi dei componenti
• Diagrammi delle allocazioni
6
Unified Modeling Language
Meccanismi comuni
UML definisce un piccolo numero di meccanismi comuni che possono
essere utilizzati in tutti i diagrammi. Questi meccanismi sono:
• Gli Stereotipi
Ciascun elemento di modello può avere uno o più stereotipi quando
la semantica di base dell’elemento non è più sufficiente. Uno
stereotipo di un elemento si ottiene aggiungendo all’elemento la
definizione che ne permette l’estensione tra le parentesi << e >>,
come in: <<uses>>, <<extends>>, ..
• I Valori Etichettati (Tagged Values)
Un valore etichettato è una coppia (nome, valore) che descrive una
proprietà di un elemento di modello. Un valore etichettato modifica
la semantica dell’elemento.
7
Unified Modeling Language
• Note
Una nota è un commento applicato ad uno o più elementi di modello.
Una nota può essere trasformata in una costrizione usando uno
stereotipo.
• Costrizioni (Constraints)
Una costrizione è un qualsiasi tipo di relazione semantica tra
elementi di modello. UML non definisce una sintassi ad eccezione
del fatto che esse devono apparire tra parentesi graffe.
• Dipendenze
La relazione di dipendenza definisce una relazione di uso
unidirezionale tra due elementi di modello, riferiti, rispettivamente,
come la sorgente e l’obiettivo della relazione.
8
Unified Modeling Language
• Dicotomia Tipo/Istanza e Tipo/Classe
Molti elementi di modello presentano le suddette dicotomie. Nella
prima il tipo caratterizza l’essenza dell’elemento e l’istanza, con i
suoi valori, è una manifestazione di quel tipo. Nella seconda si ha
una suddivisione tra la specifica di un elemento che è descritta dal
tipo e l’implementazione della specifica che è fornita dalla classe.
• Tipi di dato
I tipi di dato sono tipi primitivi senza sottostrutture. In UML sono:
Boolean (true, false), Expression, Multiplicity (0..1, 1..10, 0..*, ..),
Name
(simple_name{‘.’composite_name},
package_name{‘::’
simple_name}), Integer, String, Time, Uninterpreted.
9
Unified Modeling Language
Packages
Il package fornisce un meccanismo generale per suddividere i modelli e
raggruppare gli elementi dei modelli. Un package si rappresenta come un
folder:
Ciascun package corrisponde ad un sottoinsieme di un modello e
contiene gli elementi del diagramma associato. Un package può
contenere altri package. Ad un dato livello un package può contenere sia
altri package che altri elementi del modello.
10
Unified Modeling Language
Un elemento contenuto in un package può anche apparire in un altro
package nella forma di elemento importato per mezzo di una relazione di
dipendenza tra package.
Una relazione di dipendenza tra due package significa che almeno un
elemento nel package client usa i servizi offerti da almeno un elemento
del package fornitore (supplier).
L’operatore :: permette di specificare un elemento che è definito in un
contesto diverso dal contesto corrente.
Ciascun elemento contenuto in un package ha un parametro che indica se
l’elemento può essere visto al di fuori del package (public) o no
(implementation).
11
Unified Modeling Language
Nota: Per ragioni di compilazione devono essere evitate le dipendenze
incrociate o circolari tra package. Alcuni package, utilizzati da tutti gli
altri package, sono detti globali e per essi non è necessario indicare
graficamente le relazioni di dipendenza.
12
Unified Modeling Language
Diagramma delle Classi
Le classi sono rappresentate da rettangoli a compartimenti. Il primo
compartimento contiene il nome della classe. Gli altri due compartimenti
contengono rispettivamente gli attributi della classe e le sue operazioni.
Ogni compartimento, ad eccezione di quello del nome della classe, può
essere soppresso.
equivale a:
Nel compartimento del nome della classe possono esserci stereotipi e
proprietà che alterano la semantica generale della classe. Le proprietà
possono essere valori associati all’elemento del modello come attributi,
associazioni e tagged value.
13
Unified Modeling Language
UML definisce i seguenti stereotipi di classe:
<<signal>>
un evento che attiva una transizione entro una
macchina a stati.
<<interface>>
una descrizione di operazioni visibili.
<<metaclass>>
la classe di una classe.
<<utility>>
una classe ridotta al concetto di modulo e che non
può essere istanziata.
14
Unified Modeling Language
I compartimenti dopo quello del nome della classe contengono attributi
e operazioni, descritti rispettivamente con le sintassi:
Attribute_Name : Attribute_Type = Initial_Value
Operation_Name(Argument_Name :Argument_Type =Default_Value, ..)
: Return_Type
E’ sempre possibile ridurre le suddette descrizioni ai soli elementi di
volta in volta necessari, ad esempio limitandosi ai soli nomi di Attributi e
Operazioni. Il livello di visibilità di Attributi e Operazioni può essere
rappresentato facendo precedere la loro dichiarazione con i caratteri +, #
e – , rispettivamente per i livelli: pubblico, protetto e privato e
sottolineandoli nel caso di visibilità globale.
15
Unified Modeling Language
UML rappresenta le interfacce usando piccoli cerchi connessi con una
linea all’elemento che fornisce il servizio descritto con l’interfaccia:
Le interfacce possono anche essere rappresentate usando le classi
stereotipate:
Un template di classe viene poi rappresentato come una classe in cui il
parametro formale appare in un rettangolo tratteggiato, come segue:
16
Unified Modeling Language
Associazioni
Le associazioni rappresentano relazioni strutturali tra classi di oggetti. Le
associazioni sono rappresentate da una linea che collega le classi
associate.
Un’associazione può essere denominata. L’esperienza raccomanda di
denominare le associazioni utilizzando una forma verbale. La direzione
in cui il nome dovrebbe essere letto può essere indicata usando il
simbolo > puntato verso la classe designata dal costrutto verbale.
>
Le due parti finali di un’associazione sono chiamate ruoli. Il ruolo
descrive come una classe vede un’altra per mezzo dell’associazione. Un
ruolo può essere denominato.
17
Unified Modeling Language
Molteplicità delle Associazioni
Ciascun ruolo di un’associazione ha un valore di molteplicità che indica
quanti oggetti della data classe possono essere linkati ad un oggetto
dell’altra classe. Questo valore può essere assegnato come segue:
1
uno e solo 1
0..1
zero o 1
M..N da M a N (interi naturali)
*
da 0 ad ogni intero positivo
0..*
da 0 ad ogni intero positivo
1..*
da 1 ad ogni intero positivo
18
Unified Modeling Language
Costrizioni sulle Associazioni
La costrizione {ordered} sul ruolo specifica una relazione ordinata degli
oggetti linkati:
La costrizione {subset} indica che un insieme di link è incluso in un
altro:
La costrizione {exclusive or} indica che per un dato oggetto solo una
singola associazione di un dato gruppo è valida:
Un’associazione (riflessiva) può anche linkare una classe a se stessa:
19
Unified Modeling Language
Classi di Associazioni
Un’Associazione può essere rappresentata da una classe, a sua volta
associabile ad altre classi, per aggiungere attributi ed operazioni
all’Associazione. La notazione usa una linea punteggiata per collegare
una classe ad un’Associazione:
Una associazione che contiene attributi, ma non è associata ad altre
classi, è detta Associazione di Attributo e non viene identificata con un
nome specifico:
>
20
Unified Modeling Language
Associazione N-aria
Una classe può essere linkata a più di un’altra classe. Questo si
rappresenta con una figura multilato con gli spigoli puntati verso i vari
componenti dell’associazione. Nel caso di una relazione tra tre classi e
con una classe di associazione si ha la seguente rappresentazione:
Elevando l’Associazione a livello di classe, con in più la costrizione
{ternary association} che specifica la contemporaneità dell’istanziazione
dei vari rami, il caso sopra riportato può essere rappresentato come
segue:
21
Unified Modeling Language
Qualificatori di Associazione
La qualificazione di un’Associazione consiste nella selezione di un
sottoinsieme degli oggetti dall’insieme degli oggetti che partecipano ad
un’associazione. Questa restrizione è fatta con un attributo, detto
Qualificatore, usato congiuntamente ad un oggetto della classe sorgente e
rappresentato in un rettangolo alla fine dell’Associazione:
La figura che segue mostra l’effetto del Qualificatore:
A
22
Unified Modeling Language
Aggregazioni
Un’Aggregazione è un’Associazione asimmetrica in cui una delle
estremità gioca un ruolo più importante dell’altra. Essa si rappresente
con un piccolo rombo in corrispondenza dell’aggregato:
I criteri per preferire un’Aggregazione ad una Associazione sono:
• Una classe è parte di un’altra classe
• I valori degli attributi di una classe si propagano all’altra
• Un’azione su una classe implica un’azione anche sull’altra
• Gli oggetti di una classe sono subordinati agli oggetti dell’altra
Un’Aggregazione può avere la molteplicità dal lato della classe
aggregata. Segue l’esempio di proprietà in comune:
Owner
23
Unified Modeling Language
Composizione
La Composizione è una Aggregazione in cui gli attributi di una classe
sono fisicamente contenuti nella classe aggregata. Essa è cioè
un’Aggregazione per valore ed è semanticamente equivalente ad un
attributo. Per questa ragione la molteplicità della classe aggregata può
essere solo 0 o 1. Si utilizza quando un attributo partecipa ad altre
relazioni nell’ambito del modello. Si rappresenta con un piccolo rombo
nero:
Segue un esempio per il cso di un automobile:
24
Unified Modeling Language
Generalizzazione
La relazione di Generalizzazione esprime il fatto che un elemento di una
classe è anche descritto da un’altra classe (ossia, dal tipo di un’altra
classe). La Generalizzazione esprime cioè una relazione di
classificazione tra un elemento generale ed uno più specifico. La
relazione di Generalizzazione è rappresentata con una freccia che punta
dalla classe più specializzata a quella più generale. Gli esempi che
seguono rappresentano la stessa cosa:
La Generalizzazione viene spesso implementata con la relazione di
ereditarietà tra classi, ma essa in UML ha un aspetto più astratto che può
corrispondere ad altre implementazioni.
25
Unified Modeling Language
Se una classe ha più di una superclasse si può avere una
Generalizzazione multipla, come nell’esempio che segue:
Una classe può essere specializzata secondo diversi simultanei criteri.
Per indicare i particolari criteri di specializzazione essi vengono riportati
come “discriminatore” sui rispettivi collegamenti di Generalizzazione:
26
Unified Modeling Language
Le relazioni di Generalizzazione possono essere caratterizzate da
“costrizioni” che sono rappresentate con espressioni tra parentesi graffe
direttamente allocate sulla Generalizzazione interessata o collegate a
tutte le Generalizzazioni contemporaneamente interessate con una linea
tratteggiata.
La relazione di Generalizzazione è per default una decomposizione
esclusiva e quindi questo tipo di costrizione può non essere indicato.
Altri tipi possibili di costrizioni sono di seguito indicate.
27
{disjoint}
Unified Modeling Language
indica che una classe discendente dalla classe A può
essere solo discendente da una delle sottoclassi di A
{overlapping} indica che una classe discendente dalla classe A
appartiene al prodotto Cartesiano delle sottoclassi di A
{complete}
indica che la generalizzazione è terminata e non possono
essere aggiunte altre sottoclassi
{incomplete} specifica una generalizzazione estensibile
Nell’esempio che segue viene mostrato come la classe Moped
(Ciclomotore) è prodotto cartesiano delle sottoclassi Engine e Land della
classe Vehicle:
28
Unified Modeling Language
Classi Astratte
Una classe Astratta è una classe che non può essere direttamente
istanziata. Essa è una specifica generale di tipo allo scopo di gestire
oggetti che sono istanze di una o più di una delle sue sottoclassi. Una
classe viene specificata in UML come classe astratta utilizzando la
proprietà Booleana: Abstract.
Per convenzione i nomi delle classi Astratte sono scritti in corsivo.
29
Unified Modeling Language
Diagramma dei Casi d’Uso (Use Case)
I Casi d’Uso descrivono il comportamento di un sistema dal punto di
vista dell’utente, usando azioni e reazioni e permettendo, così, la
definizione delle relazioni tra il sistema e l’ambiente. Ciascun Caso
d’Uso è un’immagine della funzionalità del sistema che è attivata in
risposta ad uno stimolo di un attore esterno. Il modello Use Case
comprende gli attori, il sistema e i casi d’uso. Gli attori sono
rappresentati da sagome di persone che attivano i casi d’uso,
rappresentati come ellissi contenute nel sistema:
30
Unified Modeling Language
Gli Attori
Un attore rappresenta un ruolo interpretato da una persona o cosa che
interagisce con il sistema (utente). Il nome dell’attore descrive il ruolo
interpretato dall’utente. La stessa persona fisica può interpretare il ruolo
di più di un attore. La determinazione degli attori è molto importante e
permette la specifica dei limiti del sistema in modo incrementale. Le
principali categorie di attori sono:
• Attori principali
persone che usano le funzioni principali del
sistema
• Attori secondari
persone che eseguono compiti di amministrazione
o manutenzione
• Hardware esterno
gli apparati che devono essere usati perché fanno
parte del dominio dell’applicazione
• Altri sistemi
gli altri sistemi con cui il sistema deve
interagire.
31
Unified Modeling Language
I Casi d’Uso
I casi d’uso sono determinati osservando e specificando, attore per attore,
le sequenze di interazione, dette “scenari”, dal punto di vista dell’utente.
Essi sono descritti in termini di informazioni scambiate e di modi di
usare il sistema. I casi d’uso devono essere pensati come classi le cui
istanze sono gli scenari: ogni volta che un attore interagisce con il
sistema il caso d’uso istanzia una scenario.
Nota: i casi d’uso non sono solo necessari per la definizione dei requisiti
di un sistema, ma sono presenti con continuità lungo tutto il ciclo di vita
di un prodotto software. Da questo punto di vista i casi d’uso servono ad
esempio per navigare attraverso le classi e gli oggetti che collaborano a
soddisfare un requisito fino ai test che verficano che il sistema esegua i
suoi compiti correttamente.
32
Link
Unified Modeling Language
UML definisce tre tipi di link per attori e Use Case:
La relazione “Comunica”: è la sola relazione tra Attore e Casi d’Uso. E’
rappresentata con una linea continua tra Attore e Caso d’Uso:
La relazione “Usa”: descrive che una istanza del Caso d’Uso sorgente
comprende anche il comportamento descritto con il Caso d’Uso di
destinazione:
La relazione “Estende”: descrive che il Caso d’Uso sorgente estende il
comportamento del Caso d’Uso destinazione:
33
Unified Modeling Language
Esempio
Quello che segue è un esempio di diagramma di Casi d’Uso in cui sono
rappresentte tutte le relazioni possibili per gli Attori e i Casi d’Uso.
34
Unified Modeling Language
Diagramma degli Oggetti
Il diagramma degli Oggetti mostra un contesto, ad esempio prima o dopo
un’interazione, illustrando Oggetti e link tra Oggetti. La notazione
utilizzata è derivata dal diagramma delle classi in cui gli elementi che
sono istanze sono sottolineati. Un oggetto è rappresentato perciò da un
rettangolo che può contenere il nome dell’oggetto, il nome dell’oggetto e
della classe (separati da “:”), o, infine, solo il nome della classe
(preceduto da “:”):
Il nome della classe può contenere il path completo costituito dai nomi
dei vari packages contenitori separati da”:”:
35
Unified Modeling Language
Lo stereotipo della classe può riapparire nel compartimento dell’oggetto
in forma testuale tra le parentesi << e >> sopra il nome dell’oggetto:
Infine i rettangoli che simbolizzano gli oggetti posso avere un secondo
compartimento che contiene i valori degli attributi:
36
Unified Modeling Language
Link tra Oggetti
Gli Oggetti sono connessi attraverso Link che sono istanze delle
Associazioni tra le classi degli oggetti presi in considerazione. Il
diagramma degli Oggetti:
È un’istanza del
diagramma delle
classi:
I Link possono essere non solo binari, ma collegare più di due oggetti (ad
esempio Link ternari). La molteplicità può anche essere espressa
sovrapponendo più rappresentazioni leggermente sfalsate dello stesso
oggetto:
37
Unified Modeling Language
Oggetti composti
Oggetti composti da sotto-oggetti possono essere rappresentati usando un
oggetto composto allo scopo di ridurre la complessità del diagramma. Gli
oggetti composti sono rappresentati con gli oggetti componenti che
sostituiscono gli attributi:
:
Gli oggetti composti sono in genere istanze di classi composte, ossia
costruite da altre classi usanti la forma più forte dell’aggregazione:
È un’istanza del
diagramma delle
classi:
38
Unified Modeling Language
Il Diagramma degli Oggetti e il relativo diagramma delle Classi
Tutte le scritte che appaiono in un diagramma delle classi (nomi delle
associazioni, dei ruoli, delle composizioni, ..) possono essere mantenute
nei corrispondenti diagrammi degli Oggetti, ad eccezione della
molteplicità che è rappresentata direttamente dai link. Anche il valore dei
qualificatori delle associazioni può essere mantenuto, come mostra
l’esempio che segue:
39
Unified Modeling Language
Diagramma delle Collaborazioni
Questo diagramma è un’estensione del diagramma degli oggetti poiché
esprime, oltre al contesto di un gruppo di oggetti (per mezzo di oggetti e
link) anche le interazioni tra questi oggetti (rappresentando la diffusione
dei messaggi). I messaggi sono rappresentati con scritte lungo i link che
connettono gli oggetti e con frecce puntate verso chi riceve il messaggio.
I messaggi possono essere numerati per indicare l’ordine di sequenza:
40
Unified Modeling Language
I diagrammi delle collaborazioni mostrano le interazioni tra oggetti e
simultaneamente le relazioni strutturali che facilitano queste interazioni.
Oggetti e link che durante una interazione sono creati o cancellati
possono essere rispettivamente soggetti alle “costrizioni” {new} o
{deleted}. Oggetti che sono invece creati e cancellati nell’ambito della
stessa interazione sono soggetti alla costrizione {transient}:
Quando un gruppo di oggetti è il destinatario di uno stesso messaggio si
può usare una notazione simile a quella di molteplicità. Vedi di seguito
un esempio a partire dal relativo diagramma di classe:
41
Unified Modeling Language
La notazione del diagramma delle collaborazioni ammette che vengano
presentati nel relativo ambito anche gli attori, allo scopo di rappresentare
l’avvio delle interazioni da parte di elementi esterni al sistema.
Gli oggetti che gestiscono un flusso di controllo sono detti Oggetti Attivi.
In un diagramma delle collaborazioni gli Oggetti Attivi sono
rappresentati con una cornice più marcata rispetto agli oggetti passivi.
42
Unified Modeling Language
Rappresentazione dei Messaggi
Finora le etichette associate ai messaggi sono state presentate in modo
semplificato con casi particolari. In realtà la sintassi di un messaggio è
più complicata ed ha la seguente forma generale:
synchronization sequence ‘:’ result ‘:=’ name
• synchronization
La sintassi di synchronization è:
rank {‘,’ synchronization} ‘/’
Dove rank è dato da:
[integer | name of flow of execution] { ‘.’ rank}
arguments
Nell’esempio che segue il messaggio Message viene inviato quando
le trasmissioni A.1 e B.3 sono state soddisfatte.
43
• sequence
Unified Modeling Language
La sequence specifica il livello di nesting della diffusione del
nell’ambito dell’interazione. La sintassi di sequence è:
rank [recurrence]
Dove recurrence rappresenta iterazioni o condizioni rispettivamente
rappresentate con le sintassi:
‘*’ ‘[’ iteration clause ‘]’ block
‘[’ condition clause ‘]’ block
Sia iteration clause che condition clause si esprimono in formato
libero e danno rispettivamente le condizioni di iterazione e le
condizioni che convalidano l’invio dei messaggi nell’ambito di
block.
44
• result
Unified Modeling Language
result consiste in una lista di valori, espressi in formato libero,
restituiti dal messaggio.
• name
Il name del messaggio spesso coincide con una operazione definita
nella classe dell’oggetto destinazione del messaggio.
• arguments
Gli argomenti, scritti in pseudocode o nel linguaggio di codifica,
sono una lista di parametri del messaggio. Si può usare anche la
notazione sotto riportata. Nome e argomenti del messaggio
identificano l’azione da attivare nell’oggetto destinazione.
45
Unified Modeling Language
Diagramma delle sequenze
Il diagramma delle sequenze mostra le interazioni tra oggetti da un punto
di vista temporale. Un oggetto viene rappresentato con un rettangolo ed
una barra verticale chiamata “lifeline” (cavo di salvataggio) dell’oggetto.
Gli oggetti comunicano scambiandosi messaggi, rappresentati da frecce
orizzontali, tracciate dalla lifeline dell’oggetto che invia, alla lifeline
dell’oggetto che riceve. L’ordine di invio dei messaggi è indicata dalla
loro posizione verticale. L’asse verticale può essere etichettato per
esprimere più precisamente le costrizioni temporali.
46
Unified Modeling Language
Esistono due principali categorie di trasmissione di messagi:
• Trasmissioni sincrone, per le quali il trasmettitore è bloccato ed aspetta
fino a che l’oggetto chiamato ha finito di processare il messaggio. Questa
trasmissione è rappresentata con una freccia.
• Trasmissioni asincrone, per le quali il trasmettitore non si blocca e
continua l’esecuzione. Questa trasmissione è rappresentata con mezza
freccia.
Una freccia che rappresenta un messaggio può anche essere disegnata
diagonalmente per indicare un ritardo di trasmissione non trascurabile:
47
Unified Modeling Language
Un oggetto può anche inviare un messaggio a se stesso, generalmente per
indicare l’avvio di una attività al suo interno. In questo modo si possono
rappresentare le interazioni interne che coinvolgono oggetti contenuti
entro un oggetto composto:
La creazione di un oggetto si rappresenta facendo cadere le freccia del
messaggio che lo crea sul rettangolo che rappresenta l’oggetto. La
cancellazione è rappresentata dalla lettera X:
48
Unified Modeling Language
L’attivazione di un oggetto, ossia il tempo durante il quale esso esegue
un’azione si rappresenta con una striscia rettangolare posizionata lungo
la lifeline dell’oggetto:
Tenendo conto di ciò si possono presentare vari casi di trasmissione
sincrone (con ritorno implicito al trasmittente), asincrone (con ritorno da
esplicitare) e asincrone dopo suicidio, che sono di seguito mostrate:
49
Unified Modeling Language
Il caso particolare della trasmissione di un messaggio recursivo è
rappresentato con la replica della striscia rettangolare. L’oggetto appare
come se fosse attivo una quantità multipla di volte:
50
Unified Modeling Language
Struture di Controllo
I diagrammi di sequenza possono essere completati da note testuali
espresse in formato libero. Il momento di emissione di un messaggio,
detto transizione, può essere specificato in prossimità del punto di
partenza della freccia utilizzata per rappresentare il messaggio. Questo
nome può essere usato per stabilire delle condizioni temporali. Quando
per un messaggio c’è un tempo di trasmissione non trascurabile i tempi
di emissione e ricezione sono evidenziati con una coppia: nome, nome’.
51
Unified Modeling Language
L’utilizzo di pseudocode sul lato sinistro del diagramma consente la
rappresentazione di cicli o salti. Le rappresentazioni che seguono
indicano, in due modi, la trasmissione senza interruzione del messaggio
Message finchè la condizione X è vera:
L’esempio che segue è invece relativo ad un salto condizionato:
52
Unified Modeling Language
Anche nel caso di scelte condizionate lo pseudocode può essere sostituito
da condizioni scritte davanti al messaggio, come rappresentato di
seguito:
Salti condizionati sul lato di destinazione del messaggio sono invece
rappresentati raddoppiando la lifeline dell’oggetto destinazione.
53
Unified Modeling Language
Diagramma delle Transizioni di Stato
Il comportamento degli oggetti di una classe può essere formalmente
descritto in termini di stati ed eventi usando una “macchina a stati” (State
Machine) connessa alla classe in considerazione:
Ciascun oggetto segue il comportamento descritto nella macchina a stati
associata alla sua classe ed è, ad un dato momento, in uno degli stati
caratteristici dei suoi stati dinamici. Oggetti che non hanno un
comportamento reattivo possono ritenersi sempre nello stesso stato e
quindi tali che la loro classe non possieda una macchina a stati.
La macchina a stati può essere usata per descrivere il comportamento di
gruppi di oggetti associando la macchina a stati ad una struttura mista, o
anche ad un caso d’uso.
54
Unified Modeling Language
Stati e Transizioni
Ciascun oggetto è ad un dato istante in uno stato particolare. Gli Stati di
un oggetto sono rappresentati come rettangoli con spigoli arrotondati;
ciascuno stato ha un nome che lo identifica:
Uno stato è l’immagine della combinazione istantanea dei valori
posseduti dagli attributi dell’oggetto e la presenza od assenza di link tra
l’oggetto considerato e gli altri oggetti. Nell’esempio che segue viene
riportato un diagramma delle classi, un corrispondente possibile
diagramma degli oggetti e i corrispondenti possibili stati per gli oggetti
della classe Person:
55
Unified Modeling Language
UML definisce una macchina a stati deterministica e quindi con un
preciso stato iniziale. Gli stati finali possono essere invece più di uno in
corrispondenza di differenti condizioni terminali, oppure nessuno nel
caso di assenza di stop. Lo stato iniziale è rappresentato con un grosso
punto nero, mentre uno stato finale è rappresentato da un grosso punto
nero circondato da un cerchio:
Il passaggio da uno stato ad un altro è descritto da una coonnessione
unidirezionale tra gli stati, detta Transizione. Essa viene attivata quando
accade un determinato evento nel dominio del problema. Una transizione
è rappresentata con una freccia che inizia dallo stato di partenza e
termina sullo stato di arrivo:
56
Unified Modeling Language
Eventi
Un evento corrisponde al verificarsi di una determinata situazione nel
dominio del problema. Un evento è usato per attivare il passaggio da uno
stato ad un altro. Un oggetto che si trovi in un determinato stato attende
il verificarsi di un evento per passare ad un altro stato:
La sintassi di un evento è la seguente:
Name_Of_The_Event (Parameter_Name : Type, ….)
Seguendo le suddette regole la macchina a stati della classe Person
dell’esempio precedente può essere la seguente:
57
Unified Modeling Language
La comunicazione per eventi è sempre asincrona, atomica ed
unidirezionale. Nel caso di oggetti si rappresenta come segue:
La comunicazione per eventi sincrona può essere rappresentata solo con
due scambi asincroni in direzioni opposte:
La suddetta comunicazione corrisponde ad una macchina a stati come
segue:
58
Unified Modeling Language
Guardie
Una Guardia (Guard) è una condizione Booleana che può o non può
convalidare lo scatto di una transizione in seguito ad un evento. La
condizione corrispondente ad una Guardia viene scritta dopo l’evento tra
parentesi quadre:
Le Guardie, che devono corrispondere a condizioni mutuamente
esclusive, permettono di mantenere il determinismo di una macchina a
stati anche quando uno stesso evento può far scattare più di una
transizione:
59
Unified Modeling Language
Operazioni, Azioni ed Attività
Una Transizione può essere etichettata con il nome di un’azione, ossia di
un’operazione definita nella specifica della classe, da eseguire quando la
transizione viene fatta scattare da un evento. Il nome dell’azione, che può
accedere sia ai parametri dell’evento che agli attributi dell’oggetto, è
separata dal nome dell’evento con “/”:
Anche uno Stato può contenere azioni. Queste sono eseguite quando si
assume lo stato (azioni descritte con la parola chiave “entry/”), quando si
lascia lo stato (parola chiave “exit/”) o in seguito ad un evento che
mantiene lo stato (parola chiave “Nome_Evento/”):
60
Unified Modeling Language
Un’operazione che viene eseguita quando un oggetto è in un determinato
stato ed il cui tempo d’esecuzione non può essere considerato istantaneo
prende il nome di Attività e viene identificata con la parola chiave “do/”:
A differenza delle Azioni le Attività possono essere interrotte dallo scatto
della transizione. In particolare le attività “cicliche” terminano solo
quando scatta la transizione. Le attività “sequenziali” fanno invece
scattare la transizione quando raggiungono la loro fine: questo tipo di
transizione è detta Transizione Automatica.
Gli stati possono anche contenere variabili espresse come attributi. Le
variabili degli stati appartengono alla classe associata alla macchina a
stati, ma possono essere mostrate quando sono manipolate da azioni o
attività.
61
Unified Modeling Language
Generalizzazione degli Stati
La complessità di un diagramma a stati può essere ridotta con la
Generalizzazione degli stati. Uno stato più generale (detto superstato) è
quello che raccoglie stati più specifici (detti sottostati) che ereditano dal
loro superstato alcune caratteristiche come le variabili di stato e le
transizioni esterne, ossia quelle che li collegano agli stati esterni al
superstato:
A differenza delle transizioni esterne in uscita dal superstato solo un
sottostato può ereditare dal superstato la transizione in entrata:
62
Unified Modeling Language
L’ultima rappresentazione, in cui una transizione collega livelli
gerarchici diversi (un superstato esterno con un sottostato interno), è
poco accettabile ed è preferibile sostituirla con una in cui viene definito
per i superstati un (pseudo)stato iniziale:
Per evitare di entrare nel dettaglio dei sottostati può essere utilizzata la
rappresentazione con “stubs” che nasconde la presenza dei sottostati
esprimendone però l’esistenza:
63
Unified Modeling Language
Aggregazione di Stati
L’aggregazione di stato è la composizione di uno stato con alcuni stati
indipendenti. Essendo l’aggregazione di tipo “and”, ciò vuol dire che
l’oggetto deve simultaneamente essere in tutti gli stati che cosituiscono
l’aggregazione. Aggregando in una macchina a stati ogni stato con un
altro indipendente si ottiene che l’evoluzione degli stati dell’oggetto
corrisponde a quello di due macchine a stati che operano in parallelo ed
in cui gli stati aggregati sono il risultato del prodotto cartesiano degli
stati delle due macchine:
64
Unified Modeling Language
Generalizzazione ed Aggregazione
La Aggregazione di stato e la Generalizzazione servono a semplificare la
rappresentazione delle macchine a stati. La Generalizzazione semplifica
per fattorizzazione, mentre l’Aggregazione semplifica per segmentazione
dello spazio degli stati. In particolare la riduzione di complessità
dell’Aggregazione risulta evidente dal seguente esempio: se una
macchina a stati può essere ridotta a tre macchine parallele ciascuna con
100 stati, la macchina con stati non aggregati avrebbe uno spazio degli
stati costituito dal prodotto cartesiano degli stati delle tre macchine e
quindi con 1.000.000 di stati da considerare.
65
Unified Modeling Language
Storia
La notazione speciale “H”, inserita in un punto qualsiasi di un superstato,
permette di memorizzare l’ultimo sottostato visitato e di ritornare ad esso
quando scatta la transizione che riconduce al superstato che lo
comprende. Con la notazione “H*” è anche possibile memorizzare
l’ultimo sottostato attivo a prescidere dal suo nesting:
H*
H
L’esempio che segue è un ciclo di lavapiatti:
H
66
Unified Modeling Language
Comunicazioni tra Oggetti
Le trasmissioni di messaggi tra due oggetti sono rappresentate,
nell’ambito del formalismo dei diagrammi a stati, con l’invio di un
evento tra le macchine a stati delle classi degli oggetti considerati. La
sintassi della trasmissione di un evento verso una classe assume la forma:
^ Target . Message (Arguments)
Dove Target si riferisce alla classe degli oggetti che sono obiettivo
dell’evento e Message è il nome del messaggio che l’obiettivo deve
acquisire. La sintessi completa di una transizione è perciò:
Event (Arguments) [Condition] / Action ^ Target . Message (Arguments)
L’esempio che segue è per un telecomando di televisore:
67
Unified Modeling Language
Creazione e Distruzione di un Oggetto
La creazione di un oggetto è rappresentata con l’invio di un evento di
creazione alla classe degli oggetti. Il nuovo oggetto comincia ad esistere
con lo stato iniziale descritto nell’ambito della macchina a stati della
classe. L’esempio che segue si riferisce alla registrazione di un nuovo
aereo ed alla sua distruzione:
La cancellazione di un oggetto si effettua quando il flusso di controllo di
una macchina a stati raggiunge, al livello gerarchico (di superstato) più
alto, uno stato finale.
68
Unified Modeling Language
Transizioni Temporizzate
Abbiamo già visto che con la keyword “do/” è possibile definire per uno
stato un’attività di durata prestabilita, al termine della quale può scattare
una transizione. Lo stesso meccanismo può essere rappresentato con
l’uso dell’evento generico di nome “after” seguito da un parametro che
specifica la durata dell’attesa. Quello che segue è un esempio di una
macchina per il deposito di moneta descritto sia con l’uso di “do/” per
l’attività dello stato che con l’uso di “after” per il ritardo dell’evento:
69
Unified Modeling Language
Diagramma delle Attività
Un diagramma di Attività è una variante dei diagrammi a Stati,
organizzato secondo le azioni e più orientato alla presentazione
dell’implementazione di un’operazione. In un diagramma di Attività si
privilegia quindi la presentazione delle Attività a scapito di Stati ed
Eventi. Un’Attività è presentata come uno stereotipo di Stato per mezzo
di un rettangolo con i lati minori arrotondati. Quello che segue è la
rappresentazione di un’Attività con il diagramma a stati a cui essa
corrisponde:
Ciascuna attività rappresenta
dell’operazione che la racchiude.
un
particolare
stato
nell’ambito
70
Unified Modeling Language
Le attività sono linkate da transizioni automatiche rappresetate con
frecce. Quando un’attività termina la transizione scatta e parte l’attività
successiva, per cui non è necessario denominare la transizione:
Le transizioni tra attività possono essere sottoposte a “guardie” con
condizioni Booleane mutuamente esclusive riportate in prossimità della
transizione di cui convalidano lo scatto. La stessa cosa può essere
rappresentata con lo stereotipo “decision” disegnato con un rombo da cui
escono le transizioni:
71
Unified Modeling Language
I diagrammi di Attività rappresentano le sincronizzazioni tra flussi di
controllo mediante le barre di sincronizzazione. Le transizioni relative
all’output di una barra di sincronizzazione scattano tutte
simultaneamente. Viceversa una barra di sincronizzazazione può essere
attraversata solo quando tutte le transizioni in input alla barra sono
scattate:
72
Unified Modeling Language
Per evidenziare le responsabilità nell’ambito dell’operazione descritta, i
diagrammi di attività possono essere organizzati in settori verticali
paralleli, detti swimlane:
73
Unified Modeling Language
In un diagramma di Attività un oggetto può essere rappresentato con
linee verticali uscenti da esso e le attività possono apparire lungo la sua
“lifeline”. Se poi un oggetto è manipolato da più attività, esso può
apparire più volte nell’ambito del diagramma. I flussi verso gli oggetti
sono rappresentati con frecce punteggiate. Queste frecce mettono cioè in
relazione l’oggetto con l’attività che lo crea e con le attività che lo
coinvolgono.
74
Unified Modeling Language
I diagrammi di Attività possono anche contenere Stati ed Eventi,
rappresentati nello stesso modo in cui essi sono rappresentati nei
diagrammi di stato. Per le transizioni inoltre le trasmissioni e le ricezioni
di segnali possono essere rappresentate con pentagoni, rispettivamente
convessi e concavi, collegati con una freccia rispettivamente all’oggetto
che riceve e a quello che trasmette:
75
Unified Modeling Language
Diagrammi dei Componenti
I componenti rappresentano tutti i tipi di elementi che riguardano il
risultato di un raggruppamento di applicazioni software: essi possono
essere semplici file o librerie caricate dinamicamente. Un componente
viene rappresentato per mezzo della sua “specifica” (ad esempio
l’interfaccia, o il file .h, di una classe) e del suo “body”
(l’implementazione, o il file .cpp, nel caso di una classe) utilizzando il
simbolo che segue:
Le relazioni di dipendenza tra componenti, rappresentate con frecce
tratteggiate che vanno dal body del client alla specifiction del supplier,
indicano che il client fa riferimento a servizi (in genere dipendenze di
compilazione) offerti dal supplier:
76
Unified Modeling Language
Processi
I Processi sono oggetti che hanno un loro flusso di controllo (o thread). I
Processi possono essere contenuti nell’ambito dei Componenti. Gli
stereotipi <<process>> e <<thread>> sono predefiniti in UML:
Subsystem
Per accelerare la realizzazione di applicazioni, vari componenti possono
essere raggruppati nell’ambito di packages in base a criteri logici ed
essere stereotipati come <<subsystem>>.
77
Unified Modeling Language
I Subsystem, che possono contenere componenti o altri Subsystem,
organizzano la vista implementativa di un sistema: i Subsystem
dovrebbero essere visti come i grossi mattoni per la costruzione del
sistema.
La decomposizione in Subsystem non è una decomposizione funzionale.
Dal punto di vista dell’utente le funzioni del sistema si esprimono
nell’ambito della vista dei Casi d’Uso. I Casi d’Uso sono tradotti in
interazioni tra Oggetti le cui Classi sono esse stesse incapsulate in
Categorie. Gli Oggetti che implementano le interazioni sono distribuiti
nelle varie categorie: il codice corrispondente è memorizzato in moduli e
Subsystem.
78
Unified Modeling Language
Diagrammi delle Allocazioni
I diagrammi delle Allocazioni mostrano la struttura fisica dei vari
componenti hardware (nodi) che compongono un sistema e
contemporaneamente la distribuzione dei programmi eseguibili su questo
hardware. Ciasuna risorsa hardware è rappresentata da un cubo:
La natura di un apparato può essere specificata usando uno stereotipo. Se
necessario l’utente ha la possibilità di definire altri stereotipi:
79
Unified Modeling Language
I vari nodi che appaiono in un diagramma di allocazioni sono connessi
tra di loro con linee che rappresentano le infrastrutture, implicitamente
bidirezionali, di comunicazione. La natura di queste infrastrutture può
essere specificata con uno stereotipo. I nodi corrispondenti a processori
mantengono il nome dei processi che contengono. Il nome dei processi
facilita il collegamento tra il diagramma delle allocazioni e quello dei
componenti. Ciascun processo nominato nel diagramma delle allocazioni
esegue un programma main con lo stesso nome di quello descritto nel
diagramma dei componenti.
80
Unified Modeling Language
I diagrammi di allocazioni possono mostrare classi di nodi o istanze di
nodi: la differenza grafica è che le istanze sono sottolineate.
81
Scarica

Unified Modeling Language