Diagramma delle classi
Università di Padova
Facoltà di Scienze MM.FF.NN
Informatica - anno 2009-10
Corso di Ingegneria del Software
Diagrammi delle classi
Class diagrams
Diagrammi degli oggetti
Object diagrams
E’ un diagramma che illustra una collezione di elementi
dichiarativi (statici) di un modello come classi e tipi, assieme ai loro
contenuti e alle loro relazioni.
Serve per individuare gli elementi di un sistema
Costruito, perfezionato ed utilizzato durante tutto il processo di
sviluppo del sistema
Scopo:
•
individua e specifica i concetti del sistema
•
specifica le collaborazioni
•
specifica gli schemi logici dei D.B.
Utilizzato dagli analisti, progettisti e dai programmatori
© Renato Conte - UML: CLASSI e OGGETTI - 1/100
© Renato Conte - UML: CLASSI e OGGETTI - 2/100
Fasi, modelli e diagrammi
Diagrammi delle classi e degli oggetti
Un diagramma delle classi è un grafo composto da
classi e relazioni.
Requirements
Analysis
Use Case
Model
Component
Diagrams
Design
Model
Deployment
Diagrams
Deployment
Model
Implementation
Test
Class
Diagrams
Analysis
Model
Design
Un diagramma degli oggetti è un grafo composto da
istanze di classi (oggetti) e relazioni; esso è una
istanza del diagramma delle classi.
Use Case
Diagrams
Implem.
Model
Test
Model
Object
Diagrams
Incl. subsystems and
packages
Sequence
Diagrams
Collaboration
Diagrams
Statechart
Diagrams
UML 2:
Communication
Diagrams
UML 2: State
Machine Diagram.
Activity
Diagrams
© Renato Conte - UML: CLASSI e OGGETTI - 3/100
© Renato Conte - UML: CLASSI e OGGETTI - 4/100
Sintassi di una classe ( esempi 1)
Classe
“A class is the descriptor
Nome della classe
Account
for a set of objects with
balance: Money
accountHolder: String
interestRate: int
similar structure, behavior,
Attributi
and relationships”.
setInterest()
setOverdraftLevel()
Operazioni
dal manuale di riferimento di UML v.1.5
© Renato Conte - UML: CLASSI e OGGETTI - 5/100
© Renato Conte - UML: CLASSI e OGGETTI - 6/100
( esempi 3)
«entity»
stereotype
Account
{ abstract,
author= Joe,
status= tested }
( esempi 2)
Classe attiva
Boolean
Account
stato: enum {false,true}
#
#
-
balance: Money
accountHolder: String
interestRate: int = 7
lastAccountID: String
Customer
marcatori
di visibilità
+
#
+
setInterest(d: Date)
update()
setOverdraftLevel()
getBalance():Money
Exceptions
accessViolationException
opzionali
definite dall’utente
Responsibilities
-- Keep track of balance
© Renato Conte - UML: CLASSI e OGGETTI - 7/100
constraints
name: String
title: String
age: Integer
isMale: Boolean
{ title = if isMale then ‘Mr.’ else ‘Ms.’ endif}
{ age >= 18 and age < 66 }
{ name.size < 100 }
© Renato Conte - UML: CLASSI e OGGETTI - 8/100
Sintassi membri
Livello di dettaglio nei diagrammi
( in diagrammi espansi o reali )
Attributi
Diagrammi
ad alto
livello
[visibility] name [multiplicity] [: type]
Diagrammi
espansi
[= initial-value] [{property-string}]
changeable, addOnly, frozen
Operazioni ( implementate da metodi, ... )
[visibility] name [(parameter-list)] [: return-type]
[{property-string}]
Diagrammi
essenziali
Diagrammi
reali
Astrazione tecnologica
e/o
implementativa
Dettagli tecnologici
e/o
implementativi
leaf, query, sequential, guarded, concurrent
parameter-list
[direction] name : type [= default-value]
direction
in, out, inout.
default
© Renato Conte - UML: CLASSI e OGGETTI - 9/100
© Renato Conte - UML: CLASSI e OGGETTI - 10/100
Marcatori di visibilità
+
public visibility
-
private visibility
#
protected visibility
~
package visibility
© Renato Conte - UML: CLASSI e OGGETTI - 11/100
...altri marcatori
/
Derived
$
Static (non standard
preferibile la sottolineatura )
*
Abstract (non standard )
© Renato Conte - UML: CLASSI e OGGETTI - 12/100
class-scope
-
instance-scope
ATM card
cardID: integer
class-scope
(static)
UltimaCardID: integer = 0
PIN: String
dataEmissione: date
scadenza: date
limitePrelievo: integer
stato: statoV {attiva, smarrita, ...}
Principali relazioni tra le classi
• Associazioni (associations) sono relazioni strutturali
• Generalizzazioni (generalizations) sono relazioni di
ereditarietà.
• Composizione e Aggregazione (composition and
aggregation) speciali relazioni strutturali
• Dipendenza (dependency)
• Realizzazioni (realizations) una relazione tra una
specificazione e la sua implementazione
© Renato Conte - UML: CLASSI e OGGETTI - 13/100
© Renato Conte - UML: CLASSI e OGGETTI - 14/100
Associazioni
molteplicità
molteplicità
Associazioni
direzione e nome
Società
1
Lavora per
datoreDiLavoro
* Persona
impiegato
ruoli
© Renato Conte - UML: CLASSI e OGGETTI - 15/100
© Renato Conte - UML: CLASSI e OGGETTI - 16/100
Molteplicità nelle associazioni
(1)
lower-bound .. upper-bound
1..4
ClasseA
Molteplicità nelle associazioni
Employee
*
Secretary
*
(2)
worksFor
Company
1..**
Manager
supervisor
* ClasseB
Company
Office
Illimitato:
da zero a “molti”
Person
BoardOfDirectors
0..1
allocatedTo
* Employee
** BoardOfDirectors
0,3..8
boardMember
© Renato Conte - UML: CLASSI e OGGETTI - 17/100
Molti-a-uno ( Many-to-one )
© Renato Conte - UML: CLASSI e OGGETTI - 18/100
Molti-a-uno ( significato con istanza )
• Una società ha molti dipendenti
• Un dipendente può lavorare solo per una società.
Impiegato
*
LavoraPer
Società
• Una società può avere zero dipendenti
• Non è possibile per un dipendente non “dipendere”
da una società
Impiegato
GambaDiLegno
Employee
*
worksFor
Ladri&Affini
Company
Pippo
relazione parziale (zero sottinteso)
Società
Topolino
P&P
Investigazioni S.p.a
sottinteso 1: relazione totale
© Renato Conte - UML: CLASSI e OGGETTI - 19/100
© Renato Conte - UML: CLASSI e OGGETTI - 20/100
Molti-a-molti ( Many-to-many )
• Una segretaria può lavorare per molti dirigenti
One-to-one
• Un dirigente può avere molte segretarie
• For each company, there is exactly one board of
directors
• Alcuni dirigenti potrebbero avere nessuna segretaria.
• A board is the board of only one company
• Una segretaria deve per forza avere almeno un
dirigente
• A company must always have a board
relazione parziale
• A board must always be of some company
relazione totale
Company
Secretary
*
1.. *
BoardOfDirector
Manager
supervisor
© Renato Conte - UML: CLASSI e OGGETTI - 21/100
Example: Flights and bookings
– A booking is always for exactly one passenger
• no booking with zero passengers
• a booking could never involve more than one
passenger.
© Renato Conte - UML: CLASSI e OGGETTI - 22/100
Voli e prenotazioni: soluzione ?
Passeggero
Volo
cognome
nome
numero
?
– A Passenger can have ten Bookings
• a passenger could have no bookings at all
– A Flight can have 250 Bookings
– A booking have a cost and a date
© Renato Conte - UML: CLASSI e OGGETTI - 23/100
Prenotazione
dataPrenotazione
costo
© Renato Conte - UML: CLASSI e OGGETTI - 24/100
Classe d’associazione ( association class )
Passeggero
Associazioni qualificate ( qualified associations )
Volo
1..250
0..10
cognome
nome
numero
Prenotazione
dataPrenotazione
costo
qualificatori
64
1..N
Passeggero
Volo
Prenotazione
1..250
0..10
cognome
nome
dataPrenotazione
costo
numero
© Renato Conte - UML: CLASSI e OGGETTI - 25/100
Associazione ternaria con classe d’associazione
conosce
© Renato Conte - UML: CLASSI e OGGETTI - 26/100
Associazioni ricorsive (o riflessive)
1..*
sposata
LinguaggioDiProgrammazione
moglie 0..1
*
Programmatore
assegnatoA
1..*
sviluppatoCon
utilizza
1..10
Sviluppo
dataInizio
dataFine
ModuloSW
© Renato Conte - UML: CLASSI e OGGETTI - 27/100
Persona
capo
0..1
marito
1..*
operaio
dirige
© Renato Conte - UML: CLASSI e OGGETTI - 28/100
Navigabilità nelle associazioni
– Le associazioni sono per default con “direzione non
specificata” per i diagrammi ad alto livello o essenziali.
– E’ possibile indicare la direzione di una associazione
(navigabilità) aggiungendo una freccia alla estremità
della linea.
– Se si vuol indicare l’impossibilita’ della navigazione in
una direzione si inserisce un simbolo di blocco
NodoDiAlberoBinario
Dipendenze
dependency
radice
0..1
figlio
0..2
haSottoalbero
© Renato Conte - UML: CLASSI e OGGETTI - 29/100
© Renato Conte - UML: CLASSI e OGGETTI - 30/100
Dipendenze
Una dipendenza mostra che una classe usa
un’altra classe. Un cambiamento nella classe
indipendente influirà l’altra.
Account
Money
...
accountHolder: String
interestRate: int
Generalizzazione
addInterest()
setOverdraftLevel()
deposit(cash: Money)
© Renato Conte - UML: CLASSI e OGGETTI - 31/100
© Renato Conte - UML: CLASSI e OGGETTI - 32/100
Generalizzazione ( specializzazione, ereditarietà )
(1)
Specializzazione (2)
Una relazione tassonomica tra un elemento più generale ed uno più specifico
Il discriminatore (discriminator) è una etichetta che
descrive il criterio utilizzato per la specializzazione.
superclasse
classe generica
Parent
Animal
“generalizzazione implica
sostituibilità”
IS-A
Animal
typeOfFood
habitat
Child
AquaticAnimal
classe derivata
LandAnimal
Carnivore
Herbivore
classe specializzata
© Renato Conte - UML: CLASSI e OGGETTI - 33/100
© Renato Conte - UML: CLASSI e OGGETTI - 34/100
Discriminatori multipli
Specializzazione: stili grafici
Animal
Shape
habitat
Polygon
Ellipse
AquaticAnimal
Spline
typeOfFood
LandAnimal
typeOfFood
Shape
AquaticCarnivore
Polygon
Ellipse
AquaticHerbivore LandCarnivore
LandHerbivore
Spline
© Renato Conte - UML: CLASSI e OGGETTI - 35/100
© Renato Conte - UML: CLASSI e OGGETTI - 36/100
Ereditarietà multipla (1)
Ereditarietà multipla (2)
Animal
Vehicle
venue
power
{overlapping}
WindPowered
Vehicle
{overlapping}
MotorPowered
Vehicle
Land
Vehicle
Water
Vehicle
AquaticAnimal
AquaticCarnivore
Truck
LandAnimal
AquaticHerbivore
Carnivore
LandCarnivore
Herbivore
LandHerbivore
Sailboat
© Renato Conte - UML: CLASSI e OGGETTI - 37/100
© Renato Conte - UML: CLASSI e OGGETTI - 38/100
Classi astratte, tipi, interfacce
Interfacce
Abstract classes, Types, Interfaces
«type»
SomeType
typeOfFood
habitat
venue
power
I tipi non hanno implementazione
Usati per i “built in types” , per es. come int.
GestoreEvento
ActionListener
«interface»
SomeFace
Stabiliscono un contratto
(un obbligo) col cliente
Le interfacce hanno solo dichiarazioni pubbliche
SomeClass
{abstract}
Le classi astratte non hanno istanze
(Le classi astratte pure C++ sono simili alle
interfacce Java)
Il nome della classe in corsivo
qualifica la classe astratta
GestoreEvento
«interface»
ActionListener
actionPerformed()
...
...
actionPerformed()
...
realizzazione
«abstract»
SomeClass
© Renato Conte - UML: CLASSI e OGGETTI - 39/100
© Renato Conte - UML: CLASSI e OGGETTI - 40/100
Interfacce
Interfacce: notazioni equivalenti
• Una interfaccia descrive una porzione del
comportamento visibile di un insieme di oggetti
• Una interfaccia è simile ad
una classe, solo che non
possiede attributi e metodi
implementati
Machine
Cashier
StoreX
Person
-storeId: Integer
-POSlist: List
Cashier
ATM
Machine
Withdraw( )
Deposit( )
+create()
<<interface>>
«interface»
Person
+login(UserName, Passwd)
Store
+find(StoreId)
Employee
ATM
Cashier
+getPOStotals(POSid)
+getPOStotals(POSid)
+updateStoreTotals(Id,Sales)
+updateStoreTotals(Id,Sales)
+get(Item)
Employee
+get(Item)
realizzazione
© Renato Conte - UML: CLASSI e OGGETTI - 41/100
Interfacce: esempio con dipendenze
© Renato Conte - UML: CLASSI e OGGETTI - 42/100
Interfacce: esempio con dipendenze
inputStream
ISensor
TheftAlarm
dipendenza d’uso
realizzazione
socket
{ file must exist }
FileReader
ProximitySensor
ClassFile
dipendenza
realizzazione
FileWriter
ProximitySensor
TheftAlarm
ISensor
© Renato Conte - UML: CLASSI e OGGETTI - 43/100
outputStream
{ file must not be locked }
© Renato Conte - UML: CLASSI e OGGETTI - 44/100
Classi astratte ( notazioni equivalenti )
Classi generiche ( template )
font corsivo
Shape
T
d: Dimension
font corsivo per il metodo astratto
draw()
Priority Queue
{Print Job}
Shape
Print Queue
insert(T)
{abstract}
remove(T)
Circle
<<abstract>>
Square
Shape
draw()
draw()
© Renato Conte - UML: CLASSI e OGGETTI - 45/100
Classi generiche: diverse realizzazioni
FArray
© Renato Conte - UML: CLASSI e OGGETTI - 46/100
Package
• Un package è un meccanismo generale
per organizzare elementi in gruppi
omogenei.
T,
k:integer
Package A
« bind » (T→Address, k→24)
T [0..k]
a realization
( part dependency and part generalization )
• Un packages può contenere altri
package.
AddressList
FArray<Point,22>
© Renato Conte - UML: CLASSI e OGGETTI - 47/100
• Dipendenze tra package si indicano con
una freccia (vedi figura).
• Vi sono delle regole di visibilità per i
componenti dei package.
Package B
© Renato Conte - UML: CLASSI e OGGETTI - 48/100
Package: dipendenze
Package: dipendenze
Customer
Controller
Banking::CheckingAccount
«access»
«access»
«access»
«access»
Diagram
Elements
«access»
«access»
Banking
Domain
Elements
CheckingAccount
© Renato Conte - UML: CLASSI e OGGETTI - 49/100
Graphics
Core
© Renato Conte - UML: CLASSI e OGGETTI - 50/100
Visibilità tra package
Package
D
Generalizzazione e dipendenze tra package.
Compiler
A
F
B
JavaCompiler
Java
© Renato Conte - UML: CLASSI e OGGETTI - 51/100
C
E
© Renato Conte - UML: CLASSI e OGGETTI - 52/100
Associazione e generalizzazione: commenti
– Le associazioni descrivono relazioni che esistono
tra istanze a run time.
Aggregazione
e
Composizione
• Quando si disegna un diagramma degli oggetti,
generato da un diagramma delle classi, ci deve
essere un’istanza per entrambe le classi
congiunte dalla associazione.
– Le generalizzazioni descrivono relazioni tra classi
nei diagrammi delle classi.
• Queste non appaiono affatto nei diagrammi
degli oggetti.
© Renato Conte - UML: CLASSI e OGGETTI - 53/100
Aggregazione e Composizione
Una speciale forma di associazione che specifica una relazione tra
la parte intera (aggregato) ed i suoi componenti (parti)
© Renato Conte - UML: CLASSI e OGGETTI - 54/100
Aggregazione e Composizione (2)
*
Polygon
Polygon
+ vertex
3..∗
Contains
{ordered}
Point
composition
aggregation
1
Graphics
Bundle
Point
color
texture
© Renato Conte - UML: CLASSI e OGGETTI - 55/100
-bundle
GraphicsBundle
color
texture
density
© Renato Conte - UML: CLASSI e OGGETTI - 56/100
Aggregazione (Aggregation)
Composizione (Composition)
– Una composizione è una forma forte di aggregazione
isPartOf
• Se l’aggregato viene distrutto, anche le sue parti
vengono distrutte
*
1..*
Itinerario
Città
Building
Employee
1..*
Room
Employee
address: Address
*
1..*
Testo
Parole
Due alternative per ”Address”
© Renato Conte - UML: CLASSI e OGGETTI - 57/100
Composizione: alcune notazioni equivalenti
Address
street
municipality
region
country
postalCode
© Renato Conte - UML: CLASSI e OGGETTI - 58/100
Una gerarchia di aggregazioni (... o composizioni?)
Window
Veicolo
scrollbar[2]:Slider
title: Header
body: Panel
Window
Chassis
Carrozzeria
Window
2
scrollbar: Slider
1
title: Header
body: Panel
2
1
1
*
Slider
Header
Panel
Telaio
Motore
Transmissione
Ruote
1
© Renato Conte - UML: CLASSI e OGGETTI - 59/100
© Renato Conte - UML: CLASSI e OGGETTI - 60/100
Quando usare una aggregazione od una composizione
• Come regola generale, un' associazione è una
aggregazione/composizione se è vero che:
– si può stabilire
• le parti sono “pezzi” dell’aggregato
• oppure l’aggregato è “composto” di parti
– quando qualcosa che possiede o controlla
l’aggregato, allora controlla anche le sue parti
Propagazione
– Un meccanismo dove un’operazione su un aggregato è implementata
facendo eseguire quella operazione sulle sue parti
– Allo stesso tempo, le proprietà delle parti si propagano spesso
indietro verso l’aggregato
– La propagazione sta all’aggregazione come l’ereditarietà sta alla sua
generalizzazione.
• La maggior differenza è:
– l’ereditarietà è un meccanismo implicito
– la propagazione deve essere programmata quando richiesta
• Si tratta di una aggregazione se le parti possono
esistere anche se l’aggregato viene a mancare
Polygon
3..*
LineSegment
• Si tratta di una composizione se le parti cessano di
esistere quando l’aggregato viene distrutto
© Renato Conte - UML: CLASSI e OGGETTI - 61/100
aggregato
parti
© Renato Conte - UML: CLASSI e OGGETTI - 62/100
Composizione e classi annidate: differenze
CompositeClass
DeclaringClass
Diagramma degli oggetti
PartClass
NestedClass
© Renato Conte - UML: CLASSI e OGGETTI - 63/100
© Renato Conte - UML: CLASSI e OGGETTI - 64/100
Object Diagram or Instance Diagram
An object diagram is a graph of instances, including
objects and data values.
Istanze o oggetti (1)
triangle
triangle: Polygon
A static object diagram is an instance of a class
diagram; it shows a snapshot of the detailed
state of a system at a point in time.
The use of object diagrams is fairly limited, mainly
to show examples of data structures.
center : Point = (2,2)
vertices : Point* = ((0,0), (4, 0), (2,4))
borderColor : Color = black
fillColor : Color = white
triangle: Polygon
: Polygon
dal manuale di riferimento di UML v.1.5
© Renato Conte - UML: CLASSI e OGGETTI - 65/100
Istanze o oggetti (2)
: Frame
attendee: Person
© Renato Conte - UML: CLASSI e OGGETTI - 66/100
Istanze e ruoli
Person
: Frame
Parent
Istanza anonima attiva e passiva
instanceName / ClassifierRoleName [: ClassifierName ]
Istanza con nome
steve: Person
: Card
shoeSize = 42
Charlie / Parent
Charlie / Parent : Person
Attributi con valore
multiObject
© Renato Conte - UML: CLASSI e OGGETTI - 67/100
© Renato Conte - UML: CLASSI e OGGETTI - 68/100
Diagramma degli oggetti
Un link è una istanza di una associazione (nello stesso modo
in cui affermiamo che un oggetto è una istanza di una
classe) Pat: Employee
Diagramma degli oggetti ...
primaV: Valutazione
pippo: Studente
voto = 30
nome = ”Pippo”
: Valutazione
Wayne: Employee
OOCorp: Company
OOCorp's Board
Ali: Employee
programmazione: Corso
paperino : Studente
: Valutazione
nome = ”Paperino”
: Valutazione
Carla: Employee
UML inc: Company
UML inc's Board
: Studente
: Valutazione
: Studente
: Valutazione
: Corso
Terry: Employee
© Renato Conte - UML: CLASSI e OGGETTI - 69/100
... relativo diagramma delle classi
Studente
© Renato Conte - UML: CLASSI e OGGETTI - 70/100
Esempio diagramma degli oggetti con aggregazione
: Family
Corso
*
*
cognome
nome
codice
Valutazione
data
voto
Joe : Person
© Renato Conte - UML: CLASSI e OGGETTI - 71/100
husband
wife
Jill : Person
© Renato Conte - UML: CLASSI e OGGETTI - 72/100
Persone e voli
pilota
Esempi riassuntivi
equipaggio
Volo
Persona
1..*
0..* assistenteDiVolo
© Renato Conte - UML: CLASSI e OGGETTI - 73/100
© Renato Conte - UML: CLASSI e OGGETTI - 74/100
Association - Multiplicity
Alberi binari
• A cricket team has 11 players. One of them is the captain.
• A player can play only for one Team.
NodoDiAlberoBinario
0..1
• The captain leads the team members.
radice
figlio
Team
Member
10
0..2
Captain
Player
1
0..1
11
1
member of
Team
0..1 radice
1
Captain
NodoDiAlberoBinario
0..1 radice
Leads
figlioDestro
© Renato Conte - UML: CLASSI e OGGETTI - 75/100
0..1
0..1
figlioSinistro
© Renato Conte - UML: CLASSI e OGGETTI - 76/100
Matrimonio
Agenda
Person
name
placeOfBirth
dateOfBirth
placeOfDeath
dateOfDeath
Address Book
child
*
-
Name: char
+
+
+
+
Add Contact() : void
Add Group() : void
Sort() : void
Search() : void
*
*
+
+
Add Contact() : void
Add Group() : void
1..*
Woman
femalePartner
child
Man
0..1
*
Contact
-
{ AND }
*
Union
0..1
placeOfMarriage
dateOfMarriage
dateOfDivorce
parents
Name: char
Email Address: char
Cell Phone: int
Fax: int
Address Line 1: char
Address Line 2: char
City/Town/Suburb: char
Post Code: char
State/Province: char
Country: char
*
© Renato Conte - UML: CLASSI e OGGETTI - 77/100
© Renato Conte - UML: CLASSI e OGGETTI - 78/100
Biblioteca
Organismo
*
Organismo
VolumeFisico
copiaCorrisp
*
Apparato
{Sistema}
0..1
*
* 0..1
childmalePartner
*
*
Address Book Group
Organo
Tessuto
Cellula
*
Libro
titolo : string
1..*
1..*
HaInPrestito
HaScritto
dal : Data
Animale
Muscolare
Fegato
Vegetale
Digerente
Stomaco
HaPrenotato
dal : Data
al : Data
Ghiandolare
Respiratorio
Polmoni
nome : string
HaInPrestito
0..1
*
Cuore
*
Autore
HaLetto
HaLetto
HaPrenotato
Lettore
dal : Data
nome : string
prenotazione()
*
Circolatorio
LettoreOccasionale
© Renato Conte - UML: CLASSI e OGGETTI - 79/100
Abbonato
nTessera : int
© Renato Conte - UML: CLASSI e OGGETTI - 80/100
Sistema universitario: use case
Register for courses
Sistema universitario:
registrazioni
Student
Maintain curriculum
Registrar
Select courses to teach
Professor
© Renato Conte - UML: CLASSI e OGGETTI - 81/100
Sistema di registrazione universitario
© Renato Conte - UML: CLASSI e OGGETTI - 82/100
Sist. di registrazione universitario: Data Base
(vari package)
DBCourse
1
UniversityArtifacts
+ saveCourse()
People
TransactionManager
+ saveCourse()
Database
DBStudent
dipendenze
dipendenze
DBProfessor
© Renato Conte - UML: CLASSI e OGGETTI - 83/100
© Renato Conte - UML: CLASSI e OGGETTI - 84/100
Sist. di registrazione universitario: UniversityArtifacts
Sist. di registrazione universitario: People
Course
RegistrationForm
(from Interfaces)
<<UniversityArtifacts>>
People
- name
- phone
- address
- IDNumber
+primary
- name : CString
- description : CString
- creditHours : short
- timeOfDay
- location
4
+alternate
Course
2
i metodi
get() e set()
sugli attributi
sono impliciti
- name
- program
- location
CourseMaintenanceForm
(from Interfaces)
+ addStudent()
+ addProfessor()
+ isFull() : return
Student
Professor
- major
- gradYear
- tenureStaus
?
4
1
teaches
4
1
1
+ verifyID()
+ untitled()
+ setID()
+ createCourse()
+ setCourseInfo()
...
CourseSelectionForm
1..4
+ create()
+ getCourseInfo()
1
+ save()
+ getCourseNumber() 1..n
+ getName()
+ getDescription()
+ getTimeOfDay()
...
*
Add/DropForm
(from Interfaces)
1
Curriculum
RegistrationUser
NewCourseForm
1
1..*
registersFor
0..4
CourseOffering
registersFor
(from Interfaces)
1
(from Interfaces)
3..10
*
+ Set name()
+ Set description()
+ Set time and day()
...
- ddaysOffered
- timeOfDay
- location
1
teaches
1..4
3..10
(from People)
- name
- phone
- address
...
+ addStudent()
...
© Renato Conte - UML: CLASSI e OGGETTI - 85/100
Sistema bancomat (ATM)
© Renato Conte - UML: CLASSI e OGGETTI - 87/100
© Renato Conte - UML: CLASSI e OGGETTI - 86/100
Banking System
gestisce
«entity»
Bank
«entity»
ATM info
gestisce
ha
identifica
1..*
1..*
accede a
*
cardID: String
PIN: String
dataEmissione: date
scadenza: date
limitePrelievo: integer
stato: statoV {attiva, smarrita, ...}
*
1..*
«entity»
ATM card
ATM card
«entity»
Transazione
1..* possiede
0..*
«entity»
*
«entity»
Cliente
possiede
Dettagli per la classe ATM card
(soli attributi )
modifica
1..* «entity»
Conto corrente
Validaz.PIN
1,2
Estratto conto
Prelievo
Trasfer. conto
© Renato Conte - UML: CLASSI e OGGETTI - 89/100
Studio della struttura dati “Grafo” (1)
A
© Renato Conte - UML: CLASSI e OGGETTI - 90/100
Studio della struttura dati “Grafo” (2)
Grafo: una soluzione
informatica operativa
E
D
C
Grafo
A
&C
B
&A
ListaDiAdiacenza
F
B
ListaDiAdiacenza
Grafo: schema dal punto di vista
logico
0..1
* Vertice
C
next 0..1
D
CellaVertice
arrivaA
Grafo
* Arco *
*
{ AND }
© Renato Conte - UML: CLASSI e OGGETTI - 91/100
&F
0..1
E
ParteDa>
ArrivaA>
&C
*
0..1
0..1
CellaArco
next 0..1
F
&B
&D
© Renato Conte - UML: CLASSI e OGGETTI - 92/100
Design pattern iteratore (da un reverse engineering)
Item
(List< Employee* >)
Iterator
Item
List
Item
Design pattern iteratore
Item
ReverseListIterator
ListIterator
tratto dal testo
Item
SkipList
(Iterator< Employee* >)
“Design Patterns”: Gamma, Helm, johnson, Vlissides
Item
Item
SkipListIterator
da un reverse engineering
Item
ricavato dal codice associato al testo
AbstractList
Item
IteratorPtr
ListTraverser
(ListTraverser<
Employee* >)
1
-_iterator
1
bool
Item
(ListIterator< Item >)
PrintNEmployees
-_iterator
Item
Coord
FilteringListTraverser
© Renato Conte - UML: CLASSI e OGGETTI - 93/100
Design pattern iteratore (codici C++)
Design pattern iteratore (particolare)
Iterator
Item
Iterator() : Iterator
First() : void
Next() : void
IsDone() : bool
CurrentItem() : Item
Item
ListIterator
_current : long
(Iterator< Employee* >) ListIterator(aList : const List*) : ListIterator
First() : void
Next() : void
IsDone() : bool
CurrentItem() : Item
SkipListIterator
Item
ReverseListIterator
© Renato Conte - UML: CLASSI e OGGETTI - 94/100
Item
ReverseListIterator(aList : const List*) : ReverseListIterator
First() : void
Next() : void
IsDone() : bool
CurrentItem() : Item
Item
SkipListIterator(aList : const List*) : SkipListIterator
First() : void
Next() : void
IsDone() : bool
CurrentItem() : Item
© Renato Conte - UML: CLASSI e OGGETTI - 95/100
template <class Item>
class ListIterator : public Iterator<Item>
{
public:
ListIterator(const List<Item>* aList);
virtual void First();
virtual void Next();
virtual bool IsDone() const;
virtual Item CurrentItem() const;
template <class Item>
class Iterator
private:
{
const List<Item>* _list;
public:
int _current;
virtual void First() = 0;
};
virtual void Next() = 0;
virtual bool IsDone() const = 0;
virtual Item CurrentItem() const = 0;
protected:
Iterator();
};
© Renato Conte - UML: CLASSI e OGGETTI - 96/100
costrutto
Associazione
Association
Composizione e
Aggregazione
Composition and
Aggregation
Riassunto delle relazioni
Annidamento
Nesting
Generalizzazione
Generalization
descrizione
sintassi
Una relazione tra due o più classificatori che
implica una connessione tra le loro istanze
Una speciale forma di associazione che
specifica una relazione tra la parte intera
(aggregato) ed i suoi componenti (parti)
Una relazione tra due o più classi: all’interno
di una classe vengono dichiarate altre classi
Una relazione tassonomica tra un elemento
più generale ed uno più specifico
Una relazione tra due elementi, nei quali il
cambiamento nell’elemento indipendente può influire
nell’elemento dipendente
Dependency
Dipendenza
Realizzazione
Realization
Una relazione tra una specificazione e la sua
implementazione
© Renato Conte - UML: CLASSI e OGGETTI - 97/100
Bibliografia
Grady Booch, James Rumbaugh, Ivar Jacobson:
The Unified Modeling Language User Guide,
Addison Wesley (1999).
Grady Booch, James Rumbaugh, Ivar Jacobson:
The Unified Modeling Language Reference Manual,
Addison Wesley (1999).
Martin Fowler:
UML Distilled: A Brief Guide to the
Standard Object Modeling Language, Third Edition
Addison Wesley (2003) - ISBN : 0-321-19368-7
© Renato Conte - UML: CLASSI e OGGETTI - 99/100
© Renato Conte - UML: CLASSI e OGGETTI - 98/100
Riferimenti nel Web
OMG UML - www.omg.org/uml/
• Reference manual UML 1.5
• UML 2.1 Superstructure Specification
• UML 2.2 Superstructure Specification
UML: Tutorial e link:
www.kobryn.com
© Renato Conte - UML: CLASSI e OGGETTI - 100/100
Scarica

Diagrammi delle classi e degli oggetti