Ereditarietà e polimorfismo

Nota: le classi viste a lezione, necessarie per risolvere gli esercizi che seguono, sono contenute nel file ShapeHierarchy.jar messo a disposizione sulla pagina web del corso e già installato sui computer del laboratorio. Se volete installare questo file anche su un altro computer, ricordatevi di inserire la corrispondente directory nella variabile di ambiente CLASSPATH.

  1. Scrivere la classe ReadArrayOfShapes che permetta di introdurre da tastiera le figure che compongono un array di Shape di 15 elementi. Dopo aver letto tutte le figure, usare il metodo draw() per stampare l'array contenente le figure lette. L'introduzione delle singole figure deve permettere di scegliere quale figura introdurre e quindi adeguare le proprie richieste di conseguenza. I dati introdotti da tastiera saranno quindi usati per istanziare la figura corrispondente.

    Esempio di esecuzione:

    Shape 1 (Circle [C], Square [S] or Rectangle [R]): R
    Shape 1 is a Rectangle, please introduce:
    Height: 25
    Width: 7
    Shape 2 (Circle [C], Square [S] or Rectangle [R]): C
    Shape 2 is a Circle, please introduce:
    Radius: 3.14
    ...
    Shape 15 (Circle [C], Square [S] or Rectangle [R]): S
    Shape 15 is a Square, please introduce:
    Side: 2.83
    
    [01] I'm a Rectangle! My sides are: 25.0,7.0
    [02] I'm a Circle! My radius is: 3.14
    ...
    [15] I'm a Square! My side is: 2.83

    Notare che il metodo draw() fornito si limita a visualizzare la stringa "I'm a ...", mentre la numerazione tra parentesi quadre dipende dal vostro programma. Inoltre le cifre e le lettere in neretto nell'esempio sono da interndersi introdotte da tastiera durante l'esecuzione.

  2. Riprendere il codice della classe ReadArrayOfShapes ed usarlo per scrivere la classe SearchAShape che:

    Suggerimento: usare la classe Arrays vista a lezione per ordinare l'array e per effettuare la ricerca (utilizzando rispettivamente i metodi sort() e binarySearch()).

  3. Considerare l'algoritmo di BubbleSort visto a lezione. Scrivere la classe SortArrayOfShapeByPerimeter che adatti BubbleSort a ordinare in maniera decrescente (dal più grande al più piccolo) un array di Shape considerando il perimetro (restituito dal metodo getPerimeter()) anziché l'area.

    Nota: l'array è inizializzato direttamente nel metodo main e non si potrà; far uso dei metodi della classe Arrays perché il metodo compareTo() fornito da Shape confronta le aree e non i perimetri.