QUINTA ESERCITAZIONE DI LABORATORIO Informatica Grafica – Ingegneria Edile Architettura 3/2/2003 – a.a. 2002/2003 Introduzione Le classi e gli oggetti sono componenti fondamentali de i linguaggi orientati agli oggetti (object-oriented). Gli oggetti sono componenti software che contengono dati ed algoritmi, che possono essere sfruttati a loro volta da altri oggetti in un programma. Una classe specifica i dati e gli algoritmi associati ad una categoria di oggetti. Inoltre permette di creare oggetti da utilizzare nei programmi. Lo scopo di questa esercitazione è vedere un primo esempio di classe e capire alcuni aspetti importanti nella definizione di classi e nell’utilizzo di un oggetto. La classe Triangoli ESERCIZIO: Realizzare una classe PrimoTriangolo che contenga come dati le coordinate dei vertici di un triangolo e come algoritmi i metodi per il calcolo dell’area, del perimetro e del baricentro. Si assuma di lavorare in uno spazio bidimensionale. Realizzare inoltre un’altra classe TestPrimoTriangolo che permetta di collaudare la classe PrimoTriangolo. Il codice da cui partire L’esercizio di cui sopra è parzialmente risolto. Il codice della classe PrimoTriangolo sostituendo ai commenti nel corpo dei metodi le istruzioni che realizzano le operazioni descritte nei commenti stessi. La classe TestPrimoTriangolo è già completa. FILE PrimoTriangolo.java import java.awt.Point; public class PrimoTriangolo { public PrimoTriangolo() { /* inizializza le coordinate dei vertici del triangolo come segue v1=(X1,Y1), v2=(X2,Y2), v3=(X3,Y3) */ } public double perimetro(){ /* calcola il perimetro del triangolo in funzione delle coordinate dei vertici e ne restituisce il valore */ return 0; } public double area (){ /* calcola l'area del triangolo in funzione delle coordinate dei vertici e ne restituisce il valore */ return 0; } public Point baricentro(){ /* calcola le coordinate del baricentro del triangolo in funzione delle coordinate dei vertici e ne restituisce i valori in un oggetto Point */ return new Point(); } private final int X1=100, X2=200, X3=300, Y1=200, Y2=400, Y3=600; // coordinate dei vertici private Point v1, v2, v3; // i vertici del triangolo } La classe PrimoTriangolo utilizza le classi java.lang.Math e java.awt.Point che contengono rispettivamente utilità per il calcolo di funzioni matematiche standard e per la creazione e modifica di un oggetto punto di coordinate bidimensionali con valori interi rispettivamente. Diversamente dalla classe Point, la classe Math è inclusa automaticamente in ogni programma java assieme a tutto il pacchetto java.lang.*. Tra i vari metodi presenti nella classe Math vi sono quelli per il calcolo della radice quadrata e della potenza public static double sqrt(double a):restituisce la radice quadrata di a public static double pow(double a,double b): restituisce ab La classe Point permette di istanziare un oggetto punto di coordinate intere specificandone le coordinate attraverso il costruttore con due argomenti. public Point(int x,int y): costruisce un punto di coordinate (x,y) E’ possibile accedere alle coordinate x ed y di un oggetto Point direttamente, essendo quest’ultime proprietà pubbliche e quindi appartenenti all’interfaccia della classe. Alternativamente è possibile ottenerne i valori tramite i seguenti metodi accessori. public double getX(): restituisce le coordinate x del punto in doppia precisione. public double getY(): restituisce le coordinate y del punto in doppia precisione. All’interno della classe PrimoTriangolo sono dichiarati, ma non ancora implementati Un costruttore senza argomenti che dovrebbe inizializzare i vertici v1, v2 e v3 del triangolo come specificato dalle costanti X1, X2, X3, Y1, Y2, Y3. Un metodo che dovrebbe calcolare l’area del triangolo partendo dalle coordinate dei vertici v1,v2,v3 Un metodo che dovrebbe restituire le coordinate del baricentro del triangolo in un oggetto di tipo Point sfruttando i valori delle coordinate dei vertici v1, v2, v3. Le costanti intere X1, X2, X3, Y1, Y2, Y3 da utilizzare nel costruttore per inizializzare i vertici v1, v2, v3 Le variabili istanza v1, v2, v3 di tipo Point da utilizzare per contenere i valori delle coordinate dei vertici corrispondenti. Lo scopo dell’esercitazione è implementare i metodi scrivendone il corpo. FILE TestPrimoTriangolo.java public class TestPrimoTriangolo { public static void main(String[] args) { System.out.println("***BENVENUTI AL PROGRAMMA TRIANGOLI*************************\n"); PrimoTriangolo triangolo=new PrimoTriangolo(); double area= triangolo.area(); double perimetro= triangolo.perimetro(); double ascissaBaricentro= triangolo.baricentro().x; double ordinataBaricentro= triangolo.baricentro().y; System.out.print("L'area del triangolo e'\t\t"); System.out.println(area); System.out.print("Il perimetro del triangolo e'\t"); System.out.println(perimetro); System.out.print("L’ascissa del baricentro e’\t"); System.out.println(ascissaBaricentro); System.out.print("L’ordinata del baricentro e’\t"); System.out.println(ordinataBaricentro); System.out.println("\n************ARRIVEDERCI*************************************"); } } La classe TestPrimoTriangolo che permette di testare oggetti della classe PrimoTriangolo contiene il solo metodo main. Il main di TestPrimoTriangolo è strutturato come segue. Dopo una stampa su console di benvenuto, istanzia un’oggetto di tipo PrimoTriangolo, definisce ed inizializza delle variabili locali sfruttando i metodi pubblici della classe PrimoTriangolo area, perimetro e baricentro. I primi due metodi restituiscono dei valori primitivi l’ultimo invece un oggetto di tipo Point. Per ottenere le coordinate x ed y dell’oggetto Point si accede direttamente ai campi x ed y resi pubblici nell’interfaccia della classe. Successivamente stampa una serie di messaggi su console che visualizzano i valori dell’area, del perimetro e delle coordinate del baricentro del triangolo istanziato sfruttando i valori dell’area, del perimetro e delle coordinate del baricentro immagazzinati nelle variabili locali. Passi dell’esercitazione Le classi parzialmente realizzate possono essere compilate ed eseguite. Inizialmente stampano valori nulli per l’area, il perimetro e le coordinate del baricentro del triangolo. Lo scopo dell’esercitazione è modificarli passo passo fino a renderli completamente aderenti alle specifiche dell’esercizio. 1. Scaricare dal sito dell’esercitazione i file TestPrimoTriangolo.java e PrimoTriangolo.java e salvarli in una stessa cartella. Aprire e compilare in ordine PrimoTriangolo.java e TestPrimoTriangolo.java con JCreator. Lanciare TestPrimoTriangolo.class da JCretor. Se il programma è stato eseguito e ha mostrato in output valori nulli per l’area, il perimetro e le coordinate del baricentro passare al punto successivo altrimenti chiedere aiuto all’esercitatore. 2. Sostituire al corpo dei metodi PrimoTriangolo() e area() il codice che realizza le azioni specificate nei rispettivi commenti. Compilare in ordine PrimoTriangolo.java e TestPrimoTriangolo.java e lanciare TestPrimoTriangolo.class. Se il programma è stato eseguito ed ha mostrato in output il valore corretto dell’area del triangolo passare al punto successivo altrimenti chiedere aiuto all’esercitatore. 3. Sostituire al corpo del metodo perimetro() il codice che realizza le azioni specificate nel rispettivo commento. Compilare in ordine PrimoTriangolo.java e TestPrimoTriangolo.java e lanciare TestPrimoTriangolo.class. Se il programma è stato eseguito e ha mostrato in output il valore corretto del perimetro passare al punto successivo altrimenti chiedere aiuto all’esercitatore. Si fa notare che le coordinate del baricentro di un triangolo sono semplicemente la media aritmetica delle coordinate dei tre vertici. 4. Sostituire al corpo del metodo baricentro() il codice che realizza le azioni specificate nel rispettivo commento. Compilare in ordine PrimoTriangolo.java e TestPrimoTriangolo.java e lanciare TestPrimoTriangolo.class. Se il programma è stato eseguito e ha mostrato in output il valore corretto del baricentro passare al punto successivo altrimenti chiedere aiuto all’esercitatore. 5. Ottimizzare il codice di PrimoTriangolo.java definendo un nuovo metodo privato e statico che calcola la distanza tra due punti in funzione delle loro coordinate e sfruttarlo per snellire il codice dei metodi per il calcolo del perimetro e dell’ area. Compilare in ordine PrimoTriangolo.java e TestPrimoTriangolo.java e lanciare TestPrimoTriangolo.class. Se il programma è stato eseguito correttamente l’esercitazione è terminata altrimenti chiedere aiuto all’esercitatore.