LEZIONE SUL POLIMORFISMO DEL PROF. SILVANO NATALIZI PER LA CLASSE IV A LICEO TECNICO NOVEMBRE 2008 polimorfismo
<ul><li>Questa struttura non è poi così male </li></ul><ul><li>L’abbiamo disegnata  per minimizzare il codice duplicato </...
<ul><li>Un riferimento v di tipo Volpe  punta ad un oggetto di tipo Volpe </li></ul>Cosa succede quando instanziamo un Ani...
<ul><li>Un riferimento ippo di tipo Animale punta ad un oggetto di tipo Ippopotamo </li></ul>Cosa succede quando instanzia...
<ul><li>Un riferimento anim di tipo Animale punta ad un oggetto di tipo Animale </li></ul>Cosa succede quando instanziamo ...
<ul><li>A chi assomiglia un oggetto di tipo Animale ? </li></ul>Paura
Ha senso instanziare la classe Animale? <ul><li>Alcune classi non dovrebbero essere instanziate !! </li></ul><ul><li>Ha ce...
Ci serve la classe Animale <ul><li>Ci serve per l’ereditarietà e per il polimorfismo </li></ul><ul><li>Però vogliamo che i...
Classe astratta <ul><li>Per prevenire l’istanziazione di una classe </li></ul><ul><li>Per impedire che che qualcuno usi “n...
Classe concreta <ul><li>Quando si disegna una struttura di ereditarietà, occorre decidere quali classi sono astratte e qua...
Per fare una classe astratta <ul><li>Per fare una classe astratta basta mettere la parola abstract prima della dichiarazio...
Riferimento ad un oggetto <ul><li>Si può usare un tipo astratto come variabile di riferimento (per usarlo come argomento p...
Il compilatore impedisce l’instanziazione di una classe astratta Questo è ok perché si può assegnare un oggetto di una sot...
Classi concrete e astratte Nell’albero ereditario di Animale facciamo astratte le classi Animale, Felina, Canina
Componenti grafici di java <ul><li>In java si trovano innumerevoli classi astratte, in particolare nella libreria GUI. Dal...
Metodo astratto <ul><li>Oltre alla classi, potete marcare anche un metodo come astratto ! </li></ul><ul><li>Una classe ast...
Un metodo astratto non ha corpo
Come fare un metodo astratto <ul><li>public abstract void mangiare() ; </li></ul>Non cè il corpo del metodo racchiuso tra ...
Metodo astratto in classe astratta <ul><li>Se dichiarate un metodo astratto, dovete marcare la classe come astratta. </li>...
Perché avere metodi astratti ?
Upcoming SlideShare
Loading in...5
×

Classi Astratte

1,115

Published on

Published in: Travel, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
1,115
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
23
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Classi Astratte

  1. 1. LEZIONE SUL POLIMORFISMO DEL PROF. SILVANO NATALIZI PER LA CLASSE IV A LICEO TECNICO NOVEMBRE 2008 polimorfismo
  2. 2. <ul><li>Questa struttura non è poi così male </li></ul><ul><li>L’abbiamo disegnata per minimizzare il codice duplicato </li></ul><ul><li>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 </li></ul>Ci siamo dimenticati di qualcosa ?
  3. 3. <ul><li>Un riferimento v di tipo Volpe punta ad un oggetto di tipo Volpe </li></ul>Cosa succede quando instanziamo un Animale?
  4. 4. <ul><li>Un riferimento ippo di tipo Animale punta ad un oggetto di tipo Ippopotamo </li></ul>Cosa succede quando instanziamo un Animale
  5. 5. <ul><li>Un riferimento anim di tipo Animale punta ad un oggetto di tipo Animale </li></ul>Cosa succede quando instanziamo un animale?
  6. 6. <ul><li>A chi assomiglia un oggetto di tipo Animale ? </li></ul>Paura
  7. 7. Ha senso instanziare la classe Animale? <ul><li>Alcune classi non dovrebbero essere instanziate !! </li></ul><ul><li>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 ? </li></ul>
  8. 8. Ci serve la classe Animale <ul><li>Ci serve per l’ereditarietà e per il polimorfismo </li></ul><ul><li>Però vogliamo che i programmatori possano instanziare solamente le meno astratte sottoclassi della classe Animale </li></ul><ul><li>Non vogliamo oggetti Animale, ma quelli leone, volpe… </li></ul>
  9. 9. Classe astratta <ul><li>Per prevenire l’istanziazione di una classe </li></ul><ul><li>Per impedire che che qualcuno usi “new” di quel tipo </li></ul><ul><li>Si marca la classe come abstract. </li></ul><ul><li>Marcandola abstract, il compilatore blocca quel codice dal creare un’istanza di quel tipo. </li></ul>
  10. 10. Classe concreta <ul><li>Quando si disegna una struttura di ereditarietà, occorre decidere quali classi sono astratte e quali concrete </li></ul><ul><li>La classe concreta è quella che è specifica abbastanza da essere instanziata </li></ul><ul><li>Una classe concreta è ok per produrre oggetti del suo tipo. </li></ul>
  11. 11. Per fare una classe astratta <ul><li>Per fare una classe astratta basta mettere la parola abstract prima della dichiarazione di classe </li></ul><ul><li>abstract class Canina extends Animale { </li></ul><ul><ul><li>Public void muoversi() { } </li></ul></ul><ul><li>} </li></ul>
  12. 12. Riferimento ad un oggetto <ul><li>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 ) </li></ul>
  13. 13. 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 !
  14. 14. Classi concrete e astratte Nell’albero ereditario di Animale facciamo astratte le classi Animale, Felina, Canina
  15. 15. Componenti grafici di java <ul><li>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 … </li></ul><ul><li>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 </li></ul><ul><li>In altre parole, instanziate solo una sottoclasse concreta di un Componente, ma mail il componente generico ! </li></ul>
  16. 16. Metodo astratto <ul><li>Oltre alla classi, potete marcare anche un metodo come astratto ! </li></ul><ul><li>Una classe astratta significa che la classe deve essere estesa </li></ul><ul><li>Un metodo astratto significa che quel metodo deve essere sovrascritto (overriden). </li></ul><ul><li>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. </li></ul>
  17. 17. Un metodo astratto non ha corpo
  18. 18. Come fare un metodo astratto <ul><li>public abstract void mangiare() ; </li></ul>Non cè il corpo del metodo racchiuso tra parentesi graffe ! La dichiarazione del metodo astratto termina con un punto e virgola
  19. 19. Metodo astratto in classe astratta <ul><li>Se dichiarate un metodo astratto, dovete marcare la classe come astratta. </li></ul><ul><li>Non si può avere un metodo astratto in una classe concreta. </li></ul><ul><ul><li>Anche se mettete un solo metodo astratto in una classe, questa deve essere astratta. </li></ul></ul><ul><ul><li>Potete mescolare sia metodi astratti che metodi concreti in una classe astratta. </li></ul></ul>
  20. 20. Perché avere metodi astratti ?
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×