Modellare con le Classi Che cosa è UML?

Transcript

Modellare con le Classi Che cosa è UML?
Modellare con le Classi
Che cosa è UML?
UML ( Unified Modelling Language ) è un linguaggio grafico
standard per m o d e l l a r e software object oriented
• T r a la fine d e g l i a n n i ‘8 0 e g l i i n i z i d e g l i a n n i ’90 f e c e r o la
c o m p a r s a i primi processi di s v i l u p p o object - oriented
• La proliferazione di metodi e notazioni diverse creavano confusio n e
• Due importanti metodologi, R u m b a u g h e Booch, decisero di fondere
i l o r o a p p r o c c i nel 1 9 9 4 .
— Cominciarono a lavorare insieme alla Rational Software
Corporation
• Nel 1 9 9 5 , u n altro m e t o d o l o g o, J a c o b s o n , s i u n ì al g r u p p o
— Il suo lavoro si concentrava sugli use cases
• N l e 1 9 9 7 l’ Object M a n a g e m e n t G r o u p ( O M G ) cominci ò il processo
di standardizzazione di U M L
Prof.ssa A.R. Fasolino
Modellare con le classi
2
1
Diagrammi UML
• Class diagrams
— Descrivono le classi e le loro relazioni
• Interaction diagrams
— Mostrano il comportamento del sistema attraverso la
rappresentazione di come gli oggetti interagiscono tra
loro
• State diagrams e activity diagrams
— Mostrano il modo in cui i sistemi si comportano
internamente
• Component e deployment diagrams
— Mostrano come i vari componenti del sistema sono
logicamente e fisicamente dislocati
Prof.ssa A.R. Fasolino
Modellare con le classi
3
Caratteristiche di UML
• Ha una semantica precisamente definita
• Possiede meccanismi di estensione
• Possiede un linguaggio testuale associato
— Object Constraint Language (OCL)
L ’obiettivo di U M L è di fornire un s u p p o r t o a l processo
di sviluppo s o f t w a r e
— Non è una metodologia
— Può essere usato all’interno dei processi di sviluppo
che adottano le proprie metodologie
Prof.ssa A.R. Fasolino
Modellare con le classi
4
2
Caratteristiche di un buon modello
Un modello dovrebbe
• Usare una notazione standard
• Essere comprensibile sia dagli utenti che dai clienti
• Permettere agli ingegneri del software di avere precise
indicazioni sulle caratteristiche del sistema
• Fornire informazioni usando diversi livelli di astrazione
I M o d e l l i sono usati per:
• Aiutare a creare il progetto.
• Permettere l’analisi e la revisione dei documenti di
progetto.
• Diventare la parte principale della documentazione del
sistema .
Prof.ssa A.R. Fasolino
Modellare con le classi
5
Aspetti principali dei Class Diagram UML
I principali el e m e n t i dei class d i a g r a m sono :
• Classi
- R a p p r e s e n t a n t i i tipi d i d a t i p r e s e n t i i n u n s i s t e m a
• Associazioni
- Rappresentano i collegamenti fra istanze di classi
• Attributi
- Sono I dati semplici presenti nelle classi e nelle loro istanze
• Operazioni
- R a p p r e s e n t a n o le f u n z i o n i s v o l t e d a l l e c l a s s i e d a l l e l o r o
istanze
• Generalizzazioni
- R a g g r u p p a n o le c l a s s i i n g e r a r c h i e d i e r e d i t a r i e t à
Prof.ssa A.R. Fasolino
Modellare con le classi
6
3
Classi
U n a classe è s e m p l i c e m e n t e r a p p r e s e n t a t a da un
rettangolo con i l n o m e della classe all ’interno
• Il diagramma può anche mostrare gli attributi e le
operazioni
• La signature completa di un’operazione è:
o p e r a t i o n N a m e( p a r a m e t e r N a m e: p a r a m e t e r T y p e … ): r e t u r n T y p e
Rectangle
Rectangle
getArea
resize
Prof.ssa A.R. Fasolino
Rectangle
Rectangle
Rectangle
height
width
height
width
height: int
width: int
getArea
resize
getArea(): int
resize(int,int)
Modellare con le classi
7
Associazioni e Molteplicità
Un’associazione rappresenta una relazione (fisica o
concettuale) tra classi
es. Persona lavora per Dipartimento
• Le relazioni sono bidirezionali s e b b e n e i l n o m e d e l l a
relazione faccia riferimento ad un’unica direzione
La molteplicità specifica quante istanze di una classe
possono essere associate con una singola istanza di un’altra
classe.
Prof.ssa A.R. Fasolino
Modellare con le classi
8
4
Molteplicità delle associazioni
Il simbolo di molteplicità adiacente alla classe 2 indica quante
istanze della classe 2 possono avere legami con una singola
istanza della classe 1
1=Valore di default
nome associazione
Uno ed uno solo
classe2
classe1
11
nome associazione
classe1
Opzionale (zero o uno)
classe2
0..1
*= molti
nome associazione
classe1
molti (zero o più di uno)
classe2
0..*
nome associazione
classe1
Uno o più di uno
classe2
1..*
Modellare con le classi
Prof.ssa A.R. Fasolino
9
Associazioni e Molteplicità
Esempi di associazioni e molte plicità
Employee
*
Secretary
*
Company
1..**
Company
Office
Person
Manager
BoardOfDirectors
0..1
0,3..8
*
*
Employee
BoardOfDirectors
intervallo
Prof.ssa A.R. Fasolino
Modellare con le classi
10
5
Nominare le Associazioni
• Ogni associazione può avere un nome, per esplicitare il
suo significato ( nome di associazione o n o m e d i r u o l o )
Employee
worksFor
*
Company
Secretary *
1..**
Manager
supervisor
Company
Office
Person
BoardOfDirectors
0..1
allocatedTo
0,3..8
*
*
Employee
BoardOfDirectors
boardMember
Modellare con le classi
Prof.ssa A.R. Fasolino
11
Come analizzare e validare le associazioni
Tre pattern di mo lteplicità r i c o r r e n t i :
• U n o -a - m olti
— Una compagnia ha molti impiegati,
— Un impiegato può lavorare per una sola compagnia.
- L a c o m p a g n i a n o n c o n o s c e le a t t i v i t à e x t r a s v o l t e dai s u oi
impiegati!
— Una compagnia può avere zero impiegati
- Es. Una compagnia fittizia
— Non è possi bile conservare dati di un impiegato se
non lavora per una compagnia
Employee *
Prof.ssa A.R. Fasolino
worksFor
Company
Modellare con le classi
12
6
Come analizzare e validare le associazioni
• Molti -a - molti (2 ° pattern)
— Un segretario può lavorare per molti manager
— Un manager può avere molti segretari
— I segretari possono lavorare in gruppi
— I Manager possono avere un gruppo di segretari
— Alcuni manager potrebbero non avere segretari.
— E’ possibile che un segretario abbia, anche
temporaneamente, zero manager?
Secretary
*
1..**
Manager
supervisor
Prof.ssa A.R. Fasolino
Modellare con le classi
13
Come analizzare e validare le associazioni
• U n o -a - uno (3 ° p a t t e r n )
— Ogni compagnia possiede 1 ed 1 sol corpo dirigente
— Ogni corpo dirigente appartiene ad una sola
compagnia
— Una compagnia ha sempre un corpo dirigente
— Un corpo dirigente deve far sempre parte di una
compagnia
Company
Prof.ssa A.R. Fasolino
BoardOfDirectors
Modellare con le classi
14
7
Come analizzare e validare le associazioni
Evitare associazioni uno -a - uno i n u t i l i !
Evitare ciò
Person
m i g l i o r e soluzione!
PersonInfo
Person
address
email
birthdate
name
name
address
email
birthdate
Modellare con le classi
Prof.ssa A.R. Fasolino
15
Un esempio più complesso
• Una prenotazione (booking) si riferisce sempre ad un solo
passegger o
— Non esistono prenotazioni con zero passeggeri
- Ciò implica che prima di creare una prenotazione deve
esistere un passeggero
— Una prenotazione non può mai riferirsi a più di un
passeggero.
• Un Passeggero può avere più prenotazioni
— Un passeggero potrebbe avere zero prenotazioni
— Un passeggero potrebbe avere più di una prenotazione
Passenger
Prof.ssa A.R. Fasolino
*
Booking
*
Modellare con le classi
SpecificFlight
16
8
Classi associative
• In alcuni casi, un attributo che si riferisce a due classi
collegate non può essere riferito a nessuna delle due
• Può esistere nel caso di molteplicità molti-a-molti
*
Student
* CourseSection
Soluzioni
equivalenti
Registration
livello
Student
*
Registration
*
CourseSection
livello
— P r i m a d i c r e a r e u n ’ i s t a n z a d e l l a c l a s s e R e g i s t r a t i o n, d e v o n o
esistere le istanze delle classi collegate
Modellare con le classi
Prof.ssa A.R. Fasolino
17
Associazioni riflessive
• Associazioni che collegano una classe con se’ stessa
successor
* Course
*
*
isMutuallyExclusiveWith
*
prerequisite
Associazione
asimmetrica
Prof.ssa A.R. Fasolino
Associazione
simmetrica
Modellare con le classi
18
9
Direzionalità delle associazioni
• Le associazioni sono per default bi-direzionali
• È possibile limitare il verso di percorrenza di una
relazione aggiungendo una freccia ad un estremo
Giorno
*
Nota
E s. Un sistema calendario
• Att. Rimandare queste scelte alla fase di design (limitano
la flessibilit à)
Modellare con le classi
Prof.ssa A.R. Fasolino
19
Generalizzazioni
Specializz a re una superclasse in due o pi ù sottoclassi
• Il discriminatore è una etichetta che descrive i criteri
usati nella specializzazione
Animal
Animal
habitat
AquaticAnimal
LandAnimal
typeOfFood
Carnivore
Herbivore
— Un discriminatore potrà essere implementato come un attributo
con valori diversi nelle due sottoclassi
Prof.ssa A.R. Fasolino
Modellare con le classi
20
10
Evitare generalizzazioni inopportune
Recording
Gerarchia inadeguata:
meglio usare varie istanze!
VideoRecoding
MusicVideo
Recording * hasCategory
RecordingCategory
title
artist
description
JazzRecording ClassicalRecording
subcategory
:RecordingCategory
video
audio
subcategory
music video
subcategory
subcategory
:RecordingCategory
:RecordingCategory
:RecordingCategory :RecordingCategory
classical
blues
jazz
BluesRecording RockRecording
Migliore Class diagram,
ed il corrispondente
Diagramma delle istanze
*
:RecordingCategory
:RecordingCategory
AudioRecording
subcategory
subcategory
rock
:Recording
:Recording
9th Symphony
Beethoven
Let it be
The Beatles
Modellare con le classi
Prof.ssa A.R. Fasolino
21
Gestire gerarchie con discriminatori multipli
• Una soluzione: creare generalizzazioni di più alto livello
Animal
habitat
Svantaggio: Tutte le proprietà
del secondo discriminatore
sono duplicate
AquaticAnimal
typeOfFood
typeOfFood
AquaticCarnivore AquaticHerbivore
Prof.ssa A.R. Fasolino
LandAnimal
LandCarnivore LandHerbivore
Modellare con le classi
22
11
Gestire gerarchie con discriminatori multipli
• Usando l’ereditarietà multipla
Animal
typeOfFood
habitat
AquaticAnimal
AquaticCarnivore
LandAnimal
AquaticHerbivore
Carnivore
LandCarnivore
Herbivore
LandHerbivore
Modellare con le classi
Prof.ssa A.R. Fasolino
23
Evitare che un oggetto di una gerarchia
debba cambiare classe
• I linguaggi non permettono questo cambiamento:
bisognerebbe distruggere l’oggetto corrente e crearne
uno nuovo dell’altra classe, assegnandogli tutte le
associazioni che il primo aveva con altri oggetti…
Student
attendance
FullTimeStudent
PartTimeStudent
• Sarebbe meglio introdurre un attributo ‘tipoFrequenza’
ma perderei i vantaggi del polimorfismo
Prof.ssa A.R. Fasolino
Modellare con le classi
24
12
Diagrammi di Istanza
• Un diagramma che contiene esplicitamente oggetti
(istanze di classi) e link ( istanze di associazioni) esistenti
a run-time
Pat:Employee
Wayne:Employee
OOCorp:Company
OOCorp's Board:
UML inc:Company
UML inc's Board
Ali:Employee
Carla:Employee
Terry:Employee
• Utili per modellare specifici scenari –ma sono meno
generali dei class diagram
Prof.ssa A.R. Fasolino
Modellare con le classi
25
Confronto fra associazioni e
generalizzazioni nei diagrammi d’istanza
• Le associazioni descrivono le relazioni che esisteranno
fra istanze a run time.
— In un diagramma d’istanza generato da un class
diagram, ci sar à sempre un’istanza di entrambe le
classi collegate da una associazione
• Le generalizzazioni descrivono relazioni fra classi nei
class diagrams.
— Non compaiono nei diagrammi d’istanza.
— Un’istanza di una classe avrà gli attributi della classe
più quelli delle superclassi da cui discende (in pratica
dovrebbe essere considerata anche come un’istanza
di ciascuna delle superclassi della classe …)
Prof.ssa A.R. Fasolino
Modellare con le classi
26
13
Ulteriori aspetti dei class diagram:
Aggregazione
• Le Aggregazioni sono speciali associazioni che
rappresentano una relazione ‘tutto-parti ’.
— Il lato del ‘tutto’ è spesso chiamato l’aggregato
— Il simbolo dal lato del tutto sostituisce una
associazione avente nome i s P a r t O f
Vehicle
* VehiclePart
Country
*
Prof.ssa A.R. Fasolino
Region
Modellare con le classi
27
Quando usare una aggregazione
U n a associazi o n e d i v e n t a u n a a g g r e g a z i o n e s e :
• È possibile affermare che:
— Le parti sono ‘parte di’ un insieme
— L’aggregato è ‘composto da’ parti
• Quando qualcosa possiede o controlla l’aggregato, allora
esso possiede o controlla anche le sue parti
Prof.ssa A.R. Fasolino
Modellare con le classi
28
14
Una gerarchia di aggregazione
documento
0..1
titolo
sottosezione
0..*
1
sezione
0..*
paragrafo
frase
1..*
Prof.ssa A.R. Fasolino
Modellare con le classi
29
Composizione
• Una composizione è una forma forte di aggregazione
— Se l’aggregato viene distrutto, anche le sue parti
saranno distrutte (le parti non esistono senza il tutto)
Palazzo
*
Stanza
• Due alternative per rappresentare l’indirizzo
(composizione uno-a-uno):
Employee
Employee
address: Address
Prof.ssa A.R. Fasolino
Address
street
municipality
region
country
postalCode
Modellare con le classi
30
15
Gerarchia di Aggregazione
Veicolo
Chassis
*
*
Carrozzeria
Porta
*
Telaio
Motore
Trasmissione
Ruota
L’aggregazione fornisce indicazioni utili al progettista che potr à
scegliere di incapsulare il codice delle parti nella classe aggr egata
Prof.ssa A.R. Fasolino
Modellare con le classi
31
Propagazione
• Un meccanismo secondo cui un’operazione in un
aggregato è implementata facendo svolgere all’aggregato
l’operazione sulle sue parti.
• Analogamente, le propriet à delle parti si propagano
indietro verso l’aggregato (e s . C a l c o l o il p e s o t o t a l e t r a m i t e
il
peso delle parti)
• La Propagazione sta all’aggregazione come l’ereditariet à
sta alla generalizzazione.
— Differenza fondamentale:
- L ’ er e d i t a r i e t à è un m e c c a n i s m o i m p l i c i t o
- L a p r o p a g a z i o n e d e v e e s s e r e p r o g r a m m a t a, s e r i c h i e s t a
Polygon
Prof.ssa A.R. Fasolino
*
LineSegment
Modellare con le classi
32
16
Interfaccia
U n ’interfacci a
descriv e
una
porzione
c o m p o r t a m e n t o v i s i b i l e d i u n insi e m e di oggetti .
del
• Un’ interfaccia è simile ad una classe, tranne che essa
non possiede variabili d’istanza nè metodi implementati.
• Una o pi ù classi possono fornire l’implementazione
dell’interfaccia.
Person
«interface»
Cashier
Machine
withdraw
deposit
Employee
Person
Machine
Cashier
ATM
Prof.ssa A.R. Fasolino
Employee
Modellare con le classi
Cashier
ATM
33
Note e testo descrittivo
T r e m o d i p e r a g g i u n g e r e i n f o r m a z i o n i a i d i a g r a m mi U M L
• Testo descrittivo e a l t r i d i a g r a m m i
— Includere i diagrammi UML in altri documenti
— Descrizioni testuali aggiuntive possono essere utili a
specificare altri aspetti o caratteristiche non specificabili
in UML
• Note :
— Una nota è un pezzo di testo incluso in un diagramma
UML
— È come un commento in un linguaggio di
programmazione
Prof.ssa A.R. Fasolino
Modellare con le classi
34
17
Object Constraint Language (OCL)
O C L è un linguaggio di specifica progettato per
specificare vincoli nei moduli software
• Una espressione OCL specifica un vincolo (predicato
logico) sul sistema che deve assumere valore v e r o
• Un vincolo non può avere side-effects
— Non può calcolare un risultato non-Boolean nè
modificare alcun dato.
• Gli statements OCL nei class diagrams possono
specificare quali devono essere i valori di attr ibuti e
associazioni: il programmatore dovr à poi rispettare tali
vincoli
Modellare con le classi
Prof.ssa A.R. Fasolino
35
OCL statements
Gli s t a t e m e n t s O C L po s s o n o essere costruiti usando :
• Riferimenti a nomi di ruolo, nomi di associazioni,
attributi ed I risultati di operazioni
• I valori logici
true
e
false
• Operatori logici come
a n d , o r, =, >, <
o
<>
(not equals)
• Stringhe di caratteri quali: ‘a s t r i n g’
• Interi e numeri reali
• Operatori aritmetici : *, / , +, -
Prof.ssa A.R. Fasolino
Modellare con le classi
36
18
Esempio: vincoli sui poligoni
{edge->forAll(e1,e2 |
e1 <> e2
implies e1.startPoint <> e2.startpoint
and e1. endPoint <> e2.endpoint)}
a LinearShape is any shape
{ordered}
that can be constructed of line
segments (in contrast with
shapes that contain curves).
LinearShape
edge
1..*
LineSegment
startPoint : Point
endPoint : Point
length : int
Path
Line
Polygon
{startPoint <> endPoint}
{edge->first.startPoint =
edge->last. endPoint}
length
{edge->size=1}
{length =
edge.length->sum}
RegularPolygon
{edge->forAll(e1,e2 |
e1.length = e2.length)}
Modellare con le classi
Prof.ssa A.R. Fasolino
37
Un esempio dettagliato: un Class Diagram
per una Genealogia
Person
name
sex
placeOfBirth
dateOfBirth
placeOfDeath
{husband.sex
dateOfDeath
= #male}
placeOfMarriage
child
husband
dateOfMarraige
0..1 dateOfDivorce
*
wife
parent
0..1
2
{wife.sex
= #female}
{parent->forAll(p1,p2:
p1 <> p2
implies p1.sex <> p2.sex)}
• Problemi
— Una persona d e v e avere sempre due genitori
— I Matrimoni non sono gestiti adeguatamente
(persone con più matrimoni?)
Prof.ssa A.R. Fasolino
Modellare con le classi
38
19
Genealogia : Possibili soluzioni
Person
Person
name
sex
placeOfBirth
dateOfBirth
placeOfDeath child
dateOfDeath *
name
placeOfBirth
dateOfBirth
placeOfDeath child
dateOfDeath *
partner
* 0..2
{partner->forAll(p1,p2 |
p1 <> p2
implies p1.sex <> p2.sex)}
*
Union
Woman
Man
0..1 * 0..1
child
malePartner
femalePartner
child
0..1
placeOfMarriage parents
dateOfMarriage
dateOfDivorce
*
*
Union
0..1
placeOfMarriage
parents
dateOfMarriage
dateOfDivorce
Prof.ssa A.R. Fasolino
Modellare con le classi
39
Una raccomandazione
In relazione ai Class diagram, UML include altri aspetti di
cui non ci siamo occupati.
E s.
• notazione per le classi parametriche ( template)
•Visibilità di attributi e metodi
•Relazioni di dipendenza fra classi…
Fare riferimento allo standard!!!
Prof.ssa A.R. Fasolino
Modellare con le classi
40
20
Il processo di sviluppo dei Class Diagrams
I d i a g r a m mi U M L possono essere creati in diverse fasi
del ciclo di vita , con diversi scopi e livelli di dettaglio
• Exploratory domain model:
— Viene sviluppato nella fase di analisi del dominio del
problema per documentare ciò che si è appreso
• System domain model:
— Descrive aspetti del dominio del problema che
saranno presenti nel sistema (i dati di interesse)
• System model:
— Include anche classi che saranno usate per costruire
le interfacce utente e l’architettura del sistema
Prof.ssa A.R. Fasolino
Modellare con le classi
41
System domain model vs System model
• Il system domain model trascura molte classi che sono
necessarie per il sistema finale
— Può contenere anche meno della metà delle classi del
sistema.
— Dovrebbe essere sviluppato per essere riusato
indipendentemente da:
- user interface classes
- architectural classes
• Il system model completo include:
— Il system domain model
— Classi dell’interfaccia utente ( e s . f i n e s t r e , m e n u , f o r m … )
— Classi dell’architettura del sistema (c l i e n t / s e r v e r s / fi l e/
database)
— Classi di utilità
Prof.ssa A.R. Fasolino
Modellare con le classi
42
21
Sequenza di attività suggerite
•
•
•
•
•
•
Identifica un primo insieme di classi candidate
Aggiungi associazioni ed attributi a queste classi
Trova le generalizzazioni
Trova le principali r e s p o n s a b i l i tà di ogni classe
In base alle responsabilit à decidi sulle operazioni
Itera il processo finchè il modello ottenuto
soddisfacente
— Aggiungi o cancella classi, associazioni, attributi,
generalizzazioni, responsabilit à o operazioni
— Identifica le interfacce utente
— Usa i design patterns
Non essere nè disorganizzati, nè troppo rigidi..
Prof.ssa A.R. Fasolino
Modellare con le classi
è
43
Identificare le classi
• Quando si sviluppa un domain model si tende a scoprire
classi
• Nel lavorare all’interfaccia utente o all’architettura, si
tende ad inventare classi
— Necessarie a risolvere un problema di design
— Si possono inventare classi anche per il domain
model!
• Riusare il pi ù possibi le!
— Usare frameworks
— Se il sistema è una estensione di un precedente…
— Guardare a sistemi simili
Prof.ssa A.R. Fasolino
Modellare con le classi
44
22
Una semplice tecnica per scoprire le classi
del dominio
• Analizzare documentazione di partenza, come la
descrizione dei requisiti
• Estrarre nomi e frasi nominali (nomi con aggettivi)
• Eliminare nomi che:
— Sono ridondanti (rappresentano la stessa classe)
— Rappresentano istanze e non classi
— Sono vaghi o troppo generici
— Corrispondono a classi che non sono necessarie al
livello considerato
• Fare attenzioni a classi nel domain model che
rappresentano tipi di utente o altri attori (servono
davvero?)
Prof.ssa A.R. Fasolino
Modellare con le classi
45
Identificare associazioni ed attributi
• Parti con le classi ritenute centrali ed importanti
• Stabilisci i dati ovvi e chiari che esse contengono e le
loro relazioni con altre classi.
• Procedi con le classi meno importanti.
• Evita di aggi ungere troppi attributi ed associazioni ad
una classe
— Un sistema è più semplice se manipola meno
informazioni
Prof.ssa A.R. Fasolino
Modellare con le classi
46
23
Suggerimenti per
associazioni valide
trovare
e
specificare
• Una associazione dovrebbe esistere se una classe:
- possiede
- controlla
- è collegat a a
- si riferisce a
- è parte di
- ha c o m e p a r t i
-
è membro di o ppure
-
ha come membri
qualche altra classe del modello
• Specificare le molteplicit à da entrambi i lati.
• Assegnare un nome chiaro all’associazione.
Modellare con le classi
Prof.ssa A.R. Fasolino
47
Azioni piuttosto che associazioni.
• Un errore comune consiste nel considerare azioni come
se fossero associazioni.
SocioLibreria
*
*
*
Prende
In prestito
Restituisce
*
*
ArticoloLibreria
Errore !
Prestito
*
DataPrestito
DataRitorno
*
DataRestituzione
SocioLibreria
ArticoloLibreria
Meglio: l’operazione presta crea un Prestito e
L’operazione restituisci setta la data di restituzione
Prof.ssa A.R. Fasolino
Modellare con le classi
48
24
Identificare gli attributi
• Cercare le informazioni che devono essere conservate
per ciascuna classe
• È possibile che nomi che sono stati scartati come classi,
possano ora essere considerati attributi
• Un attributo dovrebbe in genere contenere un solo valore
— E s. stringa, numerico
Modellare con le classi
Prof.ssa A.R. Fasolino
49
Suggerimenti per identificare e specificare
attributi validi
• È bene non avere molti attributi duplicati
• Se un sottoinsieme degli attributi di una classe forma un
gruppo coerente, crea una classe distinta per questi attributi
Person
Person
Person
name
addresses
name
street1
municipality1
provOrState1
country1
postalCode1
street2
municipality2
provOrState2
country2
postalCode2
name
Bad due
Errore:
usotodi
a plural
attributi
attributeal
plurale
Address
* addresses
*
street
municipality
provOrState
country
postalcode
type
Good l’attributo
solution. The
Bene:
type indicates whether
tipo
tipo di
it is indica
a home iladdress,
indirizzo
business address etc.
Bad due
to too
many
Errore:
troppi
attributi
attributes, and inability
duplicati,
e
incapacità
to add more addresses di
gestire più indirizzi
Prof.ssa A.R. Fasolino
Modellare con le classi
50
25
L’esempio dei voli (con attributi e nuove
associazioni)
Employee
Passenger
name
employeeNumber
jobFunction
name
number
RegularFlight
*
supervisor
time
flightNumber
*
*
*
Booking
*
seatNumber
Prof.ssa A.R. Fasolino
*
SpecificFlight
date
Modellare con le classi
51
Identificare generalizzazioni e interfacce
• Due modi per trovare le generalizzazioni :
— bottom-up
- Raggruppo classi simili creando una nuova superclasse
— top-down
- Cerco prima le classi più generali, e poi specializzo
• Crea un interfaccia, invece di una superclasse se:
— Le classi sono molto diverse fra loro, tranne che
hanno poche operazioni in comune
— Una o pi ù classi hanno gi à le loro superclassi
— Potrebbero essere disponibili diverse
implementazioni dell a stessa classe
Prof.ssa A.R. Fasolino
Modellare con le classi
52
26
L’esempio dei voli (con generalizzazioni)
Person
PersonRole 0..2
name
idNumber
EmployeeRole
PassengerRole
jobFunction
RegularFlight
*
supervisor
time
flightNumber
*
*
Booking
*
*
*
SpecificFlight
seatNumber
date
Modellare con le classi
Prof.ssa A.R. Fasolino
53
Assegnare le Responsabilità alle classi
Una r e s p o n s abilit à è un qualcosa che è richiesto al sistema .
• La responsabilit à di ogni requisito funzionale deve essere attribuita
ad una delle classi, anche se tale requisito potrà essere svolto
mediante una collaborazione fra più classi.
— Tutte le responsabilità
c h i a r a m e n t e c o r r e l a t e.
di
una
classe
dovrebbero
essere
— S e u n a c l a s s e h a t r o p p e r e s p o n s a b i l i t à, v a l u t a r e l ’i p o t e s i d i
dividerla in più classi
— S e u n a c l a s s e n o n h a r e s p o n s a b i l i t à, p r o b a b i l m e n t e è i n u t i l e
— Quando una responsabilità non pu ò essere attribuita a nessuna
d e l l e c l a s s i e s i s t e n t i , d ov r e b b e e s s e r e c r e a t a u n a n u o v a c l a s s e
• P e r s t a b i l i r e l e r e s p o n s a b i l i t à:
— S v o l g e r e l ’ analisi dei c a s i d’ u s o
— C e r c a r e v e r b i e n o m i c h e d e s c r i v o n o az i o n i n e l l a d e s c r i z i o n e
del sistema
Prof.ssa A.R. Fasolino
Modellare con le classi
54
27
Categorie di responsabilità
• Set e get dei valori degli attributi
• Crear e ed inizializzare nuove istanze
• Prelevare o
persistente
memorizzare
dati
da
una
memoria
• Distruggere istanze
• Aggiungere e cancellare istanze di associazioni
• Copiare, convertire, trasfor mare, trasmettere o fornire in
output dati.
• Calcolare risultati numerici
• Navigare e cercare dati di particolari istanze
• Altro lavoro specifico.
Modellare con le classi
Prof.ssa A.R. Fasolino
55
L’esempio dei voli (con responsabilità)
— Creare un
nuovo
VoloRegolare
— Cercare un
VoloRegolare
— Modificare gli
attributi di un
volo
— Creare un
VoloSpecifico
— Prenotare un
passeggero
— Cancellare una
prenotazione
Prof.ssa A.R. Fasolino
PersonRole 0..2
*
Person
Airline
name
idNumber
*
EmployeeRole
PassengerRole
jobFunction
RegularFlight
*
supervisor
time
flightNumber
*
*
Booking
seatNumber
*
*
*
SpecificFlight
date
Modellare con le classi
56
28
Responsabilità
Classe
Creare un nuovo RegularFlight
RegularFlight o p p u r e m e g l i o Airline
Cercare un RegularFlight
Airline c h e m a n t i e n e l a c o l l e z i o n e d e l l e
istanze dei voli
Modificare gli attributi di un
volo( RegularFlight)
RegularFlight ( o g n i c l a s s e è r e s p o n s a b i l e
Creare un VoloSpecifico
RegularFlight, s i c c o m e u n v o l o S p e c i f i c o
dei propri attributi)
è un’istanza di VoloRegolare
Prenotare un passeggero su un
VoloSpecifico
O S pecificFlight o P a s s e n g e r R o l e:
meglio PassengerRole (è il passeggero
che decide di prenotare)
Cancellare una prenotazione
Prof.ssa A.R. Fasolino
Booking
Modellare con le classi
57
Costruire un prototipo di class diagram su
carta (Metodo delle CRC cards: Class
Responsibility Collaboration)
• Per ogni classe identificata, porre il nome della classe su
una scheda (Card)
• Man mano che vengono individuati attributi e
responsabilità, elencarl i sulle Card
— Se non tutte le responsabilità entrano in una card:
- C i ò s u g g e r i s c e d i d i v i d e r e la c l a s s e i n p i ù c l a s s i .
• Sistemare le card su una lavagna per creare il Class
diagram
• Disegnare le linee corrispondenti ad associazioni e
generalizzazioni.
Prof.ssa A.R. Fasolino
Modellare con le classi
58
29
Identificare le operazioni
Le operazioni saranno necessarie
r e s p o n s a b i l i tà di ciascuna classe
a
realizzare
le
• Ci saranno in genere diverse operazioni per realizzare
ogni responsabilit à, ma una in particolare avr à l’impegno
della responsabilità.
• Le principali operazioni che implementano
responsabilità sono normalmente dichiarate p u b l i c
una
• Altri metodi che collaborano a realizzare una
responsabilità devono essere dichiarate private se
possibile.
Modellare con le classi
Prof.ssa A.R. Fasolino
59
Esempio di collaborazioni per implementare
alcune tipiche responsabilità
EmployeeRole
+ getName [e2]
crewMember *
**
Booking
Booking [c2]
SpecificFlight
*
*
PassengerRole
+ makeBooking [c1]
addLinkToBooking [c4]
Prof.ssa A.R. Fasolino
+
+
+
+
specifyAirplane [a1]
createFlightLog [b1]
changeAirplane [d1]
findCrewMember [e1]
addLinkToBooking [c3]
*
Airplane
0..1
addLinkToSpecificFlight [a2, d3]
deleteLinkToSpecificFlight [d2]
0..1
FlightLog
FlightLog [b2]
Modellare con le classi
60
30
SpecificFlight
Collaborazione ‘a’
*
Airplane
0..1
+ specifyAirplane [a1]
addLinkToSpecificFlight [a2, d3]
Creare un link b i -direzi o n a l e t ra due oggetti esistenti;
es. aggiungere un link fra un’istanza di S p e c i f i c F l i g h t e
un’istanza di A i r p l a n e.
1. (public) L ’istanza di S p e c i f i c F l i g h t
— Crea un l i n k mono - direzi o n a l e v e r s o l’istanza di
Airplane
— Q u i n d i , c h i a m a l ’o p e r a z i o n e 2 .
2. (non-public) L’istanza di A i r p l a n e
— crea un link mono - direzi o n a l e v e r s o l’istanza di
SpecificFlight
Modellare con le classi
Prof.ssa A.R. Fasolino
Class collaboration ‘b’
61
0..1
0..1
SpecificFlight
+ createFlightLog [b1]
FlightLog
FlightLog [b2]
Creare un oggetto e collegarlo ad un oggetto esistente
es.
creare
un
SpecificFlight.
F l i g h t L o g,
e
collegarlo
ad
uno
1. (public) L ’istanza di S p e c i f i c F l i g h t
— Chiama il costruttore di
FlightLog
(operation 2)
— Quindi crea un link monodirezionale verso la
nuova istanza di
F l i g h t L o g.
2. (non-public) Il costruttore della Classe F l i g h t L o g’s
— Crea
u na l i n k
verso l ’istanza di
Prof.ssa A.R. Fasolino
monodirezionale
SpecificFlight.
Modellare con le classi
a l l ’i n d i e t r o
62
31
PassengerRole
Class collaboration ‘c’
+ makeBooking [c1]
addLinkToBooking [c4]
Booking
Booking [c2] *
*
SpecificFlight
addLinkToBooking [c3]
Creare una classe associati v a , dati due oggetti esistenti
es. creare un’istanza di B o o k i n g, che collegher à uno
S p e c i f i c F l i g h t ad un P a s s e n g e r R o l e .
1.
( p u b l i c ) l ’i s t a n za d i
—
2.
PassengerRole
C h i a m a i l c o s t r u t t or e d i B o o k i n g (o p e r a z i o n e 2).
( n o n - p u b l i c ) Il c o s t r ut tor e d e l l a C l a s s e B o o k i n g , t r a l e a l t r e a z i o n i :
—
C r e a u n l i n k m o n o d i r e z i o n a l e all ’i n d i e t r o v e r s o l’i s t a n z a d i
PassengerRole
—
Crea
un
link
monodirezionale
verso
l ’i s t a n z a
di
SpecificFlight
—
C h i a m a l e o p e r a z i o n i 3 e 4.
3.
( n o n - p u b l i c ) L’i s t a n z a d i S p e c i f i c F l i g h t
4.
( n o n - p u b l i c ) L’i s t a n z a d i P a s s e n g e r R o l e
—
—
C r e a u n l i n k m o n o d i r e z i o n a l e v e r s o l ’i s t a n z a d i B o o k i n g .
C r e a u n l i n k m o n o d i r e z i o n a l e v e r s o l ’i s t a n z a d i B o o k i n g .
Modellare con le classi
Prof.ssa A.R. Fasolino
Class collaboration ‘d’
SpecificFlight
63
Airplane
0..1
*
addLinkToSpecificFlight [a2, d3]
deleteLinkToSpecificFlight [d2]
+ changeAirplane [d1]
C a m b i a r e l a desti n a z i o n e d i u n link
es.
cambiare l’ A i r p l a n e di
airplane1 a airplane2
uno S p e c i f i c F l i g h t , da
1. (public) l ’i s t a n z a d i S p e c i f i c F l i g h t
— Cancella il link verso
airplane1
— Crea un link monodirezionale verso
airplane2
— Chiama l’operazione 2
— Q u i n d i c h i a m a l ’o p e r a z i o n e 3 .
2 . ( n o n- p u b l i c )
airplane1
— Cancella il suo link
S p e c i f i c F l i g h t.
3 . ( n o n- p u b l i c )
monodirezionale
verso
l ’i s t a n z a
di
airplane2
— Crea
un
link
monodirezionale
verso
l ’i s t a n z a
di
S p e c i f i c F l i g h t.
Prof.ssa A.R. Fasolino
Modellare con le classi
64
32
Class collaboration ‘e’
EmployeeRole
*
crewMember
+ getName [e2]
SpecificFlight
*
+ findCrewMember [e1]
Cercare una istanza associata
es. cercare un membro di equipaggio associato ad uno
S p e c i f i c F l i g h t e che abbia un certo nome.
1. (public)
The instance of S p e c i f i c F l i g h t
— Crea un
Iterator
su tutti i link
crewMember
dello
SpecificFlight
— Per ognuno di essi chiama l’operazione 2, finchè
non trova il nome cercato
2. (può essere public) l’istanza
restituisce il suo nome.
Prof.ssa A.R. Fasolino
di
EmployeeRole
Modellare con le classi
65
Implementing Class Diagrams in Java
• Attributes are implemented as instance variables
• Generalizations are implemented using
• Interfaces are implemented using
extends
implements
• Associations are normally implemented using instance variables
• Divide each two - way association into two one- way associations
— so each associated class has an instance variable.
• F o r a o n e- w a y a s s o c i a t i o n w h e r e t h e m u l t i p l i c i t y a t t h e o t h e r
e n d i s ‘o n e ’ or ‘ o p t i o n a l ’
— declare a variable of that class (a reference)
• F o r a o n e- w a y a s s o c i a t i o n w h e r e t h e m u l t i p l i c i t y a t t h e o t h e r
e n d i s ‘ m a n y’:
— use a collection class implementing List, such as V e c t o r
Prof.ssa A.R. Fasolino
Modellare con le classi
66
33
Example: S p e c i f i c F l i g h t
class SpecificFlight
{
private Calendar date;
private RegularFlight regularFlight;
private TerminalOfAirport destination;
private Airplane airplane;
private FlightLog flightLog;
private ArrayList crewMembers;
// of E m p l o y e e R o l e
private ArrayList bookings
...
}
Prof.ssa A.R. Fasolino
Modellare con le classi
67
Example: S p e c i f i c F l i g h t
// Constructor that should only be called from
// addSpecificFlight
SpecificFlight(
Calendar aDate,
RegularFlight aRegularFlight)
{
date = aDate;
regularFlight = aRegularFlight;
}
Prof.ssa A.R. Fasolino
Modellare con le classi
68
34
Example: R e g u l a r F l i g h t
class RegularFlight
{
private ArrayList specificFlights ;
...
// Method that has primary
// responsibility
public void addSpecificFlight(
Calendar aDate)
{
SpecificFlight newSpecificFlight;
newSpecificFlight =
n e w SpecificFlight(a D a t e , this);
specificFlights . a d d ( newSpecificFlight);
}
...
}
Prof.ssa A.R. Fasolino
Modellare con le classi
69
35