26
Informatica Informatica Recupero debito quarto Recupero debito quarto anno anno Secondo incontro Secondo incontro

Informatica

  • Upload
    alva

  • View
    37

  • Download
    0

Embed Size (px)

DESCRIPTION

Informatica. Recupero debito quarto anno Secondo incontro. Obiettivi dell’incontro. Conoscere il concetto di ereditarietà Attivare processi di astrazione e specializzazione Saper implementare classi derivate. Ereditarietà. - PowerPoint PPT Presentation

Citation preview

Page 1: Informatica

InformaticaInformatica

Recupero debito quarto annoRecupero debito quarto anno

Secondo incontroSecondo incontro

Page 2: Informatica

Obiettivi dell’incontroObiettivi dell’incontro

Conoscere il concetto di ereditarietàConoscere il concetto di ereditarietà Attivare processi di astrazione e Attivare processi di astrazione e

specializzazionespecializzazione Saper implementare classi derivateSaper implementare classi derivate

Page 3: Informatica

EreditarietàEreditarietà

L’ereditarietà permette di L’ereditarietà permette di definire nuove classidefinire nuove classi partendo da classi sviluppate in precedenza.partendo da classi sviluppate in precedenza.

La nuova classe viene definita esprimendo La nuova classe viene definita esprimendo solamente le solamente le differenzedifferenze che essa possiede che essa possiede rispetto alla classe di partenza.rispetto alla classe di partenza.

L’ereditarietà permette di specificare “il punto di L’ereditarietà permette di specificare “il punto di partenza”, cioè la partenza”, cioè la classe baseclasse base, e le , e le differenzedifferenze rispetto a questa.rispetto a questa.

Page 4: Informatica

Un esempioUn esempio Classe Animale con proprietà:Classe Animale con proprietà:

colore degli occhicolore degli occhi pesopeso lunghezzalunghezza numero dei sensinumero dei sensi velocità massimavelocità massima

Queste proprietà vanno bene per definire uccelli, pesci e Queste proprietà vanno bene per definire uccelli, pesci e mammiferi, però ce ne vorrebbero altre per definire mammiferi, però ce ne vorrebbero altre per definire meglio le tre sottocategorie. meglio le tre sottocategorie.

Gli uccelli potrebbero avere la proprietà “apertura alare”, Gli uccelli potrebbero avere la proprietà “apertura alare”, ai pesci si potrebbe aggiungere “numero di pinne” e ai ai pesci si potrebbe aggiungere “numero di pinne” e ai mammiferi “lunghezza del pelo”.mammiferi “lunghezza del pelo”.

Page 5: Informatica

Sottoclasse e SuperclasseSottoclasse e Superclasse La nuova classe (nell’esempio Uccello, Pesce e La nuova classe (nell’esempio Uccello, Pesce e

Mammifero) viene definita Mammifero) viene definita sottoclassesottoclasse (o (o classe classe derivataderivata))

La classe di provenienza (nell’esempio Animale) viene La classe di provenienza (nell’esempio Animale) viene definita definita superclassesuperclasse (o (o classe baseclasse base))

La sottoclasse eredita tutte le caratteristiche (attributi e La sottoclasse eredita tutte le caratteristiche (attributi e metodi) della superclasse e si differenza da questa:metodi) della superclasse e si differenza da questa:

per l’aggiunta di nuovi attributi e/o metodiper l’aggiunta di nuovi attributi e/o metodi per la ridefinizione di alcuni metodi della superclasseper la ridefinizione di alcuni metodi della superclasse

Attenzione: è vero che un pesce è un animale, non è Attenzione: è vero che un pesce è un animale, non è vero il contrario in quanto un animale non è detto che sia vero il contrario in quanto un animale non è detto che sia un pesceun pesce

Page 6: Informatica

Un esempio di ereditarietàUn esempio di ereditarietà

Page 7: Informatica

Un diagramma di ereditarietàUn diagramma di ereditarietà

LibroDiTesto LibroDiTesto derivaderiva da Libro e da Libro e aggiungeaggiunge nuove nuove caratteristichecaratteristiche

Page 8: Informatica

Definizione di sottoclassiDefinizione di sottoclassi

JavaJavaclass Sottoclasse class Sottoclasse extendsextends Superclasse { Superclasse { <attributi><attributi> <metodi><metodi>}}

Page 9: Informatica

La sottoclasse LibroDiTestoLa sottoclasse LibroDiTestoclass LibroDiTesto extends Libro {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; }}}}

