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.