Sei sulla pagina 1di 52

Unified Modeling Language

(UML)
Alessandro Margara
alessandro.margara@polimi.it
Modellazione
• Modello è una descrizione astratta del sistema
– In cui è inclusa anche una descrizione dell’ambiente in cui il sistema dovrà
operare

• Modellare il sistema aiuta gli analisti a capire le funzionalità del sistema


– Sono usati anche per comunicare con i committenti

• Diversi modelli presentano il sistema da diverse prospettive

• Caratteristiche, pregi e limiti


– Sono astrazioni
– Ignorano dettagli che possono distrarre dall'essenza del problema
– Occorre rendersi conto dell'approssimazione introdotta nel trarre conclusioni

2
UML
• Il software non dispone ancora di tecniche
efficaci per descriverne la struttura, le
funzionalità e le prestazioni

• UML cerca di rimediare a questa situazione


– Standard OMG (Object Management Group)
– Oggi siamo alle versione 2.X
– Astrazioni indipendenti dal linguaggio di
programmazione

3
Principali diagrammi
• Diagrammi di struttura
– Diagrammi delle classi, diagrammi degli oggetti, diagrammi dei
componenti, diagrammi delle strutture composte, diagrammi
dei package e diagrammi di deployment

• Diagrammi di comportamento
– Diagrammi dei casi d'uso, diagrammi delle attività e diagrammi
delle macchine a stati

• Diagrammi di interazione
– Diagrammi di sequenza, diagrammi di comunicazione,
diagrammi di temporizzazione e diagrammi di interazione
generale

4
CASI D'USO (USE CASES)
Scopo
• Sono diagrammi comportamentali che
descrivono i requisiti del sistema

• Descrivono quali funzionalità devono essere


offerte e chi le usa, senza affrontare la
descrizione di come le funzionalità sono
realizzate

6
Esempi

7
Esempi

8
CLASS DIAGRAM
Dettagli nella descrizione
• UML consente di esprimere graficamente livelli
crescenti di dettaglio nella descrizione delle entità

• Un grande livello di dettaglio può essere inadeguato o


controproducente nella specifica dei requisiti

• Diventa invece essenziale nella descrizione


dell'architettura della soluzione, dove le classi
corrispondono esattamente alle classi della soluzione
in Java

10
Diagramma delle classi
• Descrizione statica
• Una classe è composta da tre parti
– Nome
– Attributi (lo stato)
– Metodi (il comportamento)
• Attributo: visibilità nome: tipo [molteplicità] = default {stringa di proprietà}
• Metodo: visibilità nome (lista parametri): tipo di ritorno {stringa di proprietà}
• Visibilità: + public, - private, # protected, ~ friendly
• Parametro: direzione nome: tipo = default

Persona
Persona
tutte le persone - nome: String
- nome: String
devono essere nate - cognome: String
dopo l1/1/1960 - cognome: String
- dataNascita: Date
- dataNascita: Date
- numPersone: int
+ siSposa(p: Persona): boolean
+ siSposa(p: Persona): boolean
+ compieAnni(d: Date): boolean
+ compieAnni(d: Date): boolean
11
Traduzione

public class Persona {


private String nome;
private String cognome;
Persona private Date dataNascita;
private static int numPersone;
- nome: String
- cognome: String public boolean siSposa(Persona p) {
- dataNascita: Date …
- numPersone: int }
+ siSposa(p: Persona): boolean
public boolean compieAnni(Date d) {
+ compieAnni(d: Date): boolean

}
}

12
Associazioni
Persona 1..* 1 Casa
vive

• Un’associazione indica una relazione tra classi


– Ad esempio persona che lavora per azienda

• Un’associazione può avere


– Un nome (solitamente un verbo)
– I ruoli svolti dalle classi nell’associazione

• Gli estremi di un’associazione


– Sono “attributi impliciti”
– Hanno visibilità come gli attributi normali
– Hanno una molteplicità
• 1, 0..1, 1..*, 4, 6-12

13
Esempio

dirige

subalterni 0..*

