Progettazione del Software - A.A. 2008/09
Esercitazione 2
Esercizio 1.
Gli oggetti di classe Pesce sono caratterizzati da:
- campi dati (protetti o privati, secondo necessità):
nome
(String);
peso
(float);
colore
(stringa);
vel
(int) che rappresenta una misura della distanza percorsa con un colpo di pinna posteriore;
mare
(boolean) che vale true
se e solo se l'esemplare è un pesce di mare.
stile
(char), che rappresenta lo stile di nuotata.
- metodi pubblici:
- un costruttore a 5 argomenti che inizializza tutti i campi dato privati eccetto
stile
,
al quale assegna il carattere '.';
isMare()
, che restituisce true
se e solo se mare è true
;
isFiume()
, che restituisce true
se e solo se mare è false
;
getNome()
, che restituisce il nome dell'esemplare;
getPeso()
, che restituisce il peso dell'esemplare;
getColore()
, che restituisce il colore dell'esemplare.
nuota()
, che fornisce una rappresentazione grafica in ASCII art dello stile di nuotata del pesce.
Il metodo restituisce una stringa costituita da n
ripetizioni di stile
,
dove n=1+(100*vel/INT(peso/2))
, INT(x)
essendo la parte intera di
x
.
Alcuni pesci, Salmone, PescePalla, PesceGatto, sono particolari.
- Il Salmone:
- si distingue per lo stile di nuotata contrassegnato dal carattere '/';
- ha un campo dati aggiuntivo fiume (stringa), che ne rappresenta il fiume d'origine,
- e due metodi pubblici:
- un costruttore a 6 argomenti, pressoché identico a quello di
Pesce, che, in più, assegna al campo fiume il valore di un parametro
preso in input (e assegna il carattere opportuno a
stile
);
getFiume()
che restituice il valore del campo fiume.
- Il PescePalla:
- si distingue per lo stile di nuotata contrassegnato dal carattere ')';
- ha un campo dati aggiuntivo spaventato (boolean),
- e i seguenti metodi pubblici:
- un costruttore a 5 argomenti analogo a quello di Pesce;
isSpaventato()
che restituice il valore del campo spaventato.
spaventa()
che assegna true
al campo spaventato.
tranquillizza()
che assegna false
al campo spaventato.
-
Infine, il metodo
nuota()
restituisce la stringa vuota quando l'esemplare è spaventato
(poiché si gonfia e non è più in grado di nuotare).
- Il PesceGatto:
- si distingue per lo stile di nuotata contrassegnato dal carattere '>';
- ha un costruttore a 5 argomenti analogo a quello della classe Pesce;
- ha un metodo
nuota()
che restituisce stringhe di lunghezza doppia rispetto
a quello della classe Pesce (perché è più agile degli altri).
Parte 1.
Realizzare la classe Pesce ed una classe ServizioMari contenente un metodo statico:
Pesce[] pescaMare(Pesce[] a)
che, dato un array a
di oggetti di classe Pesce,
restituisce un nuovo array contenente tutti gli esemplari di mare contenuti in a
. Inoltre,
realizzare una classe ClienteMare contenente un opportuno metodo main
che sia cliente di entrambe le classi
Pesce e ServizioMari. Quindi compilare, eseguire e verificare la correttezza del codice prodotto.
Parte 2.
Realizzare le classi Salmone, PescePalla e PesceGatto, secondo le specifiche sopra riportate.
Parte 3.
Modificare il metodo main()
della classe ClienteMare, facendogli:
- costruire un array,
pesci
, di oggetti di classe Pesce, contenente esempi di
istanze di tutte le classi della gerarchia appena realizzata (ovvero Pesce, Salmone, PescePalla, PesceGatto),
-
costruire, da
pesci
, un nuovo array pesciMare
contenente solo i pesci di mare contenuti anche in
pesci
(comportamento analogo a pescaMare()
);
-
scorrere l'array
pesci
, stampandone per ciascun elemento: nome, peso, colore e stringa
rappresentativa dello stile di nuotata.
Esercizio 2.
Si vuole realizzare un software per calcolare il numero di mattonelle necessarie alla copertura di pavimenti.
Ciascuna Mattonella è caratterizzata da
-
un campo dati protetto
prezzoUnitario
(float) che rappresenta il prezzo di una singola mattonella
per unità di superficie;
-
un metodo pubblico
float area()
che restituisce la superficie della mattonella;
-
un metodo pubblico
float perimetro()
che restituisce il perimetro della mattonella;
-
un metodo pubblico
float prezzo()
che restituisce il prezzo (prezzoUnitario * area)
della mattonella;
Esistono tre tipi di mattonelle: triangolari equilatere (prezzo unitario: 1,5), quadrate (prezzo unitario: 1,8)
e rettangolari (prezzo unitario: 2,1).
Una mattonella triangolare è caratterizzata dalla lunghezza di un suo lato (float),
mentre quelle rettangolari sono caratterizzate dalla lunghezza della base e dall'altezza. Ovviamente,
una mattonella quadrata è anche rettangolare. Ciascuna mattonella ha
una propria formula per il calcolo dell'area e del perimetro, che dipende dalla sua forma.
Giustapponendo mattonelle dello stesso tipo, si crea il pavimento. A causa della forma delle
mattonelle, è possibile (e molto frequente) che la superficie creata con le mattonelle sia leggermente
maggiore di quella che si vuole ricoprire.
Parte 1.
Realizzare la classe astratta Mattonella ed una classe Architetto contenente i seguenti
metodi pubblici statici:
-
float quantoCosta(float s, Mattonella m)
, che restituisce il prezzo
complessivo per l'acquisto del numero minimo di mattonelle tale da ricoprire la superficie
s
(il prezzo è calcolato moltiplicando il numero di mattonelle per il prezzo di
ciascuna mattonella, restituito dal metodo prezzo()
);
-
float quantiScarti(float s, Mattonella m)
, che restituisce la differenza tra la
superficie coperta dal numero minimo di mattonelle calcolato come sopra ed
s
;
-
float quanteFughe(float s, Mattonella m)
, che restituisce la somma dei perimetri del
numero minimo di mattonelle necessarie alla copertura di s
;
Verificare che il codice compili correttamente.
Parte 2.
Realizzare le classi MattonellaTriangolare, MattonellaRettangolare, MattonellaQuadrata
(con opportuni costruttori che inizializzano la lunghezza dei lati forniti in input ed il prezzo unitario
come specificato sopra) ed una nuova classe AppMattone con metodo main()
che fornisca un
esempio di istanziazione di ciascuna classe derivata da Mattonella e di invocazione
dei metodi quantoCosta(), quantiScarti(), quanteFughe()
della classe Architetto,
con gli oggetti istanziati precedentemente forniti in input (oltre a valori delle superfici scelti arbitrariamente).
Torna alla Home Page delle esercitazioni.