G. Mecca – Università della Basilicata – mecca@unibas.it
Programmazione Orientata agli Oggetti in Linguaggio Java
Classi e Oggetti:
Introduzione
versione 1.2
Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Sommario
m
Il Messaggio Fondamentale
m
Un Esempio
ðLa Morra Cinese in Java
m
Concetti Noti
m
Concetti Nuovi
ðComponentiClassi e Oggetti: Introduzione >> Sommario
G. Mecca - Programmazione Orientata agli Oggetti 3
Il Messaggio Fondamentale
m
ATTENZIONE
Classi e Oggetti: Introduzione >> Il Messaggio Fondamentale
la programmazione Orientata agli Oggetti è basata su principi e tecniche completamente
diversi rispetto a quelli della programmazione procedurale tradizionale
è necessario fare uno sforzo per cambiare drasticamente mentalità
4
Il Messaggio Fondamentale
m
In effetti
ði linguaggi di programmazione a oggetti sono basati su alcuni concetti comuni ai linguaggi di programmazione procedurali
ðin questo corso sono prerequisiti
m
Però
ðci sono però numerosi concetti
completamente nuovi, sia di carattere tecnologico che metodologico
Classi e Oggetti: Introduzione >> Il Messaggio Fondamentale
G. Mecca - Programmazione Orientata agli Oggetti 5
Il Messaggio Fondamentale
m
In questa prima parte del corso
ðprogrammazione basata sugli oggettim
Ovvero
ðle tecniche fondamentali per la definizione delle classi
ðper la creazione e la manipolazione degli oggetti
ðtrascurando gli aspetti più complessi della programmazione orientata agli oggetti
Classi e Oggetti: Introduzione >> Il Messaggio Fondamentale
Un Esempio
m
Ragioniamo su un esempio
ðil gioco della Morra Cinesem
La Morra Cinese in “clean C”
ðcirca 250 linee di codice
ðun unico file di codice sorgente ðmain + 15 sottoprogrammi
ðcomplessivamente 7 costanti globali, 31 parametri, 16 variabili locali ai moduli
Classi e Oggetti: Introduzione >> Un Esempio
>> morraCinese4.cpp
G. Mecca - Programmazione Orientata agli Oggetti 7
Un Esempio
m Esecuzione del codice
ðsequenza di chiamate di sottoprogrammi
ðin ogni momento, la pila rappresenta completamente lo stato dell’applicazione
ðin particolare, contiene tutti i dati in quel momento utilizzati dal programma
m Esempio
ðmain chiama gioca che chiama nuovaPartita
ðla pila mi dice il nome, il punteggio della partita e il punteggio complessivo del gioco
Classi e Oggetti: Introduzione >> Un Esempio
8
Un Esempio
m
La morra cinese in Java con Swing
ðle stesse funzionalitàðvarie novità significative
m
Principale novità
ðinterfaccia utente grafica
(GUI, “Graphical User Interface”) ðl’interazione dell’utente non avviene
attraverso la console ma attraverso il mouse ðmodalità diversa di controllo (menu, bottoni..)
Classi e Oggetti: Introduzione >> Un Esempio
>> it.unibas.morracineseswingbase
G. Mecca - Programmazione Orientata agli Oggetti 9
Un Esempio
m
Alcune statistiche
ðcirca 430 linee di codice sorgente ð5 file di codice sorgente, 11 classi
ðdurante l’esecuzione l’applicazione crea varie migliaia di oggetti
ðcomplessità molto maggiore
m
Informazioni sull’esecuzione
ðottenute attraverso il “profiler” standard della macchina virtuale Java (hprof)
Classi e Oggetti: Introduzione >> Un Esempio
>> hprof + HPJMeter
Un Esempio
m
In altri termini
ðil modello di esecuzione è completamente diverso
ðl’esecuzione è basata sull’utilizzo di una pila ðma lo stato dell’applicazione non è tenuto
esclusivamente nella pila
ðbensì dipende dall’interazione tra le classi e gli oggetti dell’applicazione
Classi e Oggetti: Introduzione >> Un Esempio
G. Mecca - Programmazione Orientata agli Oggetti 11
Un Esempio
m
Attenzione
ðsi potrebbe pensare che questa maggiore complessità sia dovuta all’interfaccia grafica ðin effetti la programmazione dell’interfaccia
grafica è un argomento complesso che verrà affrontato decisamente più avanti
ðma in parte le differenze nel modello di programmazione sono inerenti
Classi e Oggetti: Introduzione >> Un Esempio
12
Un Esempio
m
Di conseguenza
ðper ora ci concentriamo su una versione decisamente più semplice e più simile a quella sviluppata in “clean C”
m
La morra cinese in Java con la console
ðcirca 287 linee di codiceð5 classi
ðanche in questo caso varie migliaia di oggetti
Classi e Oggetti: Introduzione >> Un Esempio
>> it.unibas.morracinesesemplice
G. Mecca - Programmazione Orientata agli Oggetti 13
Un Esempio
m
La lezione appresa da quest’esempio
ðil modello di esecuzione di un linguaggiocome Java è decisamente più elaborato di quelli della programmazione procedurale ðmolti più aspetti da tenere sotto controllo (es:
ai fini dell’efficienza, consumo di memoria) ðinoltre, l’elemento essenziale del
funzionamento del programma sembrano essere le relazioni tra classi e oggetti
Classi e Oggetti: Introduzione >> Un Esempio
Concetti Noti
m
Nel seguito
ðcercheremo di interpretare queste novità
m
Nel frattempo però
ðcerchiamo di identificare alcuni concetti del linguaggio che ci sono già familiari
ðlo facciamo raffrontando il codice della morra cinese in “clean C” (in giallo)
ðcon quello in Java basato su console
Classi e Oggetti: Introduzione >> Concetti Noti
G. Mecca - Programmazione Orientata agli Oggetti 15
Concetti Noti
m
Elementi comuni ai due linguaggi
ðvariabile, costante, tipo di dato ðespressioni e assegnazioni ðlettura e stampaðstrutture di controllo (if, cicli) ðsottoprogrammi
m
Esempio
ðschermoMenuPrincipale, giocata
Classi e Oggetti: Introduzione >> Concetti Noti
16
Concetti Noti
int schermoMenuPrincipale() { int scelta;
cout << "+---+\n";
cout << "| 1. Nuova Partita |\n";
cout << "| 2. Visualizza Vittorie |\n";
cout << "| 3. Esci dal Gioco |\n";
cout << "+---+\n";
cout << " Scelta --> ";
cin >> scelta;
while ((scelta < 1) || (scelta > 3)) {
cout << "***** Errore. Nuova scelta --> ";
cin >> scelta;
}
return scelta;
}
Classi e Oggetti: Introduzione >> Concetti Noti
G. Mecca - Programmazione Orientata agli Oggetti 17
Concetti Noti
private int schermoMenuPrincipale() { int scelta;
System.out.println ("+---+");
System.out.println ("| 1. Nuova Partita |");
System.out.println ("| 2. Visualizza Vittorie |");
System.out.println ("| 0. Esci dal Gioco |");
System.out.println ("+---+");
System.out.print (" Scelta --> ");
scelta = it.unibas.utilita.Console.leggiIntero();
while ((scelta < 0) || (scelta > 2)) {
System.out.print ("***** Errore: Scelta scorretta. Nuova scelta --> ");
scelta = it.unibas.utilita.Console.leggiIntero();
}return scelta;
}
Classi e Oggetti: Introduzione >> Concetti Noti
Concetti Noti
string giocata(int numero) { string s;
if (numero == CARTA) { s = "carta";
} else if (numero == FORBICI) { s = "forbici";
} else if (numero == SASSO) { s = "sasso";
}
return s;
}
Classi e Oggetti: Introduzione >> Concetti Noti
G. Mecca - Programmazione Orientata agli Oggetti 19
Concetti Noti
public static String getGiocata (int mossa) { String s;
if (mossa == Mano.CARTA) { s = "carta";
} else if (mossa == Mano.FORBICI) { s = "forbici";
} else if (mossa == Mano.SASSO) { s = "sasso";
}return s;
}
Classi e Oggetti: Introduzione >> Concetti Noti
20
Principali Concetti Nuovi
m
I due concetti completamente nuovi
ðclassi ed oggettim
In queste lezioni
ðcosa sono le classi, cosa sono gli oggetti ðcome si scrivono
ðcome funzionano
ðil concetto di incapsulamento
Classi e Oggetti: Introduzione >> Principali Concetti Nuovi
G. Mecca - Programmazione Orientata agli Oggetti 21
Componenti
m
Applicazione tradizionale
ðcollezione di funzioni e procedure ðeventualmente organizzate in librerie
m
Applicazione a oggetti
ðcollezione di componenti che si scambiano messaggi
m
Componente
ðpezzo di software capace di svolgere compiti
Classi e Oggetti: Introduzione >> Principali Concetti Nuovi
Componenti
Classi e Oggetti: Introduzione >> Principali Concetti Nuovi
servizi informazioni Componente
servizi informazioni Componente
servizi informazioni Componente servizi
informazioni Componente
messaggio
messaggio
messaggio utente
G. Mecca - Programmazione Orientata agli Oggetti 23
Riassumendo
m
Il Messaggio Fondamentale
m
Un Esempio
ðLa Morra Cinese in Java
m
Concetti Noti
m
Concetti Nuovi
ðComponentiClassi e Oggetti: Introduzione >> Sommario
24
Termini della Licenza
Termini della Licenza
m This work is licensed under the Creative Commons Attribution- ShareAlike License. To view a copy of this license, visit
http://creativecommons.org/licenses/by-sa/1.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
m Questo lavoro viene concesso in uso secondo i termini della licenza “Attribution-ShareAlike” di Creative Commons. Per ottenere una copia della licenza, è possibile visitare
http://creativecommons.org/licenses/by-sa/1.0/ oppure inviare una lettera all’indirizzo Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.