Class diagrams

Transcript

Class diagrams
I class diagram
Forniscono una vista strutturale (statica) del sistema in
termini di
•classi
•attributi
•operazioni
•relazioni tra classi (associazioni, generalizzazioni, ...)
Un class diagram rappresenta uno schema concettuale
se una classe A è in relazione con una classe B, allora
ogni istanza di A sarà in relazione con un’istanza di B
1
Class - names
name
Una class può essere rappresentata
anche usano solo la sezione del nome
Libro
cod_libro
attributes
titolo
Libro
data edizione
ISDN
data acquisizione
richiesta( )
restituzione( )
create( )
Un nome può essere un:
• simple name , il solo nome della class
• path name , il nome della class preceduto dal
nome del package in cui la classe è posta
Magazzino::Cliente
operations
Libro
Graphics::Rettangolo
Cliente
simple names
path names
2
1
Class - Attributes
Attributes
Una classe può avere un qualsiasi numero di attributi, o nessuno
Per ciascun attributo si può specificare il tipo ed un eventuale
valore iniziale
tipicamente il nome di un attributo è composto da una parola o più
parole insieme, usare il maiuscolo per la prima lettera di ciascuna
parola lasciando minuscola la lettera iniziale del nome
Scaffale
altezza: Float
larghezza: Float
profondità: Float
numeroScansie: Int
èPieno: Boolean=false
3
Class - Operations
Operations
Una classe può avere un qualsiasi numero di operations, o nessuna
Per ciascun operation si può specificare il solo nome o la sua
signature, indicando il nome, il tipo, parametri e, in caso di funzione,
il tipo ritornato
stesse convenzioni dette per attributes per l’uso di minuscolo e
maiuscolo per i nomi delle operations
SensoreTemperatura
reset()
setAlarm(t:Temperatura)
leggiVal():Temperatura
4
2
Class - Attributes e Operations
Attributes e Operations di una class non devono
obbligatoriamente essere descritti tutti subito
Attributi ed operations possono essere mostrati
solo parzialmente, elidendo la class
Una sezione vuota non indica necessariamente che
non esistono attributes/operations
Agente Finanziario
…….
<<costruttore>>
new()
new(p: Polizza)
…….
<<query>>
èSolvibile(o:Ordine)
Per indicare che esistono più attributes/operations
di quelli mostrati usare i punti sospensivi “ …….”
èEmesso(o:Ordine)
Per meglio organizzare lunghe liste di
attributes/operations raggrupparli insieme in
categorie usando stereotypes
5
Visibility
E’ possibile specificare la visibiltà di attributes e operations
La visibilità di un elemento specifica se esso può essere usato da altri.
In UML è possibile specificare tre livelli di visibilità
- public: qualsiasi altro classifier con visibilità al dato classifier può
usare l’elemento; è utilizzato il simbolo + (è il default se
nessun simbolo è indicato)
- protected: qualsiasi discendente del classifier può usare l’elemento; è
usato il simbolo #
- private: solamente il classifier stesso può usare l’elemento ; è usato il
simbolo Libro
Visibility per attributes ed
operations di una class
+ cod_libro
+ titolo
# data edizione
ISDN
#richiesta( )
restituzione( )
+ create( )
6
3
Multiplicity
La multiplicity è usata per indicare il numero di istanze di una classe;
una multiplicity pari a zero indicherà una classe astratta, una
multiplicity pari ad uno una singleton class; per default è assunta una
multiplicity maggiore di uno.
La multiplicity di una class è indicata con un numero intero posto
nell’angolo in alto a destra del simbolo della class
La multiplicity si applica anche agli attributi, indicandola tra […]
NetworkController
1
consolePort [2..*]: Port
ControlRod
4
7
Class - Attributes e Operations
La sintassi completa per specificare un attribute in UML è:
[visibility] name [ [multiplicity] ] [: type] [= inital-value]
[{property-string}]
dove property-string può assumere uno dei seguenti 3 valori:
changeable nessuna limitazione per la modifica del valore dello
attribute
addOnly per attributi con molteplicità maggiore di 1 possono
essere aggiunti ulteriori valori, ma una volta creato un
valore non può essere né rimosso né modificato
frozen il valore non può essere modificato dopo la sua
inizializzazione
8
4
Class - Attributes e Operations
La sintassi completa per specificare un operation in UML è:
[visibility] name [(parameter-list)] [:return-type] [{propertystring}]
con la lista dei parametri avente questa sintassi
[direction] name: type [=default-value]
dove direction può assumere uno dei seguenti 3 valori:
in
parametro di input
out
parametro di output
inout
parametro di input/output
9
Class - Attributes e Operations
property-string può assumere uno dei seguenti valori
isQuery
l’esecuzione dell’operazione lascia lo stato del sistema immutato
sequential i chiamanti devono coordinare l’oggetto dall’esterno in modo che vi
sia un sol flusso per volta verso l’oggetto; in presenza di più flussi di
controllo, non è garantita la semantica e l’integrità dell’oggetto
guarded
la semantica e l’integrità dell’oggetto è garantita in presenza di flussi
di controllo multipli dalla sequenzializzazione di tutte le chiamate a
tutte le operation guarded dell’oggetto;
concurrent la semantica e l’integrità dell’oggetto è garantita in presenza di flussi
di controllo multipli trattando la operation come atomica. Chiamate
multiple da flussi di controllo concorrente possono presentarsi
contemporaneamente ad un oggetto o ad una sua operation
concurrent ed essere eseguite correttamente con corretta semantica
Le ultime tre proprità riguardano la concorrenza di una operation
Sono rilevanti solo in presenza di oggetti attivi, processi o threads
10
5
Class Abstract, root, leaf e polymorphic elements
Le classi astratte sono indicate ponendo il nome in corsivo
• Per specificare che una class non può avere :
- discendenti indicare la proprietà leaf sotto il suo name
- avi indicare la proprietà root sotto il suo name
• Per indicare una operation astratta scrivere il suo nome in corsivo
• Una operazione con la stessa signature in più classi di una gerarchia
di generalizzazione/specializzazione è polimorphic
ClassA
{root}
ClassC
ClassB
{leaf}
11
Relationships
Una relationship è una connessione tra things.
Dependency
relazione semantica tra due things in cui un cambiamento su una
(quella indipendente) può influenzare la semantica dell’altra
(quella dipendente), ma non necessariamente anche l’inverso.
12
6
Relationships
La freccia punta verso la thing indipendente
Una dependency indica un uso di una thing da parte di un’altra (ciò
spesso è mostrato dall’indicazione in una signature di una operation
di un argomento dell’altra class)
Una relationship può avere un nome
UML defisce 17 stereotypes (organizzati in 6 gruppi) per che
possono essre applicati a dependency
VideoRegistratore
name
playOn(c:Channel)
start()
stop()
reset()
Channel
13
Dipendenza tra classi
Esempi di dipendenza tra classi C1 e C2:
• Un metodo di C1 ha come parametro un oggetto di
classe C2
• Un metodo di C1 restituisce come risultato un oggetto
di classe C2
• Un metodo di C1 istanzia un oggetto di classe C2
• Un metodo di C1 invia un messaggio ad un oggetto di
classe C2 di cui possiede il riferimento
14
7
Dipendenza tra classi
<<instantiates>>
Un metodo di una classe crea istanze di un’altra classe
<<calls>>
Un metodo di una classe chiama un metodo di un’altra classe
<<friend>>
Indica la possibilità di accesso al contenuto di un’altra classe
indipendentemente dalla visibilità prevista dalla classe target
<<usage>>
Indica che un elemento richiede la presenza di un altro per il suo corretto
funzionamento (comprende <<calls>>, <<instantiates>>)
15
Relationships
Generalization
relazione di generalizzazione/specializzazione, in cui oggetti
dell’elemento specializzato (figlio) sono sostituibili all’oggetto
generalizzato (genitore). I figli condividono la struttura ed il
comportamento del genitore.
la freccia punta al genitore
Una class può avere zero, uno o più genitori; se non ha genitori è detta
root class, se ha un solo genitore è detta a singola ereditarietà, se ha
più genitori è detta ad ereditarietà multipla
16
8
Relationships
Generalization
UML definisce 4 constraints per la Generalization:
complete : tutte le sottoclassi sono state specificate, nessun altra
sottoclasse è permessa
incomplete : non tutte le sottoclassi sono state specificate, altre
sottoclassi sono permesse
disjoint : oggetti del genitore possono avere non più di un figlio come
tipo
overlapping : oggetti del genitore possono avere più di un figlio
come tipo
17
Forma
{root}
.............
.............
display()
Rettangolo
{leaf}
.............
.............
Ellisse
.............
.............
Poligono
.............
.............
display()
Circonferenza
{leaf}
18
9
Relationships
Association
relazione strutturale che descrive un insieme di link, cioè
connessioni tra oggetti. Un particolare tipo di associazione è
l’aggregazione tra un tutto e le sue parti.
Multiplicity
Ditta
1
datoreLavoro
1..*
Persona
impiegato
Role name
Una association può avere un name ed una name direction
name
name direction
Ditta
Lavora per
Persona
19
Cardinalità
• Indica il numero di istanze di una classe che
possono essere associate ad una singola istanza
dell’altra classe
• Può non essere specificata ad uno degli estremi
(“association-end”) o a entrambi
E in questo caso non significa cardinalità pari
a 1!
20
10
Cardinalità
21
Associazioni n-arie
Alcune associazioni con cardinalità maggiore di due non sono
riducibili a semplici associazioni binarie.
22
11
Ruoli nelle associazioni
• Una classe può partecipare ad un’associazione con
un ruolo specifico, che può essere indicato
23
Relationships
Aggregation
Un particolare tipo di association è la aggregation che indica una
relazione ‘tutto-parti’
Ditta
Tutto
1
aggregation
Parte
*
Dipartimento
24
12
Relationships
Compositon
Un particolare tipo di aggregation è la compositon che indica una
relazione una stretta relazione ‘tutto-parti, nel senso che ciascuna
parte ha la stessa durata di vita del tutto (cioè una parte una volta
creata vive per tutto e solo il tempo del Tutto cui appartiene). Ciò
significa anche che una parte può appartenere ad un solo tutto per
volta.
Finestra
Tutto
1
composition
Parte
*
Anta
25
Relationships
Association qualifier
Una association può avere un qualifier , cioè un attributo (o
insieme di attributi) il cui valore partiziona un insieme di oggetti
(detti targets) associati ad un altro oggetto (detto source). Il
qualifier è attaccato alla source class di una association e
determina come gli oggetti della class target sono partizionati e
identificati
Definisce la ‘regola’ con cui associare gli oggetti nella relazione
qualifier
Dipartimento
nomeDip
Professore
26
13
Relationships
Association interface specifier
Una association può avere un interface specifier , per specificare
quale parte dell’interfaccia di una classe è mostrata da questa, in una
association, nei confronti di un’altra classe della stessa association.
intefafce spcifier
*
worker : IEmployee
Persona
1
supervisor: IManager
Persona nel ruolo di supervisor presenta solo la ‘faccia’ IManager al
worker; Persona nel ruolo di worker presenta solo la ‘faccia’
IEmployee al supervisor.
E’ utilizzata una notazione esplicita del tipo di ruolo usando la
sintassi:
rolename : iname
27
Relationships
Association class
Una association può essere caratterizzata da una association class ,
ovvero un gruppo di cartteristiche appartenenti alla relazione e che
non sono proprie di nessuna classe coinvolta in questa.
Ditta
1
datoreLavoro
1..*
Persona
impiegato
Lavoro
descrizione
association class
dataAssunzione
salario
Possono essere viste come association con proprietà di class o
class con proprietà di association
28
14
Associazioni riflessive
• Una associazione o aggregazione si dice riflessiva ( o
ricorsiva) se coinvolge oggetti della stessa classe
– una associazione ricorsiva indica che più oggetti della
stessa classe interagiscono e collaborano in qualche modo
29
Relationships
Realization
Una association può essere una realization , ovvero una relationship
tra elementi in cui uno specifica un contratto che l’altro garantisce di
compiere.
E’ un incrocio tra dependency e generalization; usata principalmente
in due circostanze: contesto delle interface e delle collaboration.
la freccia punta al classifier che definisce il contratto
<<interface>>
IruleAgent
addRule()
changeRule()
explainAction()
RegolamentazioneConto
realization
30
15
Interfaccia (Definizione)
Specifica il comportamento di una classe senza darne
l’implementazione
31
Interfaccia (Uso)
32
16
Class diagrams
• Un class diagram rappresenta un insieme di class, interface,
collaboration e le loro relationship
• specifica, mediante le association, i vincoli che legano tra loro le
classi e le dipendenze tra queste
• modellano la vista di statica di un sistema, che supporta
principalmente i requisiti funzionali del sistema
• se includono active class descrivono la vista statica di un processo
di un sistema
33
Class diagrams
Un class diagram è tipicamente usato per modellare:
• il dominio del sistema
• il glossario di un sistema
sono prese decisioni relativamente alle astrazioni da
considerare
• lo schema concettuale di un database
Un class diagram possiede un nome significativo che ‘comunica’ il
suo scopo, può contenere note e costraints, package o subsystem.
34
17
Class diagrams
Libro
cod_libro
titolo
data edizione
ISDN
data acquisizione
pubblicato da
1
0..*
relationship
Editore
ragione sociale
nome breve
indirizzo sede
telefono
variazione dati editore( )
richiesta( )
restituzione( )
create( )
1..*
scritto da
0..*
0..*
Libro antico
valore
Autore
nome : type = initval
cognome : type = initval
anno nascita
anno morte
variazione anagrafica( )
valorizza( )
0..*
Utente
variazioneanagrafica( )
generalization
(genitore- figlio)
35
Ditta
1
*
1..*
1..*
Ufficio
Dipartimento
0..1
member
Location
nome: Nome
*
*
*
1..*
1
*
indirizzo: String
telefono: Number
manager
Persona
SedeCentrale
nome: Nome
matricola: Integer
posizioneLav: String
getContactInfo()
getSchedaPersonale()
getFoto()
ContactInfo
address: String
ISecureInfo
36
18
Class diagrams
Un class diagram ben strutturato
• è incentrato sul ‘comunicare’ un solo aspetto della vista dello static design
• contiene solamente gli elementi che sono essenziali a comprendere
quell’aspetto
• fornisce dettagli consistenti con il suo livello di astrazione, con solo quegli
adornments che sono essenziali alla comprensione
• non è così minimalista da disinformare il lettore circa la reale semantica
• non possiede troppi tipi di relationships
(se si hanno relationship complicate è meglio mettere tali elementi in
un ulteriore diagramma di dettaglio)
• ha un lay out che ne facilita la lettura ed evidenzia i vari componenti
• ha un nome significativo
• possiede, eventualmente, note e colori per evidenziare aspetti particolari
37
Linee Guida per costruire un class diagram
• Obiettivo:
– identificare e caratterizzare gli elementi del modello a
oggetti e come sono in relazione tra loro
• Non cercare di mettere tutto su un solo diagramma, specie
per sistemi di grosse dimensioni
• Eventualmente disegnare un diagramma per ogni vista del
sistema
• Ogni diagramma deve avere uno scopo:
– mostrare le classi e gli oggetti che partecipano in ogni
singola collaborazione
– mostrare una tassonomia di generalizzazione
– mostrare la suddivisione delle partizioni logiche
(packages)
• E’ possibile non mostrare attributi ed operazioni delle
classi per migliorare la leggibilità del diagramma
38
19
Linee Guida per costruire un class diagram
– Identificare le classi di oggetti
– Preparare un dizionario dei dati
– Identificare le associazioni (incluse specializzazioni ed
aggregazioni) tra classi
– Identificare gli attributi delle classi
– Identificare le operazioni
L’ordine non è rigido e sono possibili più iterazioni
39
Identificare le classi di oggetti
• Cosa cercare
– oggetti fisici, altri sistemi, dispositivi esterni, eventi da
ricordare, ruoli, locazioni, unità organizzative
• Dove cercare
– conoscenza generale del problema, descrizioni testuali,
figure
• Cosa considerare
– candidati aventi confini ben definiti e identità distinte
– candidati con proprietà da ricordare
– candidati che forniscono o richiedono servizi
• Scartare:
– candidati ridondanti, irrilevanti, o vaghi
– candidati che rappresentano singoli oggetti, o operazioni
su oggetti, o ruoli in associazioni
– candidati legati alla realizzazione
40
20
Esempio: Problema del Bancomat
Il sistema software da progettare per gestire una rete bancaria automatizzata prevede che
i cassieri e gli sportelli automatici (Bancomat) siano condivisi da un consorzio di banche.
Ogni banca fornisce il proprio computer per gestire i propri conti ed elaborare le
transazioni su questi conti.
I terminali dei cassieri sono posseduti dalle singole banche e comunicano direttamente
con il computer della propria banca. I cassieri inseriscono dati su conti e transazioni.
I Bancomat comunicano con un computer centrale che passa le transazioni alle banche
appropriate.
Un Bancomat accetta una scheda magnetica, interagisce con l’utente, comunica con il
sistema centrale per portare a termine la transazione, distribuisce il denaro, e stampa la
ricevuta.
Il sistema richiede appropriati provvedimenti per la registrazione e la sicurezza.
Il sistema deve gestire correttamente accessi concorrenti allo stesso conto.
Ogni banca fornirà il proprio software per il proprio computer; bisogna progettare il
software per i Bancomat e per la rete.
Il costo del sistema condiviso sarà distribuito proporzionalmente tra le banche secondo il
numero di clienti con carta Bancomat.
41
Esempio: Identificare le classi di oggetti
• Classi selezionate
– Conto
– Bancomat
– Banca
– Scheda
– Cassiere
– Terminale del cassiere
– Cliente
– Transazione
‹
Classi scartate
• Vaghe
» Sistema, Provvedimento di
sicurezza
» Provvedimento per la
registrazione
» Rete bancaria
• Singoli oggetti
» consorzio
• Attributi
» Dati del conto, Ricevuta,
Contante
» Dati della transazione
• Irrilevanti
» Costo
• Realizzazione
» Software
42
21
Preparare un dizionario dei dati
• Definire cosa la classe rappresenta nel contesto del
problema
• Specificare quali sono le responsabilità della classe nel
sistema
Esempio Bancomat
• Conto
– Rappresenta un singolo conto di un cliente in una banca.
Tutti gli accessi e le modifiche al conto della banca
devono avvenire attraverso questa classe
• Transazione Remota
– Una richiesta integrale di operazioni sul conto effettuata
dal cliente attraverso un Bancomat
43
Identificare le associazioni
• Cercare le dipendenze tra classi
– considerare le espressioni verbali nella descrizione del
problema
• La relazione di aggregazione/composizione è un tipo
speciale di associazione (“è parte di” o “si compone di”)
• Aggiungere i nomi alle associazioni o ai ruoli delle classi
associate
• Specificare la molteplicità
• Scartare le associazioni:
– non rilevanti per il problema specifico
– troppo legate alla realizzazione
– derivabili da altre associazioni
44
22
Esempio: Identificare le associazioni
45
Identificare l’ereditarietà
• Considerare solo classificazioni utili per il problema
specifico
– Specializzazione
• E’ possibile raffinare una classe in sottoclassi con
attributi e operazioni specifici?
– Generalizzazione
• E’ possibile identificare una superclasse che astrae
attributi e operazioni comuni?
• Posizionare nella superclasse gli attributi e le operazioni
comuni a tutte le sottoclassi
46
23
Esempio: Identificare l’ereditarietà
47
Identificare gli attributi degli oggetti e dei legami
• Gli attributi necessari dipendono dal problema specifico
• In fase di analisi
– Si può non essere immediatamente esaustivi
– Si possono omettere
• attributi derivati
• attributi che descrivono stati interni alla classe
48
24
Esempio: Identificare gli attributi degli oggetti e dei legami
49
Identificare le operazioni
• Operazioni base (costruttore, selettore, distruttore)
– non è necessario esplicitarle nel diagramma; indicarle solo
se utili nella comprensione del problema o se menzionate
esplicitamente nella descrizione
• Altre operazioni
– Consultare gli scenari che descrivono i casi d’uso
– Attribuire le funzionalità richieste alle classi identificate
– Considerare le operazioni che modificano lo stato degli
oggetti
• Si può non essere immediatamente esaustivi
50
25
Esempio: Identificare le operazioni
51
Oggetti: Notazione grafica
• Un oggetto è un’istanza di una classe
• Per rappresentare un oggetto si utilizza lo stesso
simbolo usato per rappresentare le classi
– Il nome viene sottolineato per evidenziare che si tratta di
un oggetto
– Analogamente a quanto accade per le classi è possibile
decidere il livello di visibilita per attributi e valori
52
26
Object diagrams
• Un object diagram rappresenta un insieme di oggetti e le relazioni
tra essi
• rappresentano una istanziazione di things di class diagrams
• rappresentano la vista statica di un sistema (o vista statica di un
processo) ma dalla prospettiva di un caso reale, o prototipale
53
Object diagrams
pubblicato da
L:Libro
cod_libro=XX111
Titolo= YYYYY
1
data edizione=1/1/87
ISDN=3333333
0..*
data acquisizione=2/2/90
Ed:Editore
ragione sociale= ....
nome breve= ....
indirizzo sede= ....
Telefono= ....
1..*
0..*
scritto da
0..*
LA:Libro antico
Valore=100000
Aut: Autore
nome = ......
cognome = ......
anno nascita= .......
anno morte= .......
0..*
Utente
54
27
Classi: Implementazione
• Esiste una corrispondenza tra la rappresentazione
UML di una classe e l’implementazione con un
linguaggio O-O (Es. Java)
55
Associazioni: Implementazione
• In generale non esiste un mapping diretto su un
costrutto di un linguaggio di programmazione
• Possono essere implementate introducendo degli
attributi ad hoc che contengono dei riferimenti (o
puntatori) alle istanze delle classi associate
– Il riferimento a più istanze di una classe può essere
modellato con liste, array, etc.
• Direzionalità
– In fase di implementazione si può decidere di codificarla
solo in una delle due direzioni (con un puntatore), perdendo
però così la possibilità di percorrere il link nella direzione
opposta!
56
28
57
29