Una introduzione semplice e (spero) intuitiva al mondo della programmazione a oggetti usando come riferimento una macchina del caffé (tipo Nespresso) (1/3)
Versione 2: tolto qualche refuso, aggiunto un paio di slide chairificatori.
Programmazione a oggetti tramite la macchina del caffé (1/3)
1. La programmzione a oggetti
e le macchine del caffé
v. 2
Prof. Marcello Missiroli
2. Di cosa parliamo
Vantaggi della programmazione a oggetti
Terminologia del nuovo paradigma
Tipi di visibilità
3. Partiamo dalla moka
• Supponiamo di dover scrivere un
programma per fare il caffè.
• Avremo bisogno di memorizzare la
quantità d'acqua e di caffè, nonché il
tempo di accensione
4. Il codice in C
• struct moka {
• float water; float coffee;
• }
• boolean make_coffee(moka *m,
int time);
5. Problemi
• Scalabilità. Dobbiamo ogni volta passare
tutti i dati alla funzione. Se abbiamo 1000
moke?
• Protezione. Le variabili possono essere
modificate esternamente alla procedura
senza controllo.
6. Cambiamo paradigma
Nel linguaggio comune un paradigma è un
modello di riferimento, un termine di
paragone. La parola deriva dal greco
antico paràdeigma, che significa
esemplare, esempio.
7. Il paradigma attuale
Il modello di programmazione attuale è
detto modello imperativo, basato su
concetti quali
Procedure
Funzioni
Variabili (possibilmente non globali)
Parametri
8. Il paradigma a oggetti
La programmazione orientata agli oggetti
(OOP, Object Oriented Programming) è
un paradigma di programmazione, che
prevede la definizione di oggetti software
che interagiscono gli uni con gli altri
attraverso lo scambio di messaggi.
9. La classe
La classe è lo strumento usato per definire
la struttura degli oggetti e il loro
funzionamento.
(in termini classici, ricorda le struct con
l'aggiunta di nuove parole chiave e con
l'insermento delle procedure)
10. L'istanziazione
L'istanziazione è il meccanismo tramite il
quale si crea un oggetto. Ricorda una
variabile ma ha diverse caratteristiche in
più .
(In termini classici, ricorda la creazione di
una variabile dinamica tramite malloc, ma
notevolemente semplificata)
12. Nuove terminologie
Strutture dati → OggettiOggetti
Funzioni → MetodiMetodi
Variabile → OggettoOggetto
Definire una variabile → Istanziare unIstanziare un
oggettooggetto
Richiamare una funzione → Inviare unInviare un
messaggio a un oggettomessaggio a un oggetto
14. Protezione
Si introduce il concetto di accesibilità
variabile per vari motivi quali:
* Per proteggere il programmatore da se
stesso
* Per separare interfaccia e
implementazione
16. Tipi di visibilità
Private:Private: Visibile solo alla classe attuale
Package-privatePackage-private (detta anche defaultdefault)
Visibile solo all'interno del pacchetto
Esiste solo in Java – generalmente non è una
buona idea
Protected:Protected: Visibile solo alle classi derivate
Public:Public: Visibile a tutti
17. In gergo OOP
Il meccanismo di protezione e visibilità (che
si estende anche ai metodi) viene
chiamato
INCAPSULAMENTO
18. Costruttori
Moltissimi errori banali di programmazione
possono essere evitati assegnando
opportuni valori di default alle variabili
(cosa che spesso i programmatori
dimenticano)
Nell'OOP tale concetto viene ampliato e
raffinato introducendo i costruttori
19. Cosa sono
I costruttori sono particolari metodi che
vengono chiamati in modo automatico nel
momento dell'istanziazione di una
variabile.
Sono metodi speciali che NON hanno valore
di ritorno (ma possono avere parametri) e
devono essere public.
21. Polimorfismo
Al contrario di altri linguaggi, come il C, è
POSSIBILE dichiarare più volte la stessa
variabile con un diverso numero e tipo di
parametri.
Potremmo quindi dichiarare una seconda
variante del costruttore che inizializza a un
dato valore i dati privati.
23. What the helll is thisthis?
public MacchinaCaffe(float water,
float caffe) {
thisthis.water = water;
thisthis.caffe = caffe; }
This è un riferimento all'oggetto istanziato. Il più delle volte non è necessario.
In questo caso si: altrimenti non si distingue tra water (parametro del metodo) e
water (attributo dell'oggetto)
24. Riassumendo
Abbiamo visto alcuni concetti fondamentali della
OOP/OOD:
Separazione interfaccia/implementazione
Incapsulamento
Polimorfismo
Nelle prossime lezioni parleremo di ereditarietà e
interfacce.
25.
26. Licenza
Questo documento è soggetto alla licenza
Creative Common BY-SA (Attribution –
Share Alike)
prof.missiroli@gmail.com