Page 10: Informatica

Istanze di classe e di sottoclasseIstanze di classe e di sottoclasse

Un oggetto di tipo Sottoclasse è contemporaneamente e Un oggetto di tipo Sottoclasse è contemporaneamente e automaticamente anche di tipo Superclasse. automaticamente anche di tipo Superclasse.

Ogni qual volta che è necessario utilizzare un oggetto di Ogni qual volta che è necessario utilizzare un oggetto di tipo Superclasse è possibile utilizzare un oggetto di tipo tipo Superclasse è possibile utilizzare un oggetto di tipo Sottoclasse. Sottoclasse.

Al contrario invece la regola non vale.Al contrario invece la regola non vale. Ogni oggetto di tipo LibroDiTesto è anche un oggetto di Ogni oggetto di tipo LibroDiTesto è anche un oggetto di

tipo Libro. Infatti è vero che un libro di testo è un libro. tipo Libro. Infatti è vero che un libro di testo è un libro. Non è vero invece il contrario: un libro non è Non è vero invece il contrario: un libro non è necessariamente un libro di testo, potrebbe essere per necessariamente un libro di testo, potrebbe essere per esempio un romanzo.esempio un romanzo.

Page 11: Informatica

PolimorfismoPolimorfismo

Libro lib;Libro lib;

LibroDiTesto libtes = new LibroDiTesto();LibroDiTesto libtes = new LibroDiTesto();

lib = libtes;lib = libtes;

Il tipo Il tipo LibroDiTestoLibroDiTesto è compatibile con il tipo è compatibile con il tipo LibroLibro

Questo fenomeno è chiamato Questo fenomeno è chiamato polimorfismopolimorfismo ed è ed è uno dei principi fondamentali della uno dei principi fondamentali della programmazione orientata agli oggetti. programmazione orientata agli oggetti.

Una variabile come Una variabile come liblib definita nell’esempio definita nell’esempio precedente è polimorfa: può contenere oggetti di precedente è polimorfa: può contenere oggetti di tipo diverso.tipo diverso.

Page 12: Informatica

Situazioni d’erroreSituazioni d’errore

Un oggetto della classe base non può Un oggetto della classe base non può essere utilizzato al posto di uno della essere utilizzato al posto di uno della classe derivata.classe derivata.

Nel nostro esempio una situazione come Nel nostro esempio una situazione come la seguente genera un errore:la seguente genera un errore:

Libro lib = new Libro();Libro lib = new Libro();

LibroDiTesto libtes;LibroDiTesto libtes;

libtes = lib;libtes = lib; //**** ERRORE ****//**** ERRORE ****

Page 13: Informatica

Gerarchia di classiGerarchia di classi L’ereditarietà può estendersi a più L’ereditarietà può estendersi a più

livelli generando quindi una livelli generando quindi una gerarchia di classigerarchia di classi..

Una classe derivata può, a sua Una classe derivata può, a sua volta, essere base di nuove volta, essere base di nuove sottoclassi.sottoclassi.

Sportivo è sottoclasse di Persona Sportivo è sottoclasse di Persona ed è superclasse di Nuotatore, ed è superclasse di Nuotatore, Motociclista e Calciatore.Motociclista e Calciatore.

Nella parte alta della gerarchia Nella parte alta della gerarchia troviamo le troviamo le classi genericheclassi generiche, , scendendo aumenta il scendendo aumenta il livello di livello di specializzazionespecializzazione..

Page 14: Informatica

Un esempioUn esempio

class Persona {class Persona { … …}}class Sportivo extends Persona {class Sportivo extends Persona { … …}}class Nuotatore extends Sportivo {class Nuotatore extends Sportivo { … …}}class Motociclista extends Sportivo {class Motociclista extends Sportivo { … …}}class Calciatore extends Sportivo {class Calciatore extends Sportivo { … …}}

Page 15: Informatica

Ereditarietà singola e multiplaEreditarietà singola e multipla Sono possibili due tipi di ereditarietà:Sono possibili due tipi di ereditarietà:

ereditarietà singola ereditarietà singola ereditarietà multiplaereditarietà multipla

L’ereditarietà singolaL’ereditarietà singola impone ad una sottoclasse di derivare da impone ad una sottoclasse di derivare da una sola superclasseuna sola superclasse. .

