La programmazione a oggetti  e le macchine del caffé  (PARTE 2) Prof. Marcello Missiroli
Di cosa parliamo <ul><li>Ulteriori vantaggi della programmazione a oggetti </li></ul><ul><li>Ereditarietà (in generale e i...
Miglioriamo il programma <ul><li>Il nostro oggetto funziona bene, ma si potrebbe decidere di aggiungere la funzionalità di...
Ampliamo
In modo tradizionale.. <ul><li>Bisogna, in pratica, riprogettare tutto daccapo. </li></ul><ul><li>L'aggiunta di un nuovo c...
...ma con gli oggetti <ul><li>Possiamo costruire un oggetto più “preciso”, più “raffinato” partendo da uno grezzo, eredita...
La classe 'figlia' <ul><li>public class MacchinaCaffeCappuccio extends MacchinaCaffe { </li></ul><ul><li>private float mil...
Cosa abbiamo ottenuto? <ul><li>La nuova classe possiede TRE attributi, coffee e water ereditati dalla classe padre, e milk...
Il main <ul><li>public static void main(String args[]) { </li></ul><ul><li>MacchinaCaffeCappuccio mcc = new MacchinaCaffeC...
Ancora la visibilità <ul><li>Molto spesso le classi derivate devono operare sulle variabili private della classe padre.  <...
Nuova versione <ul><li>protected  float water; </li></ul><ul><li>protected  float caffe; </li></ul><ul><li>public float ge...
Ancora i costruttori <ul><li>Ovviamente, è opportuno creare dei costruttori “speciali” per gli oggetti derivati </li></ul>...
Il codice <ul><li>public MacchinaCaffeCappuccio(float water, float caffe, float milk) { </li></ul><ul><li>super(water, caf...
Overriding <ul><li>Nella classe derivata, è possibile redfinire metodi già presenti nella classe base (magari per adattarl...
Attributi statici <ul><li>Gli attributi statici sono attributi che non fanno parte di un particolare oggetto, ma piuttosto...
Esempio <ul><li>//all'interno della classe  </li></ul><ul><li>public static int anno; </li></ul><ul><li>//anno di produzio...
Idiosincrasie statiche <ul><li>Risulta piuttosto difficile e poco elegante inizializzare  variabili statiche </li></ul><ul...
Esempio <ul><li>static { </li></ul><ul><li>anno=2010; </li></ul><ul><li>} </li></ul>
Metodi statici <ul><li>Allo stesso modo possiamo avere metodi che non sono legati a una oggetto, ma fanno parte della clas...
Esempio <ul><li>//Oltre al ben noto “public static void main”, possiamo definire una funzione come questa </li></ul><ul><l...
Riassumendo <ul><li>Abbiamo visto un altro grande concetto base dell'OOP, l'ereditarietà, ed abbiamo introdotto variabili ...
 
Licenza <ul><li>Questo documento è soggetto alla licenza Creative Common BY-SA (Attribution – Share Alike) </li></ul>
Upcoming SlideShare
Loading in …5
×

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

1,582 views

Published on

Una introduzione semplice e (spero) intuitiva al mondo della programmazione a oggetti usando come riferimento una macchina del caffé (tipo Nespresso)
Slides 2 di 3

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

No Downloads
Views
Total views
1,582
On SlideShare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
28
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

  1. 1. La programmazione a oggetti e le macchine del caffé (PARTE 2) Prof. Marcello Missiroli
  2. 2. Di cosa parliamo <ul><li>Ulteriori vantaggi della programmazione a oggetti </li></ul><ul><li>Ereditarietà (in generale e in Java) </li></ul><ul><li>Metodi e attributi statici </li></ul>
  3. 3. Miglioriamo il programma <ul><li>Il nostro oggetto funziona bene, ma si potrebbe decidere di aggiungere la funzionalità di sbattitore per il cappuccino </li></ul><ul><li>Tutto il resto resta invariato, ma vogliamo qualcosa in più </li></ul>
  4. 4. Ampliamo
  5. 5. In modo tradizionale.. <ul><li>Bisogna, in pratica, riprogettare tutto daccapo. </li></ul><ul><li>L'aggiunta di un nuovo campo allo struct lo rende in tutto o in parte incompatibile con le funzioni esistenti </li></ul>
  6. 6. ...ma con gli oggetti <ul><li>Possiamo costruire un oggetto più “preciso”, più “raffinato” partendo da uno grezzo, ereditando tutto l'esistente e cambiando solo quello che serve </li></ul><ul><li>In gergo tale caratteristica si chiama “Ereditarietà” </li></ul>
  7. 7. La classe 'figlia' <ul><li>public class MacchinaCaffeCappuccio extends MacchinaCaffe { </li></ul><ul><li>private float milk; </li></ul><ul><li>boolean makeCappuccio(int seconds) { return true;}; </li></ul><ul><li>public float getMilk() </li></ul><ul><li>{ return milk; } </li></ul><ul><li>public void setMilk(float milk) { this.milk = caffe; } </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  8. 8. Cosa abbiamo ottenuto? <ul><li>La nuova classe possiede TRE attributi, coffee e water ereditati dalla classe padre, e milk, appena creata. </li></ul><ul><li>Possiede tutti metodi della classe padre, più setMilk(), getMilk() e makeCappuccio() </li></ul>
  9. 9. Il main <ul><li>public static void main(String args[]) { </li></ul><ul><li>MacchinaCaffeCappuccio mcc = new MacchinaCaffeCappuccio(); </li></ul><ul><li>mcc.setCaffe(34); </li></ul><ul><li>mcc.setMilk(22); </li></ul><ul><li>} </li></ul>Metodo della classe padre Metodo della classe figlia
  10. 10. Ancora la visibilità <ul><li>Molto spesso le classi derivate devono operare sulle variabili private della classe padre. </li></ul><ul><li>Si può fare tramite getter e setter, ma spesso il codice risulta inutilmente prolisso </li></ul><ul><li>Per questo motivo si usa spesso il livello di protezione “protected”, che permette libero accesso alla classi figlie. </li></ul>
  11. 11. Nuova versione <ul><li>protected float water; </li></ul><ul><li>protected float caffe; </li></ul><ul><li>public float getCaffe() </li></ul><ul><li>{ return caffe; } </li></ul><ul><li>public void setCaffe(float caffe) { this.caffe = caffe; } </li></ul><ul><li>public float getWater() </li></ul><ul><li>{return water;} </li></ul><ul><li>public void setWater(float water) { this.water = water; } </li></ul>
  12. 12. Ancora i costruttori <ul><li>Ovviamente, è opportuno creare dei costruttori “speciali” per gli oggetti derivati </li></ul><ul><li>In questo caso, il costruttore 'figlio' deve chiamare il costruttore dell'oggetto 'padre' in modo esplicito, tramite la chiamata “super”. </li></ul>
  13. 13. Il codice <ul><li>public MacchinaCaffeCappuccio(float water, float caffe, float milk) { </li></ul><ul><li>super(water, caffe); </li></ul><ul><li>this.milk = milk; </li></ul><ul><li>} </li></ul>
  14. 14. Overriding <ul><li>Nella classe derivata, è possibile redfinire metodi già presenti nella classe base (magari per adattarla alle nuove caratteristiche) </li></ul>
  15. 15. Attributi statici <ul><li>Gli attributi statici sono attributi che non fanno parte di un particolare oggetto, ma piuttosto sono legati alla classe. </li></ul><ul><li>Sono pertanto accessibili liberamente, senza istanzanziare nulla, facendo riferimento al nome della classe. </li></ul><ul><li>Ricordano in parte le variabili globali, in parte le variabili statiche del C/C++ </li></ul>
  16. 16. Esempio <ul><li>//all'interno della classe </li></ul><ul><li>public static int anno; </li></ul><ul><li>//anno di produzione della macchina </li></ul><ul><li>//Si richiamano così: </li></ul><ul><li>MacchinaCaffeCappuccio.anno=1; </li></ul>
  17. 17. Idiosincrasie statiche <ul><li>Risulta piuttosto difficile e poco elegante inizializzare variabili statiche </li></ul><ul><li>Per questo motivo java dispone di un costrutto che esegue codice la prima volta in cui una classe è caricata in memoria. </li></ul><ul><li>Potete vederlo come un “inizializzatore statico” </li></ul>
  18. 18. Esempio <ul><li>static { </li></ul><ul><li>anno=2010; </li></ul><ul><li>} </li></ul>
  19. 19. Metodi statici <ul><li>Allo stesso modo possiamo avere metodi che non sono legati a una oggetto, ma fanno parte della classe. </li></ul><ul><li>Ricordano le funzioni di tipo classico </li></ul><ul><li>Permettono di offrire servizi anche ad altri oggetti. Molto utilizzati negli oggetti predefiniti (es: Math) </li></ul>
  20. 20. Esempio <ul><li>//Oltre al ben noto “public static void main”, possiamo definire una funzione come questa </li></ul><ul><li>public static stampaCopy() { </li></ul><ul><li>System.out.println(“Copyright 2010 by me”); </li></ul><ul><li>} </li></ul><ul><li>//e si richiama come </li></ul><ul><li>MacchinaCaffeCappuccio.stampaCopy(); </li></ul>
  21. 21. Riassumendo <ul><li>Abbiamo visto un altro grande concetto base dell'OOP, l'ereditarietà, ed abbiamo introdotto variabili e metodi statici </li></ul><ul><ul><li>Nelle prossime lezioni parleremo di ereditarietà multipla e interfacce. </li></ul></ul>
  22. 23. Licenza <ul><li>Questo documento è soggetto alla licenza Creative Common BY-SA (Attribution – Share Alike) </li></ul>

×