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

23
La programmazione a oggetti e le macchine del caffé (PARTE 2) Prof. Marcello Missiroli

Upload: marcello-missiroli

Post on 13-Jun-2015

1.297 views

Category:

Technology


3 download

DESCRIPTION

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

TRANSCRIPT

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

La programmazione a oggetti e le macchine del caffé

(PARTE 2)

Prof. Marcello Missiroli

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

Di cosa parliamo

Ulteriori vantaggi della programmazione a oggetti

Ereditarietà (in generale e in Java)

Metodi e attributi statici

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

Miglioriamo il programma

• Il nostro oggetto funziona bene, ma si potrebbe decidere di aggiungere la funzionalità di sbattitore per il cappuccino

• Tutto il resto resta invariato, ma vogliamo qualcosa in più

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

Ampliamo

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

In modo tradizionale..

• Bisogna, in pratica, riprogettare tutto daccapo.

• L'aggiunta di un nuovo campo allo struct lo rende in tutto o in parte incompatibile con le funzioni esistenti

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

...ma con gli oggetti

Possiamo costruire un oggetto più “preciso”, più “raffinato” partendo da uno grezzo, ereditando tutto l'esistente e cambiando solo quello che serve

In gergo tale caratteristica si chiama “Ereditarietà”

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

La classe 'figlia'

public class MacchinaCaffeCappuccio extends MacchinaCaffe {

private float milk; boolean makeCappuccio(int seconds) { return true;};

public float getMilk() { return milk; }

public void setMilk(float milk) { this.milk = caffe; }

}}

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

Cosa abbiamo ottenuto?

La nuova classe possiede TRE attributi, coffee e water ereditati dalla classe padre, e milk, appena creata.

Possiede tutti metodi della classe padre, più setMilk(), getMilk() e makeCappuccio()

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

Il main

public static void main(String args[]) {

MacchinaCaffeCappuccio mcc = new MacchinaCaffeCappuccio();

mcc.setCaffe(34); mcc.setMilk(22); }

Metodo Metodo delladella classeclasse padrepadre

Metodo Metodo delladellaclasseclassefigliafiglia

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

Ancora la visibilità

Molto spesso le classi derivate devono operare sulle variabili private della classe padre.

Si può fare tramite getter e setter, ma spesso il codice risulta inutilmente prolisso

Per questo motivo si usa spesso il livello di protezione “protected”, che permette libero accesso alla classi figlie.

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

Nuova versione protected float water; protected float caffe;

public float getCaffe() { return caffe; }

public void setCaffe(float caffe) { this.caffe = caffe; }

public float getWater() {return water;}

public void setWater(float water) { this.water = water; }

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

Ancora i costruttori

Ovviamente, è opportuno creare dei costruttori “speciali” per gli oggetti derivati

In questo caso, il costruttore 'figlio' deve chiamare il costruttore dell'oggetto 'padre' in modo esplicito, tramite la chiamata “super”.

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

Il codice

public MacchinaCaffeCappuccio(float water, float caffe, float milk) {

super(water, caffe); this.milk = milk; }

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

Overriding

Nella classe derivata, è possibile redfinire metodi già presenti nella classe base (magari per adattarla alle nuove caratteristiche)

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

Attributi statici

Gli attributi statici sono attributi che non fanno parte di un particolare oggetto, ma piuttosto sono legati alla classe.

Sono pertanto accessibili liberamente, senza istanzanziare nulla, facendo riferimento al nome della classe.

Ricordano in parte le variabili globali, in parte le variabili statiche del C/C++

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

Esempio

//all'interno della classe public static int anno;//anno di produzione della macchina

//Si richiamano così:MacchinaCaffeCappuccio.anno=1;

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

Idiosincrasie statiche

Risulta piuttosto difficile e poco elegante inizializzare variabili statiche

Per questo motivo java dispone di un costrutto che esegue codice la prima volta in cui una classe è caricata in memoria.

Potete vederlo come un “inizializzatore statico”

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

Esempio

static {

anno=2010;}

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

Metodi statici

Allo stesso modo possiamo avere metodi che non sono legati a una oggetto, ma fanno parte della classe.

Ricordano le funzioni di tipo classico

Permettono di offrire servizi anche ad altri oggetti. Molto utilizzati negli oggetti predefiniti (es: Math)

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

Esempio

//Oltre al ben noto “public static void main”, possiamo definire una funzione come questa

public static stampaCopy() {System.out.println(“Copyright 2010 by me”);

}//e si richiama come

MacchinaCaffeCappuccio.stampaCopy();

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

Riassumendo

Abbiamo visto un altro grande concetto base dell'OOP, l'ereditarietà, ed abbiamo introdotto variabili e metodi statici

Nelle prossime lezioni parleremo di ereditarietà multipla e interfacce.

Page 22: Programmazione a oggetti tramite la macchina del caffé (pt. 2)
Page 23: Programmazione a oggetti tramite la macchina del caffé (pt. 2)

Licenza

Questo documento è soggetto alla licenza Creative Common BY-SA (Attribution – Share Alike)