Persona Azienda
superiore - nome: String
- nome: String
0..1 - cognome: String 0..* lavora 1 - fatturato: int
- anni: int - numDipendenti: int
dipendenti azienda
+ assume(p: Persona): int
...

14
Esempio
Persona 1..* 1 Casa
vive

- persone - casa

class Persona { class Casa {


… …
private Casa casa; private Persona[] persone;
… …
} }

15
Esempio

class Persona {
private String nome;
Persona private String cognome;
private Date dataNascita;
- nome: String
- cognome: String
private static int numPersone;
- dataNascita: Date + marito public Persona marito;
- numPersone: int 0..1 public Persona moglie;
+ siSposa(p: Persona): boolean
+ compieAnni(d: Date): boolean
public boolean siSposa(Persona p) {

+ moglie
}
0..1
matrimonio public boolean compieAnni(Date d) {

}
}

16
Esempio

Persona Prestito
- nome: String - ammontare: int
- cognome: String 1 0..* - rata: int
- codFiscale: String - dataInizio: Date
intestatario prestiti
- stipendio: int - dataFine: Date
+ chiedePrestito(somma: int): void
...
0..* clienti 0..* prestiti

1 banca

0..* Banca
banche

17
Esempio
class Persona { class Prestito {
private String nome; private int ammontare;
private String cognome; private int rata;
private String codFiscale; private Date dataInizio;
private int stipendio; private Date dataFine;
} private Persona intestatario;
private Banca banca;
class Banca { }
private Persona[] clienti;
}

18
Classi associazione

Studente Corso
1..* 1..*

DatiCorso
- voto: int
- frequenza: int
+ votoMassimo(): int

19
Aggregazioni
• Le aggregazioni sono una forma particolare di
associazione
• Una parte è in relazione con un oggetto (part-of)

1 Telaio

Automobile 1 Motore
1

4 Ruota

20
Composizioni
• Una relazione di composizione è un’aggregazione forte
– Le parti componenti non esistono senza il contenitore
• Creazione e distruzione avvengono nel contenitore
• Le parti componenti non sono parti di altri oggetti

Automobile 0..1 Ruota 0..1 Bicicletta

• In Java aggregazioni e composizioni si traducono allo


stesso modo
– In C++ esistono modi differenti

21
Associazioni riflessive
• Un’associazione è riflessiva se coinvolge oggetti
della stessa classe

• Indicano oggetti multipli della stessa classe che


sono in relazione fra loro

Corso

Precedenze
22
Ereditarietà (generalizzazione)
Veicolo Veicolo
Terrestre APedali

class Triciclo extends Bicicletta {



Triciclo Bicicletta
}

• Esplicita eventuali comportamenti comuni

• Possibilità di ereditare da più classi


– Vietato in Java

• Può portare a conflitti fra attributi o servizi con lo stesso nome ereditati da classi
diverse

23
Classi astratte
Le classi astratte non possono avere esemplari

Disegno Figura
1..* 1..*
Geometrica

Quadrato Rettangolo Triangolo

24
Interfacce
Le interfacce, come le classi astratte, non possono avere esemplari

25
Interfacce
Relazione di utilizzo Implementa

FiguraGeometrica <<interface>> Vector


List
- vertici: List
+ add(o: Object): boolean + add(o: Object): boolean
+ get(index: int): Object + get(index: int): Object

FiguraGeometrica Vector

- vertici: List
+ add(o: Object): boolean
List + get(index: int): Object

26
Interfacce ed ereditarietà

Implementa

27
Diagramma degli oggetti

28
Package
• Meccanismo di strutturazione, definisce uno spazio di nomi
• Decomposizione gerarchica e dipendenze tra package
– Vedremo un concetto di package simile in Java

29
Package

30
DIAGRAMMI DI INTERAZIONE
Diagrammi di interazione
• Descrivono il comportamento dinamico di un gruppo di
oggetti che “interagiscono” per risolvere un problema

• Sono utilizzati per rappresentare scenari in termini


– Entità (oggetti)
– Messaggi scambiati (metodi)