L’esempio presentato precedentemente è un caso di ereditarietà L’esempio presentato precedentemente è un caso di ereditarietà singola: ogni sottoclasse ha una sola classe base, mentre è singola: ogni sottoclasse ha una sola classe base, mentre è possibile da una superclasse avere più classi derivate.possibile da una superclasse avere più classi derivate.

Vari linguaggi ad oggetti pongono il vincolo dell’ereditarietà singola Vari linguaggi ad oggetti pongono il vincolo dell’ereditarietà singola per problemi di chiarezza e semplicità d’implementazione, per problemi di chiarezza e semplicità d’implementazione, Java è Java è uno di questi, C++ non lo èuno di questi, C++ non lo è..

NonNon è possibile quindi una definizione di classe del tipo: è possibile quindi una definizione di classe del tipo:class A extends B,Cclass A extends B,C

Page 16: Informatica

Ereditarietà multiplaEreditarietà multipla L’ereditarietà multipla si ha quando una sottoclasse deriva da L’ereditarietà multipla si ha quando una sottoclasse deriva da

più superclassipiù superclassi La classe La classe QuadratoQuadrato ha due superclassi: ha due superclassi:

PoligonoRegolarePoligonoRegolare e e ParallelogrammaParallelogramma

Page 17: Informatica

Java e l’ereditarietà multiplaJava e l’ereditarietà multipla

Java Java nonnon prevede ereditarietà multipla fra classi prevede ereditarietà multipla fra classi L’introduzione delle L’introduzione delle InterfacceInterfacce permette parzialmente di permette parzialmente di

ovviare a questa limitazioneovviare a questa limitazione La definizione di Quadrato in pseudolinguaggio è la La definizione di Quadrato in pseudolinguaggio è la

seguente:seguente:Classe Quadrato Deriva Da PoligonoRegolare,Parallelogramma Classe Quadrato Deriva Da PoligonoRegolare,Parallelogramma

… …

fine Classe Quadratofine Classe Quadrato

QuadratoQuadrato erediterà attributi e metodi sia da erediterà attributi e metodi sia da PoligonoRegolarePoligonoRegolare che da che da ParallelogrammaParallelogramma

Page 18: Informatica

EstensioneEstensione

Una classe derivata può differenziarsi dalla classe base Una classe derivata può differenziarsi dalla classe base aggiungendo nuove caratteristiche:aggiungendo nuove caratteristiche:

nuovi attributi nuovi attributi e/o nuovi metodie/o nuovi metodi

in questo caso si parla di estensione.in questo caso si parla di estensione. L’esempio relativo alla classe Libro e LibroDiTesto è un L’esempio relativo alla classe Libro e LibroDiTesto è un

esempio di ereditarietà per estensione: la sottoclasse esempio di ereditarietà per estensione: la sottoclasse aggiunge nuove caratteristicheaggiunge nuove caratteristiche ma non altera il ma non altera il comportamento delle funzionalità offerte dalla classe comportamento delle funzionalità offerte dalla classe base.base.

Page 19: Informatica

RidefinizioneRidefinizione

La classe derivata potrebbe però fornire le La classe derivata potrebbe però fornire le stesse caratteristiche della classe base stesse caratteristiche della classe base differenziandosi invece per il differenziandosi invece per il comportamentocomportamento

Si definisce Si definisce ereditarietà per ridefinizioneereditarietà per ridefinizione ((overridingoverriding) la situazione in cui uno o più ) la situazione in cui uno o più metodimetodi della classe base siano della classe base siano ridefinitiridefiniti nella nella classe derivataclasse derivata

I metodi avranno quindi la I metodi avranno quindi la stessastessa firmafirma (nome e (nome e lista di tipi dei parametri) ma lista di tipi dei parametri) ma differente corpodifferente corpo

Page 20: Informatica

Un esempio di overridingUn esempio di overriding

Page 21: Informatica

Overring e overloadingOverring e overloading

Attenzione a non confondere Attenzione a non confondere il il sovraccaricosovraccarico dei metodi ( dei metodi (overloadingoverloading))

situazione in cui oltre al corpo del metodo situazione in cui oltre al corpo del metodo è differente anche la sua firmaè differente anche la sua firma

con la con la ridefinizioneridefinizione ( (overridingoverriding) ) situazione in cui la firma del metodo è situazione in cui la firma del metodo è identica ma è differente il corpoidentica ma è differente il corpo

Page 22: Informatica

Estenzione e ridefinizioneEstenzione e ridefinizione

È possibile incontrare situazioni in cui È possibile incontrare situazioni in cui sono presenti sono presenti sia estensione che sia estensione che ridefinizioneridefinizione

Nell’esempio presentato in precedenza Nell’esempio presentato in precedenza relativo alla biblioteca scolastica avremmo relativo alla biblioteca scolastica avremmo potuto ridefinire nella classe LibroDiTesto potuto ridefinire nella classe LibroDiTesto il metodo stampa() per includere la il metodo stampa() per includere la visualizzazione dei nuovi attributi.visualizzazione dei nuovi attributi.

Page 23: Informatica

supersuper

La parola chiave La parola chiave thisthis, intesa come riferimento , intesa come riferimento all’oggetto stesso, è utilizzata per eliminare all’oggetto stesso, è utilizzata per eliminare ambiguità o per esplicitare ulteriormente il ambiguità o per esplicitare ulteriormente il riferimento ad un attributo o ad un metodo riferimento ad un attributo o ad un metodo interno.interno.

In una gerarchia di classi può essere necessario In una gerarchia di classi può essere necessario far riferimento ad un far riferimento ad un attributo o metodo della attributo o metodo della superclassesuperclasse, in questo caso si utilizza la parola , in questo caso si utilizza la parola chiave chiave supersuper..

Page 24: Informatica

Un esempioUn esempioclass Libro {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 {class LibroDiTesto extends Libro { … … public void stampa(){public void stampa(){ super.stampa();super.stampa(); System.out.print(“ “+materia); System.out.print(“ “+materia); }} … …}}

Page 25: Informatica

Vantaggi dell’ereditarietàVantaggi dell’ereditarietà L’ereditarietà facilita il L’ereditarietà facilita il riutilizzo di softwareriutilizzo di software

estendendone o ridefinendone caratteristiche e estendendone o ridefinendone caratteristiche e comportamenti; è possibile adattare una classe comportamenti; è possibile adattare una classe preesistente alle nuove esigenze.preesistente alle nuove esigenze.

Specificare le Specificare le differenzedifferenze da una classe simile piuttosto da una classe simile piuttosto che che ridefinireridefinire completamente la classe facilita completamente la classe facilita enormemente lo sviluppo di nuovi progetti enormemente lo sviluppo di nuovi progetti eliminando eliminando ridondanzaridondanza di codice. di codice.

L’ereditarietà L’ereditarietà nonnon è un meccanismo di è un meccanismo di inclusioneinclusione del del codice di una classe base in una derivata. Non c’è copia codice di una classe base in una derivata. Non c’è copia di codice, ogni modifica della struttura di una classe di codice, ogni modifica della struttura di una classe base si ripercuote automaticamente nelle sue classi base si ripercuote automaticamente nelle sue classi derivatederivate

Page 26: Informatica

EserciziEsercizi Classi e OggettiClassi e Oggetti Definire la classe Animale con gli attributi: specie, nome, eta; con i Definire la classe Animale con gli attributi: specie, nome, eta; con i

metodi getSpecie, getNome, getEta e setSpecie, setNome, setEta, il metodi getSpecie, getNome, getEta e setSpecie, setNome, setEta, il metodo toString, il metodo stampa ed il metodo stessaSpecie che metodo toString, il metodo stampa ed il metodo stessaSpecie che riceve i input un altro animale e restituisce true se fanno parte della riceve i input un altro animale e restituisce true se fanno parte della stessa specie. Istanziare poi due oggetti: il primo di specie stessa specie. Istanziare poi due oggetti: il primo di specie “Cavallo”, di nome “Freccia” e di 2 anni; il secondo di specie “Asino”.“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 Estendere la classe Animale con la classe Erbivoro che aggiunge

l’attributo ciboPreferito con i metodi set… e get… e ridefinisce i l’attributo ciboPreferito con i metodi set… e get… e ridefinisce i metodi che devono essere ridefiniti.metodi che devono essere ridefiniti.

Relazione fra classiRelazione fra classi Definire la classe Gabbia con i due attributi pubblici “ospite” Definire la classe Gabbia con i due attributi pubblici “ospite”

(l’animale presente nella gabbia) e superficie (in metri quadri). Cosa (l’animale presente nella gabbia) e superficie (in metri quadri). Cosa succede se si inserisce in una gabbia un “Erbivoro” e poi si chiama succede se si inserisce in una gabbia un “Erbivoro” e poi si chiama il metodo stampa di questo?il metodo stampa di questo?