La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Overriding.

Presentazioni simili


Presentazione sul tema: "Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Overriding."— Transcript della presentazione:

1 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Overriding

2 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza public class D extends B { //CLASSE DERIVATA public void f(String s) {…} } È possibile loverloading di funzioni ereditate public class B {//CLASSE BASE public void f(int i) {…} } D d = new D(); d.f(1); //OK: invoca B.f(int) d.f(prova); //OK: invoca D.f(String)

3 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Nella classe derivata è possibile anche fare overriding (ridefinizione) delle funzioni della classe base… Overriding di funzioni …definendo nella classe derivata una funzione con esattamente lo stessa segnatura della funzione ereditata…

4 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …ogni volta che si invoca detta funzione su un oggetto della classe derivata (indipendentemente dal tipo del riferimento usato)… Overriding di funzioni …viene eseguito il corpo della funzione ridefinita.

5 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Esempio1.java Esempi Esempio2.java

6 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza I clienti della classe D non possono più invocare B.f(int) ma solo D.f(int) … Osservazioni …allinterno della classe invece si può invocare B.f(int) facendo uso di super (analogo a this ).

7 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Late Binding

8 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza A tempo di compilazione si controlla solo lesistenza di una funzione con la segnatura richiesta… Late binding …ma non si creano collegamenti con il corpo della funzione stessa…

9 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …tali collegamenti sono stabiliti a runtime in base alla classe delloggetto di invocazione (e non del riferimento). Late binding Esempio: LateBinding.java

10 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza È possibile cambiare il livello di accesso della funzione ridefinita, ma solo allargandolo. Note sulloverriding È possibile bloccare loverriding di una funzione qualificandola final.

11 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Se nella classe derivata definiamo un campo dati con lo stesso nome di un campo dati della classe base… Loverriding di campi dati non esiste!

12 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …il campo della classe derivata nasconde quello della classe base… …che però resta accessibile utilizzando riferimenti del tipo base. Esempio: SovrascritturaCampiDati.java Loverriding di campi dati non esiste!

13 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Classi Astratte

14 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza … sono classi che non possono avere istanze proprie … Le classi astratte … cioè, sono classi utilizzate per derivare sottoclassi …

15 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …possono avere funzioni astratte cioè dichiarate ma non definite (la segnatura è presente, ma il corpo no)… Le classi astratte …le classi (concrete) derivate devono fare overriding delle funzioni astratte.

16 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Scrivere una classe Java per rappresentare figure. Per ciascuna figura ci interessa sapere il colore, il perimetro e larea Esempio Figure.java

17 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Scrivere una classe per rappresentare figure che sono rettangoli, triangoli, cerchi Esempio Rettangolo.java, Triangolo.java, Cerchio.java

18 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Scrivere una funzione cliente che dato un array di figure, restituisca la somma dei perimetri Esempio di cliente di una classe astratta ServiziFigure.java

19 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza La funzione è polimorfa… Osservazioni …per supportare il polimorfismo loverriding e il late binding è essenziale… …facilita notevolmente la legibilità, il riuso e lestendibilità.

20 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Interfacce

21 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …è una astrazione per un insieme di funzioni pubbliche, delle quali si definisce la segnatura ma non il corpo… Una interfaccia …una classe implementa linterfaccia definendo tutte le funzioni previste dalla stessa.

22 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …una interfaccia è simile ad una classe dove… Sintatticamente … …non possono essere presenti campi dati (eccetto costanti statiche…)… …tutte le funzioni sono astratte (segnatura, ma non corpo)…

23 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza public interface Confrontabile { boolean maggiore(Confrontabile c); boolean paritetico(Confrontabile c); } //Nota: le funzioni di una interfaccia //sono implicitamente public Esempio

24 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Persona.java Data una interfaccia possiamo costruire classi che la implementano … Edificio.java

25 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza ServiziCofrontabile.java Data una interfaccia possiamo costruire funzioni (polimorfe) che la usano … Main.java

26 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Le interfacce rappresentano collezioni di funzionalità… Osservazioni …messe a disposizione dalle classi che le implementano...

27 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …sfruttando il polimorfismo, possiamo costruire clienti che fanno uso di dette funzionalità, indipendentemente da come sono implementate (riuso) Osservazioni

28 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …una classe astratta è una classe, cioè una astrazione di un insieme di oggetti simili (quelli delle sue sottoclassi)… Differenza tre interfacce e classi astratte …una interfaccia è una semplice astrazione di un insieme di funzionalità...

29 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza …pensare Confrontabile come una astrazione sia delle persone che degli edifici solo perché entrambi dispongono delle funzionalità di confronto maggiore() e paritetico() è una forzatura. Differenza tre interfacce e classi astratte

30 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Altre caratteristiche delle interfacce Java

31 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Una classe può implementare più di una interfaccia… public interface I { void g(); } public interface J { void h(); } public class C implements I,J { void g(){…} void h(){…} }

32 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Una interfaccia può essere derivata da unaltra interfaccia… public interface I { void g(); } public interface J extends I {void h();} public class C implements J { void g(){…} void h(){…} }

33 Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Java supporta ereditarietà multipla per le interfacce (non per le classi)… public interface I {void g();} public interface J {void h();} public interface M extends I,J {void k();} public class C implements M { void g(){…} void h(){…} void k(){…} }


Scaricare ppt "Laboratorio di programmazione Java Prof. Giuseppe De Giacomo Università di Roma La Sapienza Overriding."

Presentazioni simili


Annunci Google