Costantini Diego 107724
19/05/2001
Esercitazione N° 3
Descrizione del problema
Devo creare un oggetto che mi permetta di costruire varie forme geometriche, e poi visualizzare
alcuni esempi.
Analisi del problema
Ho creato un oggetto per disegnare forme geometriche, utilizzando delle funzioni messe a
disposizione da un’altra classe, poi ho mostrato qualche esempio per ogni figura dell’oggetto.
Progetto e implementazione
Sono state create 2 classi ed ereditata una già esistente:
Softdraw.java
DrawPad.java
SimpleDrawPad.java (ereditata)
DrawPad.java
import tools.*;
public class DrawPad extends SimpleDrawPad {
public void drawTriangle(int x0,int y0,int x1,int y1,int x2,int y2){
super.drawLine(x0,y0,x1,y1);
super.drawLine(x1,y1,x2,y2);
super.drawLine(x2,y2,x0,y0);
}
//Rettangolo non ruotato(per averlo ruotato servirebbero i parametri di tutti i vertici)
public void drawBox(int x0,int y0,int x1,int y1){
super.drawLine(x0,y0,x1,y0);
super.drawLine(x1,y0,x1,y1);
super.drawLine(x1,y1,x0,y1);
super.drawLine(x0,y1,x0,y0);
}
public void drawCircle(int x1,int y1,int r)
{double i;
for (i=0;i<2*(Math.PI);i=i+0.01)
super.drawPoint((int)(x1+r*(Math.sin(i))),(int)(y1+r*(Math.cos(i))));
}
}
Questa classe sembra avere solo 3 metodi propri, ma in realtà possiede anche quelli di
SimpleDrawPad, avendoli ereditati tramite “extends SimpleDrawPad”.
I metodi drawTriangle, drawBox e drawCircle disegnano figure, a loro volta utilizzando i metodi
drawLine e drawPoint ereditati da SimpleDrawPad.
Inoltre è stata sfruttata anche la classe Math per utilizzare PI e le funzioni seno e coseno, e siccome
il drawPoint vuole in ingresso parametri interi è stato necessario un cast per le coordinate della
circonferenza.
Softdraw.java
import tools.*;
public class Softdraw extends java.lang.Object {
public static void main (String args[]) {
// create a new pad
DrawPad pad = new DrawPad();
// show the pad
pad.show();
// set thickness and color
pad.setCurrentThickness(2);
pad.setCurrentColor(0.4f,0.1f,0.2f);
// draw a line
pad.drawLine(1,5,50,200);
// a triangle
pad.drawTriangle(10,10,100,100,10,100);
// a box
pad.setCurrentColor(0.1f,0.3f,0.2f);
pad.setCurrentThickness(1);
pad.drawBox(100,100,200,200);
// a circle
pad.drawCircle(150,150,100);
// wait a little
try {
Thread.currentThread().sleep(5000);
} catch (Exception ex){
}
// exit
System.exit(0);
}/*fine main*/
}/*parentesi finale*/
Questo è il componente software, e usa i metodi precedentemente elencati per disegnare figure.
Possiamo notare che è stato sufficiente costruire un oggetto DrawPad per poter utilizzare tutte i
metodi,compresi quelli di SimpleDrawPad.
Casi d’uso
Sono stati effettuati alcuni esempi sull’utilizzo della classe DrawPad.
Per esempio, dopo aver creato un oggetto DrawPad, ho cambiato colore e spessore delle figure e ho
disegnato una linea e un triangolo, poi, con colori e spessori diversi, ho disegnato anche un
quadrilatero e un cerchio.
Infine, è stata aggiunta una funzione per visualizzare le figure per un determinato tempo e poi
chiudere il pad automaticamente.
Schermata d’esempio:
Concetti e tecniche acquisiti
In questo esercizio è stata sfruttata la possibilità di ereditare metodi da classi già esistenti e
funzionanti, in modo da non dover modificare codice già funzionante (inoltre non se ne aveva la
possibilità) e non dover neppure riscrivere metodi già esistenti.
Tutto ciò tramite “extends NomeClasseEreditata” e “super” per invocarne i metodi.
Inoltre è stato necessario fare un cast a dei valori e in entrambe le classi specificare l’indirizzo in cui
trovare la classe ereditata “import tools.*”.