Classi Astratte

20
LEZIONE SUL POLIMORFISMO DEL PROF. SILVANO NATALIZI PER LA CLASSE IV A LICEO TECNICO NOVEMBRE 2008 polimorfismo

Transcript of Classi Astratte

Page 1: Classi Astratte

LEZIONE SUL POLIMORFISMO DEL PROF. SILVANO NATALIZI

PER LA CLASSE IV A LICEO TECNICONOVEMBRE 2008

polimorfismo

Page 2: Classi Astratte

Questa struttura non è poi così maleQuesta struttura non è poi così male

L’abbiamo disegnata per minimizzare il codice duplicatoL’abbiamo disegnata per minimizzare il codice duplicato

Possiamo disegnare i programmi con parametri di tipo Animale, cosicchè ogni sottotipo di animale, anche quelli che non abbiamo ancora immaginato, possano essere passati e usati nei metodi e negli array

Ci siamo dimenticati di qualcosa ?

Page 3: Classi Astratte

Un riferimento v di tipo Volpe punta ad un oggetto di tipo Volpe

Cosa succede quando instanziamo un Animale?

Page 4: Classi Astratte

Un riferimento ippo di tipo Animale punta ad un oggetto di tipo Ippopotamo

Cosa succede quando instanziamo un Animale

Page 5: Classi Astratte

Un riferimento anim di tipo Animale punta ad un oggetto di tipo Animale

Cosa succede quando instanziamo un animale?

Page 6: Classi Astratte

A chi assomiglia un oggetto di tipo Animale ?A chi assomiglia un oggetto di tipo Animale ?

Paura

Page 7: Classi Astratte

Ha senso instanziare la classe Animale?

Alcune classi non dovrebbero essere instanziate !!

Ha certamente senso creare un oggetto volpe, tigre, ippopotamo, ma che cosa esattamente è un oggetto animale ? Quale è la sua forma ? Il suo colore ? La sua dimensione ? Quante gambe ha ?

Page 8: Classi Astratte

Ci serve la classe Animale

Ci serve per l’ereditarietà e per il polimorfismo

Però vogliamo che i programmatori possano instanziare solamente le meno astratte sottoclassi della classe Animale

Non vogliamo oggetti Animale, ma quelli leone, volpe…

Page 9: Classi Astratte

Classe astratta

Per prevenire l’istanziazione di una classePer impedire che che qualcuno usi “new” di

quel tipoSi marca la classe come abstract.Marcandola abstract, il compilatore blocca

quel codice dal creare un’istanza di quel tipo.

Page 10: Classi Astratte

Classe concreta

Quando si disegna una struttura di ereditarietà, occorre decidere quali classi sono astratte e quali concrete

La classe concreta è quella che è specifica abbastanza da essere instanziata

Una classe concreta è ok per produrre oggetti del suo tipo.

Page 11: Classi Astratte

Per fare una classe astratta

Per fare una classe astratta basta mettere la parola abstract prima della dichiarazione di classe

abstract class Canina extends Animale { Public void muoversi() { }

}

Page 12: Classi Astratte

Riferimento ad un oggetto

Si può usare un tipo astratto come variabile di riferimento (per usarlo come argomento polimorfico e tipo di return, o per fare un array polimorfico )

Page 13: Classi Astratte

Il compilatore impedisce l’instanziazione di una classe astratta

Questo è ok perché si può assegnare un oggetto di una sottoclasse ad un riferimento di superclasse, anche quando questa è astratta

La classe Canina è marcata come astratta, per cui il compilatore non permette di fare questo !

Page 14: Classi Astratte

Classi concrete e astratte

Nell’albero ereditario di Animale facciamo astratte le classi Animale, Felina, Canina

Page 15: Classi Astratte

Componenti grafici di java

In java si trovano innumerevoli classi astratte, in particolare nella libreria GUI. Dalla super classe Component si ricavano bottoni, aree di testo, barre di scorrimento, finestre di dialogo …

Voi mai fate un’istanza di un componente generico e lo mettete su di uno schermo, ma disegnate un bottone, un’area di testo ed altri componenti grafici concreti

In altre parole, instanziate solo una sottoclasse concreta di un Componente, ma mail il componente generico !

Page 16: Classi Astratte

Metodo astratto

Oltre alla classi, potete marcare anche un metodo come astratto !

Una classe astratta significa che la classe deve essere estesa

Un metodo astratto significa che quel metodo deve essere sovrascritto (overriden).

Potete decidere che alcuni o tutti i comportamenti di una classe astratta non hanno significato a meno che non siano implementati da una sottoclasse più specifica.

Page 17: Classi Astratte

Un metodo astratto non ha corpo

Page 18: Classi Astratte

Come fare un metodo astratto

public abstract void mangiare() ;

Non cè il corpo del metodo racchiuso tra

parentesi graffe !La dichiarazione del

metodo astratto termina con un punto

e virgola

Page 19: Classi Astratte

Metodo astratto in classe astratta

Se dichiarate un metodo astratto, dovete marcare la classe come astratta.

Non si può avere un metodo astratto in una classe concreta. Anche se mettete un solo metodo astratto in una

classe, questa deve essere astratta. Potete mescolare sia metodi astratti che metodi

concreti in una classe astratta.

Page 20: Classi Astratte

Perché avere metodi astratti ?