• Non ci sono risultati.

Programmazione Orientata agli Oggetti in Linguaggio Java

N/A
N/A
Protected

Academic year: 2022

Condividi "Programmazione Orientata agli Oggetti in Linguaggio Java"

Copied!
12
0
0

Testo completo

(1)

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

ðComponenti

Classi e Oggetti: Introduzione >> Sommario

(2)

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

(3)

G. Mecca - Programmazione Orientata agli Oggetti 5

Il Messaggio Fondamentale

m

In questa prima parte del corso

ðprogrammazione basata sugli oggetti

m

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 Cinese

m

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

(4)

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

(5)

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

(6)

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

(7)

G. Mecca - Programmazione Orientata agli Oggetti 13

Un Esempio

m

La lezione appresa da quest’esempio

ðil modello di esecuzione di un linguaggio

come 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

(8)

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

(9)

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

(10)

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 oggetti

m

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

(11)

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

(12)

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

ðComponenti

Classi 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.

Riferimenti

Documenti correlati

I campi campi descrivono le proprietà delle istanze della classe; ogni campo:. • ha

Per usare un oggetto di tipo OutputWindow, il metodo OutputWindow main main deve prima crearne uno. La classe OutputWindow OutputWindow definisce le caratteristiche dei

Il metodo readString readString () () di un oggetto di tipo InputWindow InputWindow apre un pannello con un messaggio (“ Insert Insert a string a string”) che chiede di inserire

• La dichiarazione di classe incapsula (cioè nasconde) la definizione dei campi e dei metodi degli oggetti creabili come istanza della classe?. • A tempo di esecuzione, un

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

 definisce le variabili (memoria privata) ed i metodi (interfaccia) di tali oggetti.  altri punti

Quindi il vecchio metodo ereditato non esiste più nella sottoclasse, ma esiste ancora nella sopraclasse, poiché i metodi ereditati dalla sottoclasse sono indipendenti dai