Risolvere i problemi elencati sotto NELL'ORDINE IN CUI SONO ELENCATI. Non si richiede di scrivere TUTTI i programmi, ma quelli risolti devono compilare correttamente e produrre i risultati richiesti. Alla fine dell'esercitazione, copiare tutti i file prodotti in una cartella identificata dai cognomi dei componenti del gruppo, sotto serverPu/Esercizi/Lez1103. Siete invitati a completare (alcuni de)gli esercizi
fuori dall'orario di esercitazione, soprattutto se avete trovato serie
difficoltà a svolgerli. Potete mandare l'eventuale completamento
all'indirizzo guerrini@disi.unige.it.
|
Esercizio 1
Sia data l'interfaccia Solid così definita:
public interface Solid{ |
Scrivere la classe SolidPunto3D che eredita da Punto3D
ed implementa Solid. La classe
SolidPunto3D ha le stesse variabili
d'istanza di Punto3D ed un
costruttore con tre argomenti che semplicemente invoca super(). I metodi volume() e superficie() restituiscono il volume e la superficie
totale del parallelepipedo rettangolo compreso tra il punto rappresentato
dall'oggetto su cui viene invocato il metodo, e il punto origine dello spazio,
di coordinate (0,0,0).
Per testare la classe, scrivere il
metodo main che chiede all'utente tre
valori per le dimensioni (x,y,z), quindi crea un
SolidPunto3D e ne stampa volume e
superficie.
Esercizio 2
Scrivere una classe
astratta SolidoOrd che
implementa le interfacce Solid e
Comparable. La classe SolidoOrd realizza il metodo compareTo() confrontando i solidi in base al
volume.
Si vuole
ora scrivere la classe SolidPunto3DOrd che ha le stesse funzionalità di
SolidPunto3D, nonché il metodo
compareTo() come specificato per
SolidoOrd.
Scrivere infine un metodo main che prova tutte le funzionalità di SolidPunto3DOrd .
Esercizio 3
Scrivere una sottoclasse PointOrd della classe Point dell'esercitazione del 27 Febbraio che implementi l'interfaccia Comparable e confronti i punti in base alla loro distanza dall'origine. Chiedete all'utente di inserire 5 coppie di coordinate e generate 5 punti (come oggetti PointOrd). Tramite il metodo compareTo(), individuate il primo e l'ultimo punto nell'ordinamento e stampatene le coordinate.
Esercizio 4
Scrivere una sottoclasse
di Razionale
che implementi l'interfaccia Comparable.
Per eseguire il confronto calcolate il valore in virgola mobile equivalente ai
due numeri razionali da confrontare, quindi confrontateli usando un errore
accettabile minore di 0.0001.
Scrivete infine una classe
che verifichi la vostra implementazione.
Esercizio 5
Scrivete una gerarchia di
ereditarietà per figure geometriche. La gerarchia dovrebbe prevedere una
superclasse astratta Shape
da cui derivano le classi TwoDimensionalShape e ThreeDimensionalShape, anch'esse classi
astratte, e le sottoclassi concrete Sfera, Parallelepipedo, Cubo, Rettangolo, Quadrato, Cerchio.
Utilizzate un metodo abstract print per visualizzare il tipo e le
dimensioni di ogni classe. Prevedete anche i metodi perimetro, area
e volume, in modo che questi calcoli
possano essere effettuati, quando definiti, per gli oggetti delle sottoclassi
concrete della gerarchia.
Scrivete infine un programma per collaudare la
gerarchia Shape e i suoi
metodi.
Esercizio 6
Modificare la classe
Libro
dell'esercitazione del 4 Marzo in modo tale che implementi
l'interfaccia Comparable e che
implementi il metodo compareTo() confrontando
i libri in base al valore dell'attributo numPagine.
Ridefinire l'implementazione di
compareTo() nella sottoclasse
Vocabolario
in modo tale che confronti
i vocabolari in base al valore dell'attributo numDefinizioni.
Scrivere quindi una classe OrdinaLibri che riceva in input una lista di
libri (alcuni dei quali possono essere vocabolari), li ordini e stampi il risultato.
Oltre ad utilizzare l'interfaccia Comparable, si deve utilizzare la classe
VettoreOrdinato.