LABORATORIO DI PROGRAMMAZIONE DI STRUTTURE DATI
ESERCIZI SU EREDITARIETÀ, CLASSI ASTRATTE E INTERFACCE --- GRUPPO 2
13 Marzo 2002

Esercizio 1

Sia data l'interfaccia Solid così definita:

     
    public interface Solid{

        double volume();
        double superficie();
    }

    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.

Soluzione: SolidPunto3D.java , TestSolidPunto3D.java


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 .

Soluzione: SolidoOrd.java , TestSolidPuntoOrd.java


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.

Soluzione


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.

Soluzione


Esercizio 6

Modificare la classe Lavoratore dell'esercitazione del 6 Marzo in modo tale che implementi l'interfaccia Comparable e che implementi il metodo compareTo() confrontando i lavoratori in base al valore dell'attributo stipendio.
Ridefinire l'implementazione di compareTo() nella sottoclasse
LavoratoreConStraordinarioPagato in modo tale che confronti i lavoratori con straordinario pagato in base al valore della somma effettivamente percepita (tenendo cioe' conto della retribuzione dello straordinario).
Scrivere quindi una classe OrdinaLavoratori che riceva in input una lista di lavoratori (alcuni dei quali possono essere con straordinario pagato), li ordini e stampi il risultato.
Oltre ad utilizzare l'interfaccia Comparable, si deve utilizzare la classe VettoreOrdinato.