Uploaded on

 

More in: Travel , Business
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
1,071
On Slideshare
0
From Embeds
0
Number of Embeds
1

Actions

Shares
Downloads
22
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. LEZIONE SUL POLIMORFISMO DEL PROF. SILVANO NATALIZI PER LA CLASSE IV A LICEO TECNICO NOVEMBRE 2008 polimorfismo
  • 2.
    • Questa struttura non è poi così male
    • L’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 ?
  • 3.
    • Un riferimento v di tipo Volpe punta ad un oggetto di tipo Volpe
    Cosa succede quando instanziamo un Animale?
  • 4.
    • Un riferimento ippo di tipo Animale punta ad un oggetto di tipo Ippopotamo
    Cosa succede quando instanziamo un Animale
  • 5.
    • Un riferimento anim di tipo Animale punta ad un oggetto di tipo Animale
    Cosa succede quando instanziamo un animale?
  • 6.
    • A chi assomiglia un oggetto di tipo Animale ?
    Paura
  • 7. 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 ?
  • 8. 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…
  • 9. Classe astratta
    • Per prevenire l’istanziazione di una classe
    • Per impedire che che qualcuno usi “new” di quel tipo
    • Si marca la classe come abstract.
    • Marcandola abstract, il compilatore blocca quel codice dal creare un’istanza di quel tipo.
  • 10. 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.
  • 11. 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() { }
    • }
  • 12. 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 )
  • 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. Classi concrete e astratte Nell’albero ereditario di Animale facciamo astratte le classi Animale, Felina, Canina
  • 15. 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 !
  • 16. 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.
  • 17. Un metodo astratto non ha corpo
  • 18. 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
  • 19. 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.
  • 20. Perché avere metodi astratti ?