RELAZIONE 4 ANCARANI SILVIA OBIETTIVI: -uso interfaccie - riuso classi DESCRIZIONE DEL PROBLEMA Sviluppare un tipo di dato astratto che generi punti per costruire figure come quadrati, triangoli, sinusoidi ecc… Si dispone già dell’astrazione PointGenerator e SimplePlotter di cui sono fornite documentazione e sorgente. Creare quindi un componente SW che testi il funsionamento dell’astrazione realizzata. ANALISI La classe HouseGenerator è un’implementazione dell’interfaccia PointGenerator ed è in grado di generare una successione di punti che uniti da un plotter costituiscono una figura geometrica simile ad una casa (da cui il nome). Essendo HouseGenerator la classe che implementa la interfaccia, essa utilizza dei metodi la cui dichiarazione è contenuta nell’interfaccia stessa e che da questa prendono il nome. In altre parole PointGenerator è un’interfaccia che dichiara dei metodi; essa viene implementata con la classe HouseGenerator e CircleGenerator che ne definiscono tali metodi e li utilizzano. Occorre innanzitutto specificare che nella finestra di visualizzazione l’origine degli assi cartesiani x e y è in basso a sinistra e che l’asse delle ordinate è ascendente. Inoltre la visualizzazione dell’immagine avviene solo nella porzione di piano x(-1 / +1) e y(-1 / +1). La generazione dei punti avviene mediante il tipo di PointGenerator (machine) che richiamo, quindi, nel caso di HouseGenerator il plotter disegnerà le linee che colegano i vertici di una casa in corretta successione. Nel caso del CircleGenerator si può notare che viene utilizzata una figura geometrica e che questa viene fatta ruotare in senso antiorario per un certo numero di gradi in modo che venga visualizzato un cerchio.Ognuna delle 2 classi definisce ed utilizza il metodo “Point next” per passare il punto successivo e il metodo “Point reset” per resettare i punti e tornare o al punto di partenza o ad un punto di valore assegnato. Entrambi questi metodi sono dichiarati nell’interfaccia PointGenerator e vengono quindi implementati nelle classi opportune. Ogni punto viene identificato delle relative coordinate (x, y) sul piano (ovviamente entro lo spazio di visualizzazione definito prima). La classe CircleGenerator, in particolare, costuisce il metodo “Point next” con delle funzioni matematiche del tipo: x= (float)(Xc + raggio*Math.con(angle + b)); y= (float)(Yc + raggio*Math.sin(angle + b)); Incrementando il parametro b. Tutto ciò viene fatto basandosi su variabili di appoggio apportunamente definite nella classe. Per quanto riguarda il componente SW che deve testare il funzionamento delle 2 classi definite sopra, basterà invocare tali classi dentro il file TestSimulation.java fornito nei dettagli e notare graficamente cosa accade. E’ importante definire il N. degli steps che deve eseguire: simulation.execute (1000); significa che esegue 1000 passi di quella simulazione prime che il plotter termini la sua esecuzione. Per la visualizzazione si utilizza l’interfaccia Plotter fornita. Vedi TestSimulation1.java per applicazione di HouseGenerator e TestSimulation2.java per applicazione di CircleGenerator. PROGETTO Per creare le figure utilizzo le classi HouseGenerator e CicleGenerator oppartenenti alla stessa interfaccia PointGenerator che è stata fornita in un package tools. Le classi definiscono dei metodi, già dichiarati dalla interfaccia, che servono per disegnare le figure desiderate. Avrò quindi i metodi: - Point next; - Point reset. Con le relative dichiarazione di variabili e le coordinate dei punti che devono generare. Verifico poi il funzionamento creando il componente SW TestSimulation1.java che testa la classe HouseGenerator e TestSimulation2.java che testa la classe CircleGenerator. IMPLEMENTAZIONE: HouseGenerator.java e CircleGenerator.java Codice e documentazione relativi alle classi. Prima di tutto è necessario specificare all’inizio del codice “ import tools.*; “ in modo che vengano importate tutte le classi necessarie. Ora posso creare la classe HouseGenerator con lo stesso costruttore dell’interfaccia PointGenerator: public class HouseGenerator implements PoinGenerator e definire I metodi necessari per disegnare le figure desiderate. E’ evidente che quando il Plotter si abbassa per disegnare le linee che uniscono i punti, utilizza i metodi della classe madre SimpleDrawPad di cui si disponeva già in partenza, in particolare utilizza drawLine (x0, y0, x1, y1) per disegnare per es una linea che collega i punti di coordinate (x0, y0) e (x1, y1). Nella classe CircleGenerator si può notare che le coordinate del centro vengono vincolate a valori di tipo float. Nel componente SW creo sia il tipo di macchina genera punti che il plotter da usare per disegnare: PointGenerator = new HouseGenerator( ); Plotter plotter = new DrawPadPlotter ( ); PointGenerator = new CircleGenerator (float, float, int, double); Plotter plotter = new SimplePlotter ( ). Verifico il funzionamento delle classi create in TestSimulation1.java e TestSimulation2.java. CASI D’USO Codice e documentazione relativi a: - TestSimulation1.java - TestSimulation2.java NOZIONI ACQUISITE Con questo progetto ho imparato e utilizzato l’ereditarietà tra interfaccie che, contrariamente a quella fra classi astratte, consente di essere multipla: infatti ho generato 2 classi che implementano la stessa interfaccia. (Le classi HouseGenerator e CircleGenerator implementano entrambe l’interfaccia PointGenerator). Ho quindi usato le interfaccie e riusato le classi e i loro metodi.