Programmazione a oggetti tramite la macchina del caffé (pt. 3)
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

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

on

  • 582 views

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

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

Statistics

Views

Total Views
582
Views on SlideShare
581
Embed Views
1

Actions

Likes
1
Downloads
8
Comments
0

1 Embed 1

http://efesto.cloudapp.net 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

  • 1. La programmazione a oggetti e le macchine del caffé (PARTE 3) Prof. Marcello Missiroli
  • 2. Di cosa parliamoFinalizzazioneEreditarietà multipla e InterfacceClassi astratteAggregazione
  • 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. 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. Esempiopublic class Capsula { public float Dimensioni() {...} public final void Peso() {...}}public class MicroCapsula extends Capsula { … } → ERROR!
  • 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. 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. 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. In ogni caso..Il sistema deve fornire le stesse funzionalità base:Un pulsante di accensione/spegnimentoCorrente continua a 12V.
  • 10. Aggiungiamo
  • 11. Linterfacciapublic interface ElectricalAdapter {    static final int OUTPUT = 12.0f; String PlugType(); int InputVoltage(); }
  • 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. 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. Uso delle interfacce     public class  Dicharazione MacchinaCaffeCappBattIta  di uso dellimplements ElecticalAdapter {interfacciaString PlugType(){return “Italian”;}int InputVoltage(){return 220;};     } Realizzazione (anche gergo UML)
  • 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. Altra implementazione     public class  MacchinaCaffeCappBattUs implements ElecticalAdapter {String PlugType(){return “Usa”;}int InputVoltage(){return 110;};     }
  • 17. Altra implementazione     public class  MacchinaCaffeCappBattBattery implements ElecticalAdapter {String PlugType(){return “”;}int InputVoltage(){return 0;};     }
  • 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. 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. 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. 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. 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. 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. 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. Ultimi dettagli di OOD
  • 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. ...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. 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. 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. LicenzaQuesto documento è soggetto alla licenza Creative Common BY-SA (Attribution – Share Alike)