290 likes | 510 Vues
SISSIS MODULO DI JAVA PER LA CLASSE IV DELL’ITI. UNITA’ DIDATTICA 4 UN’ANALISI APPROFONDITA DEI METODI E DELLE CLASSI di Doretta Bonura. Corso di fondamenti di Informatica: IV ciclo prof. Domenico Cantone.
E N D
SISSISMODULO DI JAVA PER LA CLASSE IV DELL’ITI UNITA’ DIDATTICA 4 UN’ANALISI APPROFONDITA DEI METODI E DELLE CLASSI di Doretta Bonura Corso di fondamenti di Informatica: IV ciclo prof. Domenico Cantone
PREREQUISITI_____________________________________________ • Familiarità in Java con: • Tipi di dati • Operatori • Costrutti principali • Concetto di classe e oggetti • Struttura sintattica delle classi e dei metodi UD 4: I metodi in java
Guidare lo studente ad acquisire una mentalità di programmazione O.O. mostrando le potenzialità degli strumenti di programmazione che Java mette a disposizione in questa direzione: LA PAROLA RISERVATA this SOVRACCARICO DEI METODI OGGETTI COME PARAMETRI EREDITARIETA’ RIDEFINIZIONE DEI METODI CLASSI ASTRATTE E METODI ASTRATTI UN’ANALISI APPROFONDITA DEI METODI E DELLE CLASSIOBIETTIVI________________________________________________________ UD 4: I metodi in java
STRUMENTI________________________________________________________STRUMENTI________________________________________________________ • LIBRO DI TESTO • APPUNTI DEL PROFESSORE • TUTORIAL SU INTERNET • LABORATORIO Nota: testi di riferimento usati per queste slides: JAVA GUIDA COMPLETA - Patrick Naughton, Herbert Shildt – Mc Graw Hill JAVA GUDA COMPLETA – Laura Lemay, Charles L. Perkins - APOGEO UD 4: I metodi in java
METODOLOGIE DI LAVORO:_________________________________________________________ • Lezione frontale • Esercitazioni di laboratorio • Esercitazioni in classe • Esercitazioni a casa con esercizi e piccoli progetti. • Verifiche in classe scritte e orali UD 4: I metodi in java
TEMPITOTALE: 3 SETTIMANE UD 4: I metodi in java
LA PAROLA RISERVATA this • Nel corpo di un metodo può presentarsi la necessità di far riferimento all’oggetto corrente, cioè quello su cui verrà richiamato il metodo, • quando l’oggetto verrà creato. • In questi casi si usa la parola chiave this che permette di far riferimento all’oggetto corrente, prima ancora che esso venga istanziato. • Esso puo’ essere usato in diverse situazioni: • ------------------------------------------------------------------------------ • Nei metodi costruttori. • Per restituire l’oggetto stesso all’interno di un metodo. • Per far riferimento da parte di un metodo ad un altro metodo dichiarato all’interno della stessa classe. • ------------------------------------------------------------------------------------ • Poiché il this è un riferimento all’istanza corrente di una classe lo si può utilizzare solo nei metodi si istanza, non nei metodi di classe (quelli dichiarati come static). • L’omissione del this per far riferimento alle variabili di istanza nel corpo di un metodo è possibile se non esistono variabili locali con lo stesso nome delle variabili di istanza, altrimenti si farà precedere il riferimento alla variabile di istanza dalla parola riservata this. Vediamo subito un esempio. UD4: I metodi in java
UTILIZZO DEL this NEI METODI COSTRUTTORI • Nel primo riquadro, per assegnare un valore alle variabili di istanza base e altezza, si è dovuto assegnare un altro nome ai parametri del metodo costruttore, in quanto, se si assegnasse lo stesso nome, all’interno del metodo le variabile di istanza sarebbero mascherate e non sarebbero visibili. • Nel secondo riquadro vediamo che le variabili di istanza e i parametri del metodo costruttore hanno lo stesso nome.Quindi la variabile locale nasconde la variabile di istanza. In realtà java permette di far riferimento alle variabili di istanza all’interno del metodo utilizzando il this. Queste due classi sono equivalenti e l’utilizzo o no del this nei metodi costruttori dipende dalle preferenze del programmatore. UD4: I metodi in java
UTILIZZO DEL this PER RESTITUIRE L’OGGETTO CORRENTE IN UN METODO UD4: I metodi in java
UTILIZZO DEL THIS PER FAR RIFERIMENTO AD UN ALTRO METODO ALL’INTERNODELLA CLASSE STESSA UD4: I metodi in java
SOVRACCARICO (OVERLOAD) DEI METODI Il sovraccarico dei metodi è uno dei modi in cui Java implementa il polimorfismo. E’ possibile definire due o più metodi aventi lo stesso nome all’interno della stessa classe purché si distinguano per il numero dei parametri, nota bene: non per il tipo dei parametri o per il tipo di ritorno. Vediamo un esempio: UD4: I metodi in java
SOVRACCARICO DEI METODIesempio: //*************** file: Scrittura.java ***************************************************************** public class Scrittura { //--------------------------------------- metodo scrivi con 1 parametro ----- void scrivi( String s1) { System.out.println(s1); } //-------------------------------------metodo scrivi con 2 parametri ------ void scrivi( String s1, String s2) { System.out.println(s1+ s2); } }//fine classe Scrittura //****************** file: ProvaScrittura.java ***************************************************** public class ProvaScrittura { //------------------------------------- metodo main --------------- public static void main void ( String args[ ]) { Scrittura frase = new Scrittura( );//viene usato il metodo costruttore di default frase.scrivi(“Ciao a tutti”); frase.scrivi(”BUON NATALE ”,” FELICE ANNO NUOVO”); } }// fine classe ProvaScrittura ______________________________________________________________ Questo programma genera il seguente output: Ciao a tutti BUON NATALE FELICE ANNO NUOVO UD4: I metodi in java
SOVRACCARICO DEI METODICOSTRUTTORI //*************** file: Punto.java *********************************************************** public class Punto { double x ;// variabili di istanza double y ; double z ; //------------------- metodo costruttore con 3 parametri ----------------------- Punto(double x, double y, double z) {// costruisce un punto nello spazio XYZ this.x = x; this.y = y; this.z = z; } //------------------- metodo costruttore con 2 parametri---------------- Punto( double x, double y) {// costruisce un punto nel piano Z=0 this.x = x; this.y = y; this.z = 0; } //-------------------- metodo costruttore senza parametri ---------- Punto( ) {// ridefinizione del metodo costruttore di default, costruisce il punto origine this.x = 0; this.y = 0; this.z = 0; }//----------------------------------------------------------------------------- }//fine classe Punto Il sovraccarico dei metodi costruttori segue le stesse regole dei metodi in generale, bisogna ricordare pero’ che il metodo costruttore di default, senza parametri non potrà più essere utilizzato. Si può ovviare a questo inconveniente ridefinendo il metodo costruttore di default. UD4: I metodi in java
SOVRACCARICO DEI METODICOSTRUTTORI //*************** file: ProvaPunto.java ********************************************************************* public class ProvaPunto { public static void main ( String args[]) { • Punto origine = new Punto( );//viene costruito l’oggetto Punto origine = (0,0,0) • Punto p1_2d = new Punto(3,4);//viene costruito l’oggetto Punto p1_2d = (3,4,0) • Punto p1_3d = new Punto(3,4,5);//viene costruito l’oggetto Punto p1_2d = (3,4,5) • System.out.println(“Il punto p1_2d ha coordinate:”); • System.out.println(“X = “ + p1_2d.x); • System.out.println(“Y = “ + p1_2d.y); • System.out.println(“Z = “ + p1_2d.z); • } }// fine classe ProvaPunto Vediamo come vengono creati gli oggetti della classe Punto nel main ______________________________________________________________ Questo programma genera il seguente output: Il punto p1_2d ha coordinate: X = 3 Y = 4 Z = 0 UD4: I metodi in java
UTILIZZO DEGLI OGGETTI COME PARAMETRI E’ possibile passare degli oggetti ai metodi • I tipi semplici in java sono passati automaticamente per valore, cioè viene fatta una copia. • Gli oggetti invece vengono passati automaticamente per riferimento. Questo vuol dire che se un oggetto viene passato come parametro ad un metodo che ne cambia le caratteristiche è l’oggetto stesso che viene cambiato. Vediamo un esempio: UD4: I metodi in java
GLI OGGETTI SONO PASSATI AUTOMATICAMENTE PER RIFERIMENTO Esempio: L’output di questo programma sarà: x = 5 y = 6 z = 2 Come si vede dall’output, le coordinate di p sono cambiate. Ricorda che: anche le stringhe e gli array in Java sono oggetti e quindi vengono passati automaticamente per riferimento. UD4: I metodi in java
EREDITARIETA’ • Java supporta il meccanismo dell’ereditarietà. • E’ possibile specificare una sola superclasse per qualunque sottoclasse creata. • E’ possibile creare una gerarchia di ereditarietà in cui una sottoclasse diventa superclasse di un’altra sottoclasse.
EREDITARIETA’ Una sottoclasse può accedere a tutti i membri della superclasse: variabili di istanza e metodi, che sono stati dichiarati come public o protected, ma non come private. Esempio: Estendiamo la classe Rettangolo con la classe Parallelepipedo. UD4: I metodi in java
UTILIZZO DI SUPER PER CHIAMARE I COSTRUTTORI DELLA SUPERCLASSE Supponiamo di voler dichiarare come private nella classe Rettangolo le variabili di istanza base e altezza, allora esse non saranno più accessibili dalla classe estesa Parallelepipedo, e non potranno più essere usate neanche dal metodo costruttore. Java fornisce un sistema per utilizzare il metodo costruttore della classe immediatamente sopra. UD4: I metodi in java
UTILIZZO DEI METODI DELLA CLASSE SUPERIORE Il metodo cambiadim nella classe Rettangolo può essere richiamato anche da un oggetto della classe parallelepipedo. UD4: I metodi in java
UNA ALTERNATIVA AL SUPER UN OGGETTO DELLA SUPERCLASSE PUO’ ESSERE DICHIARATO COME VARIABILE DI ISTANZA NELLA SOTTOCLASSE E PUO’ ESSERE PASSATO COME PARAMETRO NEI METODI COSTRUTTORI DELLA SOTTOCLASSE UD4: I metodi in java
RIDEFINIZIONE DEI METODI (OVERRIDE) • Come si è visto negli esempi precedenti, quando si estende una classe può essere utile poter adeguare dei metodi alla struttura della classe estesa. Java permette di ridefinire i metodi. Questa è un’altra maniera in cui viene realizzato il polimorfismo. • In una gerarchia di classi, quando un metodo di una sottoclasse ha lo stesso nome e lo stesso tipo di ritorno di un metodo della superclasse , si dice che il metodo nella sottoclasse ridefinisce (override) il metodo della superclasse. • Quando un metodo ridefinito viene chiamato all’interno di una sottoclasse fa sempre riferimento alla versione ridefinita nella sottoclasse, il metodo della superclasse viene nascosto. • I metodi ridefiniti consentono a Java di supportare il polimorfismo run-time (durante l’esecuzione). La capacità di richiamare metodi su istanze di nuove classi senza dove ricompilare è uno strumento di grande potenza. UD4: I metodi in java
RIDEFINIZIONE DEI METODI Esempio: estendiamo la classe Rettangolo con la sottoclasse Parallelepipedo e ridefiniamo il metodo cambiadim in modo che cambi le dimensioni senza deformare il parallelepipedo. UD4: I metodi in java
CLASSI ASTRATTE E METODI ASTRATTI A volte si può desiderare definire una superclasse che dichiari una struttura astratta senza entrare nei dettagli dell’implementazione. Figura colore dim1 area( ) perimetro( ) intestazione( ) {...} area ( ) {...} perimetro( ) {...} dim2 dim3 area( ) {...} perimetro( ) {...} dim2 area( ) {...} perimetro( ) {...} Triangolo Rettangolo Cerchio UD4: I metodi in java
CLASSI ASTRATTE E METODI ASTRATTI E’ possibile anche che dei metodi non abbiano significato se non sono ridefiniti nelle sottoclassi. La soluzione che offre Java è il metodo astratto. UD4: I metodi in java
SOTTOCLASSI DELLE CLASSI ASTRATTE Definiamo le classi FigCerchio e FigRettangolo come sottoclassi della classe astratta Figura UD4: I metodi in java
ISTANZIAZIONE DI OGGETTI CON LE CLASSI ASTRATTE Le classi astratti non possono essere utilizzate per istanziare oggetti, però è possibile creare un riferimento della classe astratta ad un oggetto della sottoclasse. Vediamo come: UD4: I metodi in java
FINE UD4: I metodi in java