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.*”.