La programmazione a oggetti   e le macchine del caffé         (PARTE 3)    Prof. Marcello Missiroli
Di cosa parliamoFinalizzazioneEreditarietà multipla e InterfacceClassi astratteAggregazione
Limitiamo lereditarietàA volte è utile LIMITARE la possibilità di  derivare (e quindi modificare) il  comportamento di cer...
Come si fa?Occorre precedere il nome di ciò che ci interessa dalla parola chiave “final”     •         Una classe final è ...
Esempiopublic class Capsula {   public float Dimensioni() {...}   public final void Peso() {...}}public class MicroCapsula...
Estendiamo lereditarietà• Nulla ci vieta, in teoria, di estendere il  processo di ereditarietà e fare discendere  il nostr...
Troppo complicato!Questo sistema è possibile in certi linguaggi  (es. il C++), anche se intruduce una serie  di problemiJa...
Torniamo alla nostra macchinaSupponiamo ora di occuparci dellalimentazione della nostra macchina del caffè.     •         ...
In ogni caso..Il sistema deve fornire le stesse funzionalità   base:Un pulsante di accensione/spegnimentoCorrente continua...
Aggiungiamo
Linterfacciapublic interface ElectricalAdapter {    static final int OUTPUT = 12.0f;    String PlugType();    int InputVol...
Cosè?E una “specie” di classe, ma* Possiede solo metodi, non attributi (al  limite costanti statiche)* Non ha implementazi...
Cosè?E una sorta di “promessa”. Si garantisce  che si implementeranno quei metodi, un  po come quando si aderisce ad uno  ...
Uso delle interfacce     public class            Dicharazione  MacchinaCaffeCappBattIta   di uso dellimplements ElecticalA...
Perché darsi questa pena?Le implementazioni possono variare anche  parecchio, ma il funzionamento osservabile è  identico....
Altra implementazione     public class   MacchinaCaffeCappBattUs implements ElecticalAdapter {String PlugType(){return “Us...
Altra implementazione     public class   MacchinaCaffeCappBattBattery implements ElecticalAdapter {String PlugType(){retur...
Anche le interfacce...Nel loro piccolo, hanno delle gerarchie.E possibile estendere una interfaccia per  compiti più speci...
Classi e metodi astrattiIn certi casi si possono definire alcune classi o  metodi come “astratti” - analogamente alle  int...
Classi e metodi astratti (2)Di solito si preferisce luso delle interfacce, che  offrono più libertà di derivazioneLe class...
BindingIn generale, nei linguaggi non OO, la  decisione su quale funzione viene  eseguita avviene sempre in fase di  compi...
In praticaAnche se Java è un linguaggio fortemente   tipizzato, è possibile assegnare ad una   variabile non solo un ogget...
EsempioSupponiamo di avere unapplicazione che gestisce tre macchine del caffé e può controllarle tutte.Creiamo unarray di ...
CodiceMacchinaCaffe arr[] = new   MacchinaCaffe[3];arr[0]= new MacchinaCaffe(); Esegue il metodoarr[1]= new MacchinaCaffe(...
Ultimi dettagli di OOD
Ereditarietà.....Lereditarietà non è lunico modo per estendere le  funzionalità del codice mantenendone lintegrità e  una ...
...o aggregazione?Un altro modo per creare funzionalità è  laggregazione (o la composizione).In questo modo, si prendono a...
Quale scegliere?In molti casi, la scelta è obbligata e ovvia. In  altri, sono possibili entrambe le strade e  cè un criter...
RiassumendoAbbiamo così terminato questa breve introduzione del mondo della programmazione OOP tramite Java.Spero abbia ge...
LicenzaQuesto documento è soggetto alla licenza Creative Common BY-SA (Attribution – Share Alike)
Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Upcoming SlideShare
Loading in …5
×

Programmazione a oggetti tramite la macchina del caffé (pt. 3)

606 views

Published on

Terza (e ultima) parte delle mie slides introuttive alla OOP con Java.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
606
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
11
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Programmazione a oggetti tramite la macchina del caffé (pt. 3)

  1. 1. La programmazione a oggetti e le macchine del caffé (PARTE 3) Prof. Marcello Missiroli
  2. 2. Di cosa parliamoFinalizzazioneEreditarietà multipla e InterfacceClassi astratteAggregazione
  3. 3. Limitiamo lereditarietàA volte è utile LIMITARE la possibilità di derivare (e quindi modificare) il comportamento di certi metodi o classiMantenendo il parallelo con la macchina del caffè, dobbiamo essere CERTI che tutte macchine usino llo stesso formato di capsule, per esempio.
  4. 4. Come si fa?Occorre precedere il nome di ciò che ci interessa dalla parola chiave “final” • Una classe final è una classe che non può essere estesa • Un metodo final è un metodo che non può essere sovraccaricato nelle sottoclassi • Un attributo final è una variabile che può essere assegnata una sola volta (simile a una costante).
  5. 5. Esempiopublic class Capsula { public float Dimensioni() {...} public final void Peso() {...}}public class MicroCapsula extends Capsula { … } → ERROR!
  6. 6. Estendiamo lereditarietà• Nulla ci vieta, in teoria, di estendere il processo di ereditarietà e fare discendere il nostro oggetto da 2,3 o anche più oggetti.• Di fatto, aggiungiamo oggetti e metodi ”di base” al nostro oggetto.
  7. 7. Troppo complicato!Questo sistema è possibile in certi linguaggi (es. il C++), anche se intruduce una serie di problemiJava usa un meccanismo leggermente diverso, chiamato Interfaccia
  8. 8. Torniamo alla nostra macchinaSupponiamo ora di occuparci dellalimentazione della nostra macchina del caffè. • Una possibile soluzione consiste nellagganciaci alla normale rete di alimentazione • Una seconda soluzione consiste nel mettere delle batterie • Una terza possibile soluzione consiste nellusare accumulatori
  9. 9. In ogni caso..Il sistema deve fornire le stesse funzionalità base:Un pulsante di accensione/spegnimentoCorrente continua a 12V.
  10. 10. Aggiungiamo
  11. 11. Linterfacciapublic interface ElectricalAdapter {    static final int OUTPUT = 12.0f; String PlugType(); int InputVoltage(); }
  12. 12. Cosè?E una “specie” di classe, ma* Possiede solo metodi, non attributi (al limite costanti statiche)* Non ha implementazione, per cui non è istanziabile.
  13. 13. Cosè?E una sorta di “promessa”. Si garantisce che si implementeranno quei metodi, un po come quando si aderisce ad uno standard (.iso, .mp3).
  14. 14. Uso delle interfacce     public class  Dicharazione MacchinaCaffeCappBattIta  di uso dellimplements ElecticalAdapter {interfacciaString PlugType(){return “Italian”;}int InputVoltage(){return 220;};     } Realizzazione (anche gergo UML)
  15. 15. Perché darsi questa pena?Le implementazioni possono variare anche parecchio, ma il funzionamento osservabile è identico.Quindi la macchina funziona e fa il caffé. Può essere alimentata a batterie, con la corrente o con fluttuazioni nanotropiche del subspazio.E i dettagli non ci interessano!
  16. 16. Altra implementazione     public class  MacchinaCaffeCappBattUs implements ElecticalAdapter {String PlugType(){return “Usa”;}int InputVoltage(){return 110;};     }
  17. 17. Altra implementazione     public class  MacchinaCaffeCappBattBattery implements ElecticalAdapter {String PlugType(){return “”;}int InputVoltage(){return 0;};     }
  18. 18. Anche le interfacce...Nel loro piccolo, hanno delle gerarchie.E possibile estendere una interfaccia per compiti più specializzati.Sistema molto utilizzato (per esempio in Swing e nelle Eccezioni)
  19. 19. Classi e metodi astrattiIn certi casi si possono definire alcune classi o metodi come “astratti” - analogamente alle interfacce. Basta precederli con la parola chiave abstract.Anche in questo caso le tali classi non possono essere istanziati.Un solo metodo virtuale rende virtuale lintera classe
  20. 20. Classi e metodi astratti (2)Di solito si preferisce luso delle interfacce, che offrono più libertà di derivazioneLe classi astratte sono utilizzate spesso nella parte iniziale di una progettazione OOD
  21. 21. BindingIn generale, nei linguaggi non OO, la decisione su quale funzione viene eseguita avviene sempre in fase di compilazione.Nel caso degli oggetti, invece, la decisione può essere ritardata alla fase di esecuzione (Late binding)
  22. 22. In praticaAnche se Java è un linguaggio fortemente tipizzato, è possibile assegnare ad una variabile non solo un oggetto del tipo previsto, ma anche uno dei suoi figliIl messaggio che inviate alloggetto è lo stesso, ma leffetto può variare.
  23. 23. EsempioSupponiamo di avere unapplicazione che gestisce tre macchine del caffé e può controllarle tutte.Creiamo unarray di macchine di caffé, ma una di queste fa anche il cappuccino.
  24. 24. CodiceMacchinaCaffe arr[] = new  MacchinaCaffe[3];arr[0]= new MacchinaCaffe(); Esegue il metodoarr[1]= new MacchinaCaffe(); della classe MacchinaCaffearr[2]= new  MacchinaCaffeCappuccio(2,2,2);arr[0].make_coffee(10);arr[2].make_coffee(10);Esegue il metodo della classe MacchinaCaffecappuccio
  25. 25. Ultimi dettagli di OOD
  26. 26. Ereditarietà.....Lereditarietà non è lunico modo per estendere le funzionalità del codice mantenendone lintegrità e una elevata riusabilità.Tipicamente, quando si creano sottoclassi si estendono le funzionalità esistenti tramite loverrideSi usano classi/metodi astratti quando si vuole una certa funzionalità ma non si sa bene come implementarla
  27. 27. ...o aggregazione?Un altro modo per creare funzionalità è laggregazione (o la composizione).In questo modo, si prendono altre classi e si combinano in una nuova classe.Si fornisce una nuova metodologia per renderlo compatibile col codice esistente
  28. 28. Quale scegliere?In molti casi, la scelta è obbligata e ovvia. In altri, sono possibili entrambe le strade e cè un criterio preciso. Ci si basa sullesperienza.Esempio: Da “punto” a “linea”. Da “Macchina da caffe” a “Macchina da caffè con batteria”
  29. 29. RiassumendoAbbiamo così terminato questa breve introduzione del mondo della programmazione OOP tramite Java.Spero abbia gettato un po di luce su questa “nuova” modalità di programmazione. (Per la verità se ne parla dal 1960, e si usa concretmente dagli anni novanta!)
  30. 30. LicenzaQuesto documento è soggetto alla licenza Creative Common BY-SA (Attribution – Share Alike)

×