• UML propone
– Diagrammi di sequenza
– Diagrammi di comunicazione

32
Esempio
Un attore che
interagisce con Potrebbe diventare Potrebbe diventare
il sistema una classe una classe

Pippo Selettore Informatica

Scegli informatica

Potrebbe diventare una Disponibile?


invocazione di metodo
Aggiungi Pippo
Conferma registrazione

Le risposte restano
implicite
33
Raffinamento

:Selettore Informatica: Corso

Pippo
seleziona(informatica)

disponibile()

aggiungi(pippo)
conferma(informatica)

34
Qualcosa in più
Periodo di “attività”
dell’oggetto relativo

Lifeline
(linea tratteggiata)
rettangolo: attività

Risposta esplicita
L’oggetto cessa
di esistere

35
Tipi di messaggi

36
Esempio

37
Frames di interazione

Autonoleggio Cliente Sede Autovettura

prenota

loop [per ogni auto ordinata]

opt [se il cliente è registrato]


Operazioni preferenze
ripetute

Operazioni disponibilità

opzionali
Prenotazione

associa

38
Alternative

39
Diagrammi di comunicazione

40
Esempio

41
Macchine a stati finiti
• Rappresentano il comportamento dei singoli
oggetti di una classe in termini di
– Eventi a cui gli oggetti (la classe) sono sensibili
– Azioni prodotte
– Transizioni di stato
• Identificazione degli stati interni degli oggetti

• Possibilità di descrivere evoluzioni parallele

• Sintassi mutuata da StateChart (D. Harel)

42
Primo esempio
• Il diagramma degli stati di un'aula

43
Esempio

44
Eventi e condizioni
• Funzioni booleane sui valori degli oggetti

• Utili quando non basta l'evento, ma si vuole


aggiungere un predicato
Condizione
Evento

verde [incrocio.stato=libero]
Pronto InCorsa

45
Aggiungiamo elementi

Attesa Warning
scatto [non luce]
entry/visualizza Da eseguire
quando si entra
scatto [luce]
nello stato
spegni

Memorizzazione
spegni
do/memorizza

Da eseguire
fintanto che si
rimane nello stato
46
Stato completo

Nome
attributo1: tipo1 = val.iniziale
attributo2: tipo2 = val.iniziale
do / attività0
entry / attività1 event3 [condizione1] / attività5
exit / attività2
event1 / attività3
event2 / attività4
event4 [condizione2] / attività6

47
Decomposizione OR
• Un macro stato equivale ad una scomposizione OR degli stati
– Solo uno degli stati costituenti può essere attivo in un certo istante
• Ad essere precisi, uno XOR

• I sottostati ereditano le transizioni dei loro superstati

Warning Attesa
spegni
entry/visualizza scatto [non luce]

scatto [luce] spegni

Memorizzazione

Preparazione Salvataggio Notifica


do/memorizza

48
Decomposizione AND
• Duale rispetto al caso OR
– Uno stato attivo per ciascun macrostato
– Modella operazioni ed attività concorrenti

49
History
• History può essere associata a stati non foglia

• Quando l’esecuzione lascia uno stato S con history


– Si salva l’ultimo stato visitato in S nella history H

• Quando l’esecuzione ritorna in S


– Si riparte dall’ultimo stato salvato

S
A A1 B

A2 H

50
Il diagramma della carriera di studente

51
Diagrammi dei componenti
• Utili per “decomporre” il sistema in esame
Interfacce
ISelezione
IDisplay
offerte/richieste
Prodotti
ISelezione IDisplay
Prodotti

SceltaProdotto IContaSoldi

<<delegate>> <<delegate>>
Distributore 1
Caffè Controllo Prodotto
Pagamento
IGettoniera IContaSoldi
<<delegate>>
SelezioneBevanda 1
Soldi
<<delegate>>
ILatte
<<delegate>> 1
Latte
IGettoniera
ILatte ICaffè

ICaffè
Funzioni <<delegate>>
Caffè
1

offerte dal
componente DistributoreCaffè 52