informatica recupero debito quarto anno terzo incontro

24
Informatica Informatica Recupero debito quarto Recupero debito quarto anno anno Terzo incontro Terzo incontro

Upload: enrichetta-bucci

Post on 01-May-2015

226 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: Informatica Recupero debito quarto anno Terzo incontro

InformaticaInformatica

Recupero debito quarto annoRecupero debito quarto anno

Terzo incontroTerzo incontro

Page 2: Informatica Recupero debito quarto anno Terzo incontro

Obiettivi dell’incontroObiettivi dell’incontro

Ripasso ereditarietàRipasso ereditarietà Classi astratteClassi astratte InterfacceInterfacce

Page 3: Informatica Recupero debito quarto anno Terzo incontro

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 Recupero debito quarto anno Terzo incontro

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 5: Informatica Recupero debito quarto anno Terzo incontro

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 6: Informatica Recupero debito quarto anno Terzo incontro

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 7: Informatica Recupero debito quarto anno Terzo incontro

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 8: Informatica Recupero debito quarto anno Terzo incontro

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 9: Informatica Recupero debito quarto anno Terzo incontro

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 10: Informatica Recupero debito quarto anno Terzo incontro

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 11: Informatica Recupero debito quarto anno Terzo incontro

Un esempio di overridingUn esempio di overriding

Page 12: Informatica Recupero debito quarto anno Terzo incontro

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 13: Informatica Recupero debito quarto anno Terzo incontro

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 14: Informatica Recupero debito quarto anno Terzo incontro

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 15: Informatica Recupero debito quarto anno Terzo incontro

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 16: Informatica Recupero debito quarto anno Terzo incontro

finalfinal Abbiamo fino ad ora utilizzato il modificatore Abbiamo fino ad ora utilizzato il modificatore finalfinal per per

definire definire attributi non modificabiliattributi non modificabili (costanti) (costanti) final può essere utilizzato anche final può essere utilizzato anche per i metodiper i metodi; anche in ; anche in

questo caso sta a significare la non modificabilità del questo caso sta a significare la non modificabilità del metodo metodo (un metodo dichiarato final non può essere (un metodo dichiarato final non può essere ridefinito da una sottoclasse)ridefinito da una sottoclasse)

Esistono anche Esistono anche classiclassi definite definite finalfinal che non possono che non possono essere estese essere estese (una classe dichiarata final non può avere (una classe dichiarata final non può avere sottoclassi)sottoclassi)

Page 17: Informatica Recupero debito quarto anno Terzo incontro

Classi e metodi astrattiClassi e metodi astratti

Si definiscono Si definiscono metodi astrattimetodi astratti quei metodi in cui quei metodi in cui è presente è presente solo la firma ma non il corposolo la firma ma non il corpo (il (il modificatore di un metodo astratto è abstract)modificatore di un metodo astratto è abstract)

Una classe che contiene almeno un metodo Una classe che contiene almeno un metodo astratto si definisce astratto si definisce classe astrattaclasse astratta e da essa e da essa nonnon possono essere istanziati oggetti possono essere istanziati oggetti

Le sottoclassi di una classe astratta devono Le sottoclassi di una classe astratta devono implementare implementare tuttitutti i metodi astratti della classe i metodi astratti della classe base o essere a loro volta astrattebase o essere a loro volta astratte

Page 18: Informatica Recupero debito quarto anno Terzo incontro

Un esempioUn esempio

Page 19: Informatica Recupero debito quarto anno Terzo incontro

EsercizioEsercizio

Definire la classe astratta Veicolo con gli Definire la classe astratta Veicolo con gli attributi cilindrata e numero_posti, i attributi cilindrata e numero_posti, i metodi: set e get e stampametodi: set e get e stampa

Definire le classi derivate Moto e Definire le classi derivate Moto e Automobile, la classe Automobile ha Automobile, la classe Automobile ha anche l’attributo Euro (valori da 0 a 5)anche l’attributo Euro (valori da 0 a 5)

Realizzare una applicazione che utilizza 2 Realizzare una applicazione che utilizza 2 Automobili e 2 Motociclette e utilizza tutti i Automobili e 2 Motociclette e utilizza tutti i metodi presenti in queste classimetodi presenti in queste classi

Page 20: Informatica Recupero debito quarto anno Terzo incontro

Definizione esplicita di interfacciaDefinizione esplicita di interfaccia

E’ possibile definirne un’interfaccia esplicitamente mediante un E’ possibile definirne un’interfaccia esplicitamente mediante un costrutto specificocostrutto specifico

Interfaccia RisorsaInterfaccia Risorsa Metodo leggi() Di Tipo StringaMetodo leggi() Di Tipo Stringa Metodo scrivi(buffer Di Tipo Stringa)Metodo scrivi(buffer Di Tipo Stringa) Metodo disponibili() Di Tipo InteroMetodo disponibili() Di Tipo InteroFine Interfaccia RisorsaFine Interfaccia Risorsa

L’interfaccia di questo esempio definisce le operazioni di un L’interfaccia di questo esempio definisce le operazioni di un ipotetico oggetto di tipo Risorsa. ipotetico oggetto di tipo Risorsa.

L’interfaccia non essendo una classe implementata non può essere L’interfaccia non essendo una classe implementata non può essere istanziata direttamente. istanziata direttamente.

Per implementare delle risorse dobbiamo implementare i metodi Per implementare delle risorse dobbiamo implementare i metodi dichiarati dall’interfaccia Risorsadichiarati dall’interfaccia Risorsa

Ma per ogni tipo di risorsa dovranno essere implementati in maniera Ma per ogni tipo di risorsa dovranno essere implementati in maniera differente (es. per accedere ad un file si effettueranno operazioni differente (es. per accedere ad un file si effettueranno operazioni diverse rispetto che per accedere alla rete)diverse rispetto che per accedere alla rete)

Page 21: Informatica Recupero debito quarto anno Terzo incontro

Utilità delle interfacceUtilità delle interfacce L’interfaccia fornisce uno L’interfaccia fornisce uno schemaschema di come dovrà essere strutturata di come dovrà essere strutturata

la classe: quali metodi dovranno essere presentila classe: quali metodi dovranno essere presenti L’interfaccia L’interfaccia non fornisce l’implementazionenon fornisce l’implementazione dei metodi ma lascia dei metodi ma lascia

allo sviluppatore l’onere di scriverli in modo specifico per ognuna allo sviluppatore l’onere di scriverli in modo specifico per ognuna delle classi che fa uso dell’interfaccia.delle classi che fa uso dell’interfaccia.

L’utilizzo di un’interfaccia è utile quando di devono definire i metodi L’utilizzo di un’interfaccia è utile quando di devono definire i metodi che dovrà possedere un oggetto senza poterne dare che dovrà possedere un oggetto senza poterne dare un’implementazione univoca per tutte le tipologie di oggetti che un’implementazione univoca per tutte le tipologie di oggetti che faranno uso dell’interfaccia.faranno uso dell’interfaccia.

Una classe che vuole fare uso di un’interfaccia si dice che la Una classe che vuole fare uso di un’interfaccia si dice che la implementaimplementa; questo rende obbligatorio ; questo rende obbligatorio l’implementazionel’implementazione di di tutti i tutti i metodimetodi definiti nell’interfaccia. definiti nell’interfaccia.

Page 22: Informatica Recupero debito quarto anno Terzo incontro

Interfacce in JavaInterfacce in Javapublic interface Risorsa {public interface Risorsa { public String leggi();public String leggi(); public void Scrivi(String buffer);public void Scrivi(String buffer); public int disponibili();public int disponibili();}}

public class RisorsaFile implements Risorsa {public class RisorsaFile implements Risorsa { public String leggi() { public String leggi() { // Ritorno il contenuto del file// Ritorno il contenuto del file }} public void Scrivi(String buffer) { public void Scrivi(String buffer) { // Scrivo il contenuto di buffer nel file// Scrivo il contenuto di buffer nel file }} public int disponibili() {public int disponibili() { // Ritorno il numero di caratteri disponibili nel file // Ritorno il numero di caratteri disponibili nel file }}}}

Page 23: Informatica Recupero debito quarto anno Terzo incontro

Interfacce ed ereditarietà Interfacce ed ereditarietà multiplamultipla

Una classe può implementare anche Una classe può implementare anche più di una più di una interfacciainterfaccia

E’ possibile implementare un’E’ possibile implementare un’interfacciainterfaccia e e contemporaneamente estendere una contemporaneamente estendere una classeclasse. .

In questo modo si può ovviare al limite di Java di non In questo modo si può ovviare al limite di Java di non possedere l’possedere l’ereditarietà multiplaereditarietà multipla. .

Rimane l’inconveniente che utilizzando un’interfaccia per Rimane l’inconveniente che utilizzando un’interfaccia per simulare l’ereditarietà multipla è necessario simulare l’ereditarietà multipla è necessario implementarne tutti i metodiimplementarne tutti i metodi, rendendo le scelte di , rendendo le scelte di progetto difficili e delicate.progetto difficili e delicate.

Page 24: Informatica Recupero debito quarto anno Terzo incontro

EsercizioEsercizio

Riprendere l’esercizio relativo ai veicoli Riprendere l’esercizio relativo ai veicoli sostituendo alla classe astratta Veicolo sostituendo alla classe astratta Veicolo l’interfaccia MezzoDiTrasportol’interfaccia MezzoDiTrasporto