Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 1 06/06/2006UNIROMA2-ING OOP Programmazione orientata agli Oggetti OOP L 4..6E Università degli Studi di Roma “Tor Vergata” Facoltà di Ingegneria Corso di Laurea in Ingegneria Informatica
Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 2 06/06/2006UNIROMA2-ING OOP static
Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 3 06/06/2006UNIROMA2-ING OOPthis this restituisce l’oggetto corrente (quello che sta elaborando un messaggio testé ricevuto, il cui metodo impiega, appunto, this ). this(<lista di parametri) invoca il costruttore con proprio quei parametri (numero, tipo e ordine) della classe corrente. this(…) deve essere la prima operazione presente in un costruttore (e, duque, può apparirvi una sola volta!)
Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 4 06/06/2006UNIROMA2-ING OOP Esempio /* Obiettivo: mostrare impiego di this */ public class Complex{ private float pReale, pImmagin; Complex() {pReale=0.0; pImmagin=0.0;} Complex(float pReale, float pImmagin){ this.pReale=pReale; } float getParteReale() {return pReale;} float getParteImmagin() {return pImmagin;} void setParteReale(float x) {pReale=x;} void setParteImmagin(float x) {pImmagin=x;} float modulo (Complex c) {return sqrt(pReale*pReale + pImmagin*pImmagin);} Complex +(Complex c) { float r= pReale + c. getParteReale(); /* Nota implementazione regole di accesso a livello di oggetto piuttosto che di classe: i “fratelli” – istanze diverse della stessa classe – non sono perciò stersso “friend”: l’uno non ha libero accesso agli attributi privati dell’altro!*/ float i= pImmagin + c. getParteImmagin(); return Complex(r,i); } // Continuare }
Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 5 06/06/2006UNIROMA2-ING OOP Esempio /* Obiettivo: mostrare impiego di this */ public class Complex{ private float pReale, pImmagin; Complex() {pReale=0.0; pImmagin=0.0;} Complex(float pReale, float pImmagin){ this.pReale=pReale; } float getParteReale() {return pReale;} float getParteImmagin() {return pImmagin;} void setParteReale(float x) {pReale=x;} void setParteImmagin(float x) {pImmagin=x;} float modulo (Complex c) {return sqrt(pReale*pReale + pImmagin*pImmagin);} Complex +(Complex c) { float r= pReale + c.pReale; /* Nota implementazione regole di accesso a livello di classe: i “fratelli” – istanze della stessa classe -- sono “friend” per definizione!! */ float i= pImmagin + c.pImmagin; return Complex(r,i); } // Continuare }
Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 6 06/06/2006UNIROMA2-ING OOP Esempio this(…) /* Obiettivo: mostrare impiego di this( ) */ //Esempio basato su Thinking.. Java Apogeo public class Fiore{ private int petali=0; private float altezza=20.0; protected String s= new String(“null”); Fiore(int petali) {this.petali=petali;} Fiore(String colore){s=colore;} Fiore (String s, int petali) { this(petali); // this(s); ERRORE: solo in 1a linea. Una sola volta!! this.s=s; } Fiore (String s, int petali, float altezza) { this(s, petali); this.altezza=altezza; } Fiore(){this(“Bianco”, 29, 15.0);} public getColor(){return s;} // Altre operazioni di fiore }
Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 7 06/06/2006UNIROMA2-ING OOP Domande: giusto o sbagliato? /* Obiettivo: mostrare impiego di this( ) */ public class UnaClasse{ private Fiore f1= newFiore(); public Fiore f2; //… f2= new Fiore f1.colore; 29; f1.altezza; System.out.println ( “f1: numero di petali “ + f1.petali); // Altro }
Appunti a cura di Giovanni Cantone, con la collaborazione di Anna Lomartire e la partecipazione di Giuseppe Calavaro 8 06/06/2006UNIROMA2-ING OOP Domande: giusto o sbagliato? /* Obiettivo: mostrare impiego di this( ) */ public class Rosa extends Fiore{ private int spine= 10; private String s; Rosa() { super(“Rosso”, 16, 20.0); } rosa (int altezza, int spine) { Rosa(); this.spine=spine; (super).altezza = altezza; } String getColor(){ return (super.getColor() + “-intenso”); // Altro }