SlideShare une entreprise Scribd logo
1  sur  26
La programmzione a oggetti
e le macchine del caffé
v. 2
Prof. Marcello Missiroli
Di cosa parliamo
Vantaggi della programmazione a oggetti
Terminologia del nuovo paradigma
Tipi di visibilità
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
Il codice in C
• struct moka {
• float  water; float coffee; 
• }
• boolean make_coffee(moka *m, 
int time);
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.
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.
Il paradigma attuale
Il modello di programmazione attuale è
detto modello imperativo, basato su
concetti quali
Procedure
Funzioni
Variabili (possibilmente non globali)
Parametri
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.
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)
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)
Modernizziamoci
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
Il main
    public static void main(String 
args[]) {
        MacchinaCaffe mc = new 
MacchinaCaffe();
        mc.water=2.0f;  
mc.caffe=3.4f;      
System.out.println(mc.make_coffee(10));
    }
istanziazioneistanziazione
Accesso agli attributi
Invio di un messaggio (make_coffee) all'oggetto mc
Protezione
Si introduce il concetto di accesibilità
variabile per vari motivi quali:
* Per proteggere il programmatore da se
stesso
* Per separare interfaccia e
implementazione
Nuova versione
 private float water; private 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; }
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
In gergo OOP
Il meccanismo di protezione e visibilità (che
si estende anche ai metodi) viene
chiamato
INCAPSULAMENTO
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
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.
Esempio
    public MacchinaCaffe() {
        this.water = 0f;
        this.caffe = 0f;
    }
Nel momento in cui si istanzia una variabile
MacchinaCaffe, automaticamente le sue
variabili sono inizializzate a 0
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.
Esempio II
    public MacchinaCaffe(float water, 
float caffe) {
        this.water = water;
        this.caffe = caffe; }
Si usa in questo modo
MacchinaCaffe mc1= new 
MacchinaCaffe(30f,10f);
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)
Riassumendo
Abbiamo visto alcuni concetti fondamentali della
OOP/OOD:
Separazione interfaccia/implementazione
Incapsulamento
Polimorfismo
Nelle prossime lezioni parleremo di ereditarietà e
interfacce.
Licenza
Questo documento è soggetto alla licenza
Creative Common BY-SA (Attribution –
Share Alike)
prof.missiroli@gmail.com

Contenu connexe

Similaire à Programmazione a oggetti tramite la macchina del caffé (1/3)

Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTfirenze-gtug
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsGiorgio Di Nardo
 
Flavio ATZENI - SMAU 2014
Flavio ATZENI - SMAU 2014Flavio ATZENI - SMAU 2014
Flavio ATZENI - SMAU 2014Paradisi63
 
Introduction to C#
Introduction to C#Introduction to C#
Introduction to C#Guido Magrin
 
Spring Framework
Spring FrameworkSpring Framework
Spring FrameworkNaLUG
 
Il pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoIl pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoMicrosoft Mobile Developer
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPGiorgio Cefaro
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiMarco Gasparetto
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group MilanoMassimo Groppelli
 
Introduzione alla programmazione Java
Introduzione alla programmazione JavaIntroduzione alla programmazione Java
Introduzione alla programmazione JavaMassimiliano Brolli
 
Come mettere in sicurezza le applicazioni legacy, un approccio pragmatico
Come mettere in sicurezza le applicazioni legacy, un approccio pragmaticoCome mettere in sicurezza le applicazioni legacy, un approccio pragmatico
Come mettere in sicurezza le applicazioni legacy, un approccio pragmaticoAntonio Parata
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Marco Loregian
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingMarco Breveglieri
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Giacomo Russo
 

Similaire à Programmazione a oggetti tramite la macchina del caffé (1/3) (20)

Niccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWTNiccolò Becchi: Introduzione a GWT
Niccolò Becchi: Introduzione a GWT
 
Guida C++
Guida C++Guida C++
Guida C++
 
Rich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.jsRich client application: MVC4 + MVVM = Knockout.js
Rich client application: MVC4 + MVVM = Knockout.js
 
Java introduzione
Java introduzioneJava introduzione
Java introduzione
 
Flavio ATZENI - SMAU 2014
Flavio ATZENI - SMAU 2014Flavio ATZENI - SMAU 2014
Flavio ATZENI - SMAU 2014
 
Introduction to C#
Introduction to C#Introduction to C#
Introduction to C#
 
introduzione a symfony 2
introduzione a symfony 2 introduzione a symfony 2
introduzione a symfony 2
 
Spring Framework
Spring FrameworkSpring Framework
Spring Framework
 
Java sul tuo Mac
Java sul tuo MacJava sul tuo Mac
Java sul tuo Mac
 
Il pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progettoIl pattern mvvm come strutturare al meglio il vostro progetto
Il pattern mvvm come strutturare al meglio il vostro progetto
 
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHPNetbeans e Xdebug per debugging e profiling di applicazioni PHP
Netbeans e Xdebug per debugging e profiling di applicazioni PHP
 
App Engine + Python
App Engine + PythonApp Engine + Python
App Engine + Python
 
WhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessiWhyMCA12 - Android Tools e la gestione di progetti complessi
WhyMCA12 - Android Tools e la gestione di progetti complessi
 
PowerMock TDD User Group Milano
PowerMock TDD User Group MilanoPowerMock TDD User Group Milano
PowerMock TDD User Group Milano
 
Introduzione alla programmazione Java
Introduzione alla programmazione JavaIntroduzione alla programmazione Java
Introduzione alla programmazione Java
 
Come mettere in sicurezza le applicazioni legacy, un approccio pragmatico
Come mettere in sicurezza le applicazioni legacy, un approccio pragmaticoCome mettere in sicurezza le applicazioni legacy, un approccio pragmatico
Come mettere in sicurezza le applicazioni legacy, un approccio pragmatico
 
Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3Sistemi Context-aware: Esercitazione 3
Sistemi Context-aware: Esercitazione 3
 
Dal C a Java (1/3)
Dal C a Java (1/3)Dal C a Java (1/3)
Dal C a Java (1/3)
 
Delphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del TestingDelphi & Dintorni Webinar - Diventa un mago del Testing
Delphi & Dintorni Webinar - Diventa un mago del Testing
 
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
Progetto MigrOS: progettazione e sviluppo degli strumenti di transcodifica de...
 

Plus de Marcello Missiroli (20)

Algorithmist guide II
Algorithmist guide IIAlgorithmist guide II
Algorithmist guide II
 
Guida del perfetto Algoritmista I
Guida del perfetto Algoritmista IGuida del perfetto Algoritmista I
Guida del perfetto Algoritmista I
 
Workshop: Introduzione ad TDD
Workshop: Introduzione ad TDDWorkshop: Introduzione ad TDD
Workshop: Introduzione ad TDD
 
Dal c a Java (3/3)
Dal c a Java (3/3)Dal c a Java (3/3)
Dal c a Java (3/3)
 
Dal C a Java (2/3)
Dal C a Java (2/3)Dal C a Java (2/3)
Dal C a Java (2/3)
 
Variabili
VariabiliVariabili
Variabili
 
Sviluppo degli algoritmi
Sviluppo degli algoritmiSviluppo degli algoritmi
Sviluppo degli algoritmi
 
5 stadi dello sviluppo di un gruppo
5 stadi dello sviluppo di un gruppo5 stadi dello sviluppo di un gruppo
5 stadi dello sviluppo di un gruppo
 
Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!Vogliamo programmatori stupidi e pigri!
Vogliamo programmatori stupidi e pigri!
 
Big O Notation
Big O NotationBig O Notation
Big O Notation
 
Insegnare Agile
Insegnare AgileInsegnare Agile
Insegnare Agile
 
The Sequel to sql
The Sequel to sqlThe Sequel to sql
The Sequel to sql
 
L'avvento del programmatore sociale
L'avvento del programmatore socialeL'avvento del programmatore sociale
L'avvento del programmatore sociale
 
Il ciclo for
Il ciclo forIl ciclo for
Il ciclo for
 
Lo stack: tipo di dato astratto e implementazione in Java
Lo stack: tipo di dato astratto e implementazione in JavaLo stack: tipo di dato astratto e implementazione in Java
Lo stack: tipo di dato astratto e implementazione in Java
 
Controllo di versione e Git
Controllo di versione e GitControllo di versione e Git
Controllo di versione e Git
 
Ruby in 25 minuti
Ruby in 25 minutiRuby in 25 minuti
Ruby in 25 minuti
 
Moodle: i compiti (homework)
Moodle: i compiti (homework)Moodle: i compiti (homework)
Moodle: i compiti (homework)
 
Uefi: l'eterna lotta tra il bene e il male
Uefi: l'eterna lotta tra il bene e il maleUefi: l'eterna lotta tra il bene e il male
Uefi: l'eterna lotta tra il bene e il male
 
Corso Moodle: presentazione
Corso Moodle: presentazioneCorso Moodle: presentazione
Corso Moodle: presentazione
 

Programmazione a oggetti tramite la macchina del caffé (1/3)