Esercizi

Transcript

Esercizi
Capitolo 2
Dall’idea al codice con UML 2
Esercizi introduttivi
Obiettivo
Identificare le classi per risolvere il
problema proposto
1. Valutazione di polinomi
Un polinomio, identificato da una lettera
minuscola dell’alfabeto, è dato dalla
somma di uno o più monomi.
Un monomio è caratterizzato da un
segno, un coefficiente e un grado.
Il programma deve leggere il nome del
polinomio p e il valore della variabile per
il quale si vuole calcolare il valore di p.
Valutazione di polinomi
Ad esempio, dato il polinomio
f: 3x4-5x3+2x+1,
l’utente deve inserire da tastiera
f2
e il programma deve stampare 13,
poiché
f(2)= 3 * 24 - 5 * 23 + 2 * 2 + 1.
Manca qualcosa?
Forse manca un parametro del
costruttore Polinomio, quello relativo al
nome (che è un singolo carattere), a
meno che tale nome non sia scelto
dall’applicazione
2. CAD tridimensionale
L’applicazione permette di gestire un
modello tridimensionale composto da
una serie di oggetti.
Ogni oggetto è caratterizzato da una
posizione tridimensionale, da un colore
e da un materiale.
Esistono tre oggetti di base: sfere,
parallelepipedi e tetraedri.
CAD tridimensionale
È altresì possibile avere oggetti
complessi composti da un insieme di
oggetti (a loro volta complessi o di
base).
Ad esempio, due sfere potrebbero
creare un rudimentale “pupazzo di
neve”.
CAD tridimensionale (cont.)
Deve essere possibile la creazione di
oggetti complessi, l’aggiunta di nuovi
elementi a un oggetto complesso,
l’aggiunta di nuovi oggetti al modello
tridimensionale, lo spostamento di
oggetti e la loro rotazione rispetto a un
asse (x, y, o z).
Vincoli aggiunti esplicitamente
dal libro di testo
• I parallelepipedi hanno sempre le facce
parallele ai piani cartesiani
• Il triangolo di base dei tetraedri è
sempre equilatero e (posto su un piano)
parallelo a uno dei piani identificati dagli
assi cartesiani
Vincoli aggiunti implicitamente
dal libro di testo
• Gli spostamenti degli oggetti possono
avvenire solo parallelamente a un asse
• Le rotazioni possono essere solo di
180°
Manca qualcosa?
Sì, perché il tetraedro non è univocamente
definito; è necessario aggiungere questo
vincolo:
Ogni tetraedro
• è regolare
• il suo triangolo di base ha un lato parallelo a un
asse dato
• tale lato ha una distanza da suddetto asse
minore rispetto a quella del vertice opposto
Di conseguenza
Un’istanza di Tetraedro necessita
dell’indicazione di due assi (uno
parallelo all’altezza, l’altro parallelo al
lato del triangolo che costituisce la
base)
È necessario aumentare a 2 la
molteplicità dell’attributo asse della
classe Tetraedro
Inoltre
Perché a un oggetto composto
corrisponde una posizione
tridimensionale? Il costruttore
OggettoComposto non riceve alcun
parametro al fine di inizializzare la
stessa
È opportuno ridurre a 0 l’estremo
inferiore della molteplicità
dell’associazione posizione fra le
classi Oggetto e Posizione3D
Analogamente
Perché un oggetto composto deve
ereditare gli attributi colore e materiale?
Il costruttore OggettoComposto non
riceve alcun parametro al fine di
inizializzare gli stessi
Infine
• L’operazione aggiungi della classe
astratta Oggetto viene sovrascritta nella
classe concreta OggettoComposto.
Anche le operazioni sposta e ruota
devono essere sovrascritte: perché invece
non compaiono in OggettoComposto?
0..1
[2]
3. Rivendita di auto usate
Un automezzo viene identificato dalla
targa, dal numero di telaio e da un certo
numero di caratteristiche specifiche,
quali il colore, la cilindrata, il tipo di
carburante e gli optional.
Rivendita di auto usate
Ogni automezzo è caratterizzato da una
“carta di identità” che definisce l’anno di
immatricolazione, il numero di chilometri
e la data dell’ultima revisione. Il sistema
gestisce anche camion e van, che si
differenziano dalle automobili per la
capacità di carico (quintali o persone).
Rivendita di auto usate (cont.)
Il sistema cataloga anche i clienti, con le
solite caratteristiche: nome, cognome,
indirizzo e codice fiscale.
Un cliente può stipulare uno o più
contratti per acquistare uno o più
automezzi.
Rivendita di auto usate (cont.)
Ogni contratto deve avere una data di
stipula, un ammontare, una data di
inizio validità ed eventuali dilazioni di
pagamento pattuite tra le parti.
Il sistema deve anche gestire lo storico
dei diversi automezzi, cioè la storia del
mezzo che contiene tutti i passaggi di
proprietà noti al rivenditore.
*