La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Informatica Recupero debito quarto anno Secondo incontro.

Presentazioni simili


Presentazione sul tema: "Informatica Recupero debito quarto anno Secondo incontro."— Transcript della presentazione:

1 Informatica Recupero debito quarto anno Secondo incontro

2 Obiettivi dellincontro Conoscere il concetto di ereditarietà Conoscere il concetto di ereditarietà Attivare processi di astrazione e specializzazione Attivare processi di astrazione e specializzazione Saper implementare classi derivate Saper implementare classi derivate

3 Ereditarietà Lereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza. Lereditarietà permette di definire nuove classi partendo da classi sviluppate in precedenza. La nuova classe viene definita esprimendo solamente le differenze che essa possiede rispetto alla classe di partenza. La nuova classe viene definita esprimendo solamente le differenze che essa possiede rispetto alla classe di partenza. Lereditarietà permette di specificare il punto di partenza, cioè la classe base, e le differenze rispetto a questa. Lereditarietà permette di specificare il punto di partenza, cioè la classe base, e le differenze rispetto a questa.

4 Un esempio Classe Animale con proprietà: Classe Animale con proprietà: colore degli occhi colore degli occhi peso peso lunghezza lunghezza numero dei sensi numero dei sensi velocità massima velocità massima Queste proprietà vanno bene per definire uccelli, pesci e mammiferi, però ce ne vorrebbero altre per definire meglio le tre sottocategorie. Queste proprietà vanno bene per definire uccelli, pesci e mammiferi, però ce ne vorrebbero altre per definire meglio le tre sottocategorie. Gli uccelli potrebbero avere la proprietà apertura alare, ai pesci si potrebbe aggiungere numero di pinne e ai mammiferi lunghezza del pelo. Gli uccelli potrebbero avere la proprietà apertura alare, ai pesci si potrebbe aggiungere numero di pinne e ai mammiferi lunghezza del pelo.

5 Sottoclasse e Superclasse La nuova classe (nellesempio Uccello, Pesce e Mammifero) viene definita sottoclasse (o classe derivata) La nuova classe (nellesempio Uccello, Pesce e Mammifero) viene definita sottoclasse (o classe derivata) La classe di provenienza (nellesempio Animale) viene definita superclasse (o classe base) La classe di provenienza (nellesempio Animale) viene definita superclasse (o classe base) La sottoclasse eredita tutte le caratteristiche (attributi e metodi) della superclasse e si differenza da questa: La sottoclasse eredita tutte le caratteristiche (attributi e metodi) della superclasse e si differenza da questa: per laggiunta di nuovi attributi e/o metodi per laggiunta di nuovi attributi e/o metodi per la ridefinizione di alcuni metodi della superclasse per la ridefinizione di alcuni metodi della superclasse Attenzione: è vero che un pesce è un animale, non è vero il contrario in quanto un animale non è detto che sia un pesce Attenzione: è vero che un pesce è un animale, non è vero il contrario in quanto un animale non è detto che sia un pesce

6 Un esempio di ereditarietà

7 Un diagramma di ereditarietà LibroDiTesto deriva da Libro e aggiunge nuove caratteristiche LibroDiTesto deriva da Libro e aggiunge nuove caratteristiche

8 Definizione di sottoclassi Java Java class Sottoclasse extends Superclasse { }

9 La sottoclasse LibroDiTesto class LibroDiTesto extends Libro { private String materia; private String materia; private boolean adozione; private boolean adozione; public void setmateria(String materia) { public void setmateria(String materia) { this.materia = materia; this.materia = materia; } public String getmateria() { public String getmateria() { return materia; return materia; } public void cambiaadozione() { public void cambiaadozione() { adozione = !adozione; adozione = !adozione; }}

10 Istanze di classe e di sottoclasse Un oggetto di tipo Sottoclasse è contemporaneamente e automaticamente anche di tipo Superclasse. Un oggetto di tipo Sottoclasse è contemporaneamente e automaticamente anche di tipo Superclasse. Ogni qual volta che è necessario utilizzare un oggetto di tipo Superclasse è possibile utilizzare un oggetto di tipo Sottoclasse. Ogni qual volta che è necessario utilizzare un oggetto di tipo Superclasse è possibile utilizzare un oggetto di tipo Sottoclasse. Al contrario invece la regola non vale. Al contrario invece la regola non vale. Ogni oggetto di tipo LibroDiTesto è anche un oggetto di tipo Libro. Infatti è vero che un libro di testo è un libro. Non è vero invece il contrario: un libro non è necessariamente un libro di testo, potrebbe essere per esempio un romanzo. Ogni oggetto di tipo LibroDiTesto è anche un oggetto di tipo Libro. Infatti è vero che un libro di testo è un libro. Non è vero invece il contrario: un libro non è necessariamente un libro di testo, potrebbe essere per esempio un romanzo.

11 Polimorfismo Libro lib; LibroDiTesto libtes = new LibroDiTesto(); lib = libtes; Il tipo LibroDiTesto è compatibile con il tipo Libro Il tipo LibroDiTesto è compatibile con il tipo Libro Questo fenomeno è chiamato polimorfismo ed è uno dei principi fondamentali della programmazione orientata agli oggetti. Questo fenomeno è chiamato polimorfismo ed è uno dei principi fondamentali della programmazione orientata agli oggetti. Una variabile come lib definita nellesempio precedente è polimorfa: può contenere oggetti di tipo diverso. Una variabile come lib definita nellesempio precedente è polimorfa: può contenere oggetti di tipo diverso.

12 Situazioni derrore Un oggetto della classe base non può essere utilizzato al posto di uno della classe derivata. Un oggetto della classe base non può essere utilizzato al posto di uno della classe derivata. Nel nostro esempio una situazione come la seguente genera un errore: Nel nostro esempio una situazione come la seguente genera un errore: Libro lib = new Libro(); LibroDiTesto libtes; libtes = lib;//**** ERRORE ****

13 Gerarchia di classi Lereditarietà può estendersi a più livelli generando quindi una gerarchia di classi. Lereditarietà può estendersi a più livelli generando quindi una gerarchia di classi. Una classe derivata può, a sua volta, essere base di nuove sottoclassi. Una classe derivata può, a sua volta, essere base di nuove sottoclassi. Sportivo è sottoclasse di Persona ed è superclasse di Nuotatore, Motociclista e Calciatore. Sportivo è sottoclasse di Persona ed è superclasse di Nuotatore, Motociclista e Calciatore. Nella parte alta della gerarchia troviamo le classi generiche, scendendo aumenta il livello di specializzazione. Nella parte alta della gerarchia troviamo le classi generiche, scendendo aumenta il livello di specializzazione.

14 Un esempio class Persona { …} class Sportivo extends Persona { …} class Nuotatore extends Sportivo { …} class Motociclista extends Sportivo { …} class Calciatore extends Sportivo { …}

15 Ereditarietà singola e multipla Sono possibili due tipi di ereditarietà: Sono possibili due tipi di ereditarietà: ereditarietà singola ereditarietà singola ereditarietà multipla ereditarietà multipla Lereditarietà singola impone ad una sottoclasse di derivare da una sola superclasse. Lereditarietà singola impone ad una sottoclasse di derivare da una sola superclasse. Lesempio presentato precedentemente è un caso di ereditarietà singola: ogni sottoclasse ha una sola classe base, mentre è possibile da una superclasse avere più classi derivate. Lesempio presentato precedentemente è un caso di ereditarietà singola: ogni sottoclasse ha una sola classe base, mentre è possibile da una superclasse avere più classi derivate. Vari linguaggi ad oggetti pongono il vincolo dellereditarietà singola per problemi di chiarezza e semplicità dimplementazione, Java è uno di questi, C++ non lo è. Vari linguaggi ad oggetti pongono il vincolo dellereditarietà singola per problemi di chiarezza e semplicità dimplementazione, Java è uno di questi, C++ non lo è. Non è possibile quindi una definizione di classe del tipo: Non è possibile quindi una definizione di classe del tipo: class A extends B,C

16 Ereditarietà multipla Lereditarietà multipla si ha quando una sottoclasse deriva da più superclassi Lereditarietà multipla si ha quando una sottoclasse deriva da più superclassi La classe Quadrato ha due superclassi: PoligonoRegolare e Parallelogramma La classe Quadrato ha due superclassi: PoligonoRegolare e Parallelogramma

17 Java e lereditarietà multipla Java non prevede ereditarietà multipla fra classi Java non prevede ereditarietà multipla fra classi Lintroduzione delle Interfacce permette parzialmente di ovviare a questa limitazione Lintroduzione delle Interfacce permette parzialmente di ovviare a questa limitazione La definizione di Quadrato in pseudolinguaggio è la seguente: La definizione di Quadrato in pseudolinguaggio è la seguente: Classe Quadrato Deriva Da PoligonoRegolare,Parallelogramma … … fine Classe Quadrato Quadrato erediterà attributi e metodi sia da PoligonoRegolare che da Parallelogramma Quadrato erediterà attributi e metodi sia da PoligonoRegolare che da Parallelogramma

18 Estensione Una classe derivata può differenziarsi dalla classe base aggiungendo nuove caratteristiche: Una classe derivata può differenziarsi dalla classe base aggiungendo nuove caratteristiche: nuovi attributi nuovi attributi e/o nuovi metodi e/o nuovi metodi in questo caso si parla di estensione. in questo caso si parla di estensione. Lesempio relativo alla classe Libro e LibroDiTesto è un esempio di ereditarietà per estensione: la sottoclasse aggiunge nuove caratteristiche ma non altera il comportamento delle funzionalità offerte dalla classe base. Lesempio relativo alla classe Libro e LibroDiTesto è un esempio di ereditarietà per estensione: la sottoclasse aggiunge nuove caratteristiche ma non altera il comportamento delle funzionalità offerte dalla classe base.

19 Ridefinizione La classe derivata potrebbe però fornire le stesse caratteristiche della classe base differenziandosi invece per il comportamento La classe derivata potrebbe però fornire le stesse caratteristiche della classe base differenziandosi invece per il comportamento Si definisce ereditarietà per ridefinizione (overriding) la situazione in cui uno o più metodi della classe base siano ridefiniti nella classe derivata Si definisce ereditarietà per ridefinizione (overriding) la situazione in cui uno o più metodi della classe base siano ridefiniti nella classe derivata I metodi avranno quindi la stessa firma (nome e lista di tipi dei parametri) ma differente corpo I metodi avranno quindi la stessa firma (nome e lista di tipi dei parametri) ma differente corpo

20 Un esempio di overriding

21 Overring e overloading Attenzione a non confondere Attenzione a non confondere il sovraccarico dei metodi (overloading) situazione in cui oltre al corpo del metodo è differente anche la sua firma il sovraccarico dei metodi (overloading) situazione in cui oltre al corpo del metodo è differente anche la sua firma con la ridefinizione (overriding) situazione in cui la firma del metodo è identica ma è differente il corpo con la ridefinizione (overriding) situazione in cui la firma del metodo è identica ma è differente il corpo

22 Estenzione e ridefinizione È possibile incontrare situazioni in cui sono presenti sia estensione che ridefinizione È possibile incontrare situazioni in cui sono presenti sia estensione che ridefinizione Nellesempio presentato in precedenza relativo alla biblioteca scolastica avremmo potuto ridefinire nella classe LibroDiTesto il metodo stampa() per includere la visualizzazione dei nuovi attributi. Nellesempio presentato in precedenza relativo alla biblioteca scolastica avremmo potuto ridefinire nella classe LibroDiTesto il metodo stampa() per includere la visualizzazione dei nuovi attributi.

23 super La parola chiave this, intesa come riferimento alloggetto stesso, è utilizzata per eliminare ambiguità o per esplicitare ulteriormente il riferimento ad un attributo o ad un metodo interno. La parola chiave this, intesa come riferimento alloggetto stesso, è utilizzata per eliminare ambiguità o per esplicitare ulteriormente il riferimento ad un attributo o ad un metodo interno. In una gerarchia di classi può essere necessario far riferimento ad un attributo o metodo della superclasse, in questo caso si utilizza la parola chiave super. In una gerarchia di classi può essere necessario far riferimento ad un attributo o metodo della superclasse, in questo caso si utilizza la parola chiave super.

24 Un esempio class Libro { … public void stampa(){ public void stampa(){ System.out.print(autore+ ); System.out.print(autore+ ); System.out.print(titolo+ ); System.out.print(titolo+ ); System.out.print(pag. +numeroPagine); System.out.print(pag. +numeroPagine); System.out.print( +codiceISBN); System.out.print( +codiceISBN); } …} class LibroDiTesto extends Libro { … public void stampa(){ public void stampa(){ super.stampa(); super.stampa(); System.out.print( +materia); System.out.print( +materia); } …}

25 Vantaggi dellereditarietà Lereditarietà facilita il riutilizzo di software estendendone o ridefinendone caratteristiche e comportamenti; è possibile adattare una classe preesistente alle nuove esigenze. Lereditarietà facilita il riutilizzo di software estendendone o ridefinendone caratteristiche e comportamenti; è possibile adattare una classe preesistente alle nuove esigenze. Specificare le differenze da una classe simile piuttosto che ridefinire completamente la classe facilita enormemente lo sviluppo di nuovi progetti eliminando ridondanza di codice. Specificare le differenze da una classe simile piuttosto che ridefinire completamente la classe facilita enormemente lo sviluppo di nuovi progetti eliminando ridondanza di codice. Lereditarietà non è un meccanismo di inclusione del codice di una classe base in una derivata. Non cè copia di codice, ogni modifica della struttura di una classe base si ripercuote automaticamente nelle sue classi derivate Lereditarietà non è un meccanismo di inclusione del codice di una classe base in una derivata. Non cè copia di codice, ogni modifica della struttura di una classe base si ripercuote automaticamente nelle sue classi derivate

26 Esercizi Classi e Oggetti Classi e Oggetti Definire la classe Animale con gli attributi: specie, nome, eta; con i metodi getSpecie, getNome, getEta e setSpecie, setNome, setEta, il metodo toString, il metodo stampa ed il metodo stessaSpecie che riceve i input un altro animale e restituisce true se fanno parte della stessa specie. Istanziare poi due oggetti: il primo di specie Cavallo, di nome Freccia e di 2 anni; il secondo di specie Asino. Definire la classe Animale con gli attributi: specie, nome, eta; con i metodi getSpecie, getNome, getEta e setSpecie, setNome, setEta, il metodo toString, il metodo stampa ed il metodo stessaSpecie che riceve i input un altro animale e restituisce true se fanno parte della stessa specie. Istanziare poi due oggetti: il primo di specie Cavallo, di nome Freccia e di 2 anni; il secondo di specie Asino. Ereditarietà Ereditarietà Estendere la classe Animale con la classe Erbivoro che aggiunge lattributo ciboPreferito con i metodi set… e get… e ridefinisce i metodi che devono essere ridefiniti. Estendere la classe Animale con la classe Erbivoro che aggiunge lattributo ciboPreferito con i metodi set… e get… e ridefinisce i metodi che devono essere ridefiniti. Relazione fra classi Relazione fra classi Definire la classe Gabbia con i due attributi pubblici ospite (lanimale presente nella gabbia) e superficie (in metri quadri). Cosa succede se si inserisce in una gabbia un Erbivoro e poi si chiama il metodo stampa di questo? Definire la classe Gabbia con i due attributi pubblici ospite (lanimale presente nella gabbia) e superficie (in metri quadri). Cosa succede se si inserisce in una gabbia un Erbivoro e poi si chiama il metodo stampa di questo?


Scaricare ppt "Informatica Recupero debito quarto anno Secondo incontro."

Presentazioni simili


Annunci Google