1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli...

270
1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi statici Variabili Tipi elementari Istruzioni principali

Transcript of 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli...

Page 1: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

1Programmazione ad Oggetti

Argomenti della lezione

Programmare in JavaUn esempio elementareGli strumenti di Java

Struttura di un programma JavaMetodi staticiVariabiliTipi elementari Istruzioni principali

Page 2: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

2Programmazione ad Oggetti

Il linguaggio Java

Formalismo ad alto livello...Permette di descrivere programmi basandosi su

concetti primitivi “sofisticati” (file, finestre, tabelle, liste, ecc.)

...basato su una notazione testuale familiareCodice sorgenteSimile, nella sintassi e nelle istruzioni al

linguaggio C

Page 3: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

3Programmazione ad Oggetti

Codice Sorgente

I programmi Java sono suddivisi in “classi” Le classi sono descritte all’interno di file di

testo con estensione “.java” Ogni file contiene una sola classe Il nome file deve coincidere con il nome

della classe

Page 4: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

4Programmazione ad Oggetti

Un esempio

public class Hello {

// Il programma più semplice

public static void main(String[] args) {

// Stampa un messaggio sul video

System.out.println(“Hello Java”);

}

}

public class Hello {

// Il programma più semplice

public static void main(String[] args) {

// Stampa un messaggio sul video

System.out.println(“Hello Java”);

}

}

Hello.javaHello.java

Page 5: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

5Programmazione ad Oggetti

Passi concettuali (1)

J

.javaCodice

sorgente

10010110110..

10010110110..

.classByteCode

Scrittura Compilazione

Page 6: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

6Programmazione ad Oggetti

I passi concettuali (2)

10010110110..

10010110110..

.classByteCode

Hello,

Java!

Hello,

Java!

Esecuzione

Page 7: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

7Programmazione ad Oggetti

Gli strumenti di Java

La macchina virtualeIl compilatore Gli ambienti di sviluppoLa documentazioneIl debugger

Page 8: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

8Programmazione ad Oggetti

Macchina virtuale (1)

Sistema OperativoSistema Operativo

HardwareHardware

Applicazionetradizionale

Applicazionetradizionale

MacchinaVirtuale

MacchinaVirtuale

ApplicazioneJava

ApplicazioneJava

Page 9: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

9Programmazione ad Oggetti

Macchina virtuale (2)

Astrazione di un elaboratore “generico” Ambiente di esecuzione delle applicazioni Java

Esempio: java Hello

Responsabilità:Caricamento classi dal discoVerifica consistenza codiceEsecuzione applicazione

Page 10: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

10Programmazione ad Oggetti

Il compilatore

Traduzione dei sorgenti testuali in bytecodeLinguaggio della macchina virtuale Java

Esempio:javac Hello.java

J 10010110110..

10010110110..

Page 11: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

11Programmazione ad Oggetti

Ambienti di sviluppo

Il codice sorgente Java è composto da testoUn editor qualsiasi è sufficiente

Si possono usare ambienti integrati per lo sviluppo (IDE)Offrono strumenti per la redazione, la

compilazione, l’esecuzione e la ricerca degli errori

Page 12: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

12Programmazione ad Oggetti

Esempi

Eclipsehttp://www.eclipse.org

JCreator http://www.jcreator.com

BlueJhttp://www.bluej.org

Page 13: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

13Programmazione ad Oggetti

Documentazione (1)

Strumento necessario alla sopravvivenza del programmatore Java!!

Raccolta di informazioni relative alle classi appartenenti alle librerie standard di Javahttp://java.sun.com/docs/

Page 14: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

14Programmazione ad Oggetti

Documentazione (2)

Per ogni classe:Descrizione funzionaleElenco di attributi:

funzionalità, caratteristicheElenco dei metodi:

funzionalità, parametri in ingresso, valori di ritorno, …

Page 15: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

15Programmazione ad Oggetti

Il debugger

Strumento ausiliarioal programmatoreMonitorare l’esecuzione

di una applicazioneAnalisi dei valori assunti dalle variabili, i metodi

della classe, …

Comando jdb.exe

Page 16: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

16Programmazione ad Oggetti

Cellulari ePC palmariCellulari ePC palmari

ElettrodomesticiElettrodomestici

PC clientPC client

ServerServer

Apparati di rete

Apparati di rete

Dove si usa Java?

Page 17: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

17Programmazione ad Oggetti

Java nei sistemi Client

VantaggiFacilità di realizzazione delle interfacce grafiche Indipendenza dalla piattaforma di sviluppo e di

utilizzoCiclo di sviluppo rapido Distribuzione immediata, a richiesta, tramite web

SvantaggiPrestazioni limitate rispetto ad applicazioni nativeAmbienti di esecuzione in forte evoluzione

Oggetto di questo corso

Page 18: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

18Programmazione ad Oggetti

Java nei sistemi Server

Varie tipologie di utilizzo:Servlet / Java Server Pages / Java Server FacesEnterpriseJavaBeanApplication server

È il contesto in cui Java sta ottenendo il massimo successo

Oggetto del corso “Programmazione in ambienti distribuiti”

Page 19: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

19Programmazione ad Oggetti

Java nei sistemi Embedded

Segmento di mercato in forte crescita:Milioni di PC connessi ad InternetCentinaia di milioni di telefoni cellulariMiliardi di elettrodomestici

Vengono usate librerie specificheJavaCard, Java Micro Edition, …

Page 20: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

20Programmazione ad Oggetti

Installare Java (1)

Java Software Development KIT (J2SE SDK) Versione utilizzata nel corso 1.4.xDisponibile gratuitamente:

http://java.sun.com/compilatore, librerie standard, macchina

virtuale, …

Page 21: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

21Programmazione ad Oggetti

Installare Java (2)

Necessario modificare la variabile d’ambientePATH= ... ;<JAVA_HOME>/binper invocare i comandi java (compilatore,

macchina virtuale, debugger, ...)

In Windows 2000/XPPannello di controllo

Sistema Avanzate Variabili d’ambiente

Page 22: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

24Programmazione ad Oggetti

Programmi Java

Java è un linguaggio ad oggettiL’unità minima di programmazione è la classeUn programma Java utilizza una o più classi

Per ora, consideriamo programmi formati dauna sola classeUn solo file sorgente Il nome del file coincide con il nome della classeL’estensione del file è “.java”

Page 23: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

25Programmazione ad Oggetti

Formato generale

public class Prova { /*

qui vengono riportati attributi emetodi della classe …

*/

}

public class Prova { /*

qui vengono riportati attributi emetodi della classe …

*/

}

Prova.javaProva.java

Stesso nome!

Page 24: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

26Programmazione ad Oggetti

main(…): la porta sul mondo Java

public static void main(String[] args){/* istruzioni ... */

}Punto di ingresso di ogni applicazione

Invocato automaticamente dalla VM Java

Page 25: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

27Programmazione ad Oggetti

Metodi statici

Sequenze di istruzioni che svolgono un determinato compitoHanno un nomePossono avere dei parametriPossono ritornare un valoreDovrebbero avere un commento!

Page 26: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

28Programmazione ad Oggetti

public class Test {

static int m1(int a, int b) { int c = a*a+b*b; return c; }

public static void main(String[] args) {

int i = m1(3,4); System.out.println(i);

}}

public class Test {

static int m1(int a, int b) { int c = a*a+b*b; return c; }

public static void main(String[] args) {

int i = m1(3,4); System.out.println(i);

}}

Page 27: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

29Programmazione ad Oggetti

Commenti

Servono a documentare un programma (o una sua parte)Racchiusi da “/*” e “*/” “//” inizia un commento che termina a fine riga

Usati sempre troppo poco!

Page 28: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

30Programmazione ad Oggetti

Variabili locali

I metodi possono utilizzare variabili:Servono a memorizzare

risultati intermediDichiarate nel corpo del metodoDurata temporanea: quando il metodo ritorna, la

variabile è distrutta

Page 29: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

31Programmazione ad Oggetti

Tipi: una forma per i dati

Variabili, parametri, valori ritornati hanno un tipo che ne precisa/limita l’usoPossono contenere solo valori conformi al proprio

tipoEsistono tipi

Semplici (primitivi)Composti (classi) – descritti nelle lezioni

successive

Page 30: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

32Programmazione ad Oggetti

Tipi primitivi

Numerici interibyte, short, int, long

Numerici reali float, double

Non numericiboolean, char

Page 31: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

33Programmazione ad Oggetti

Tipi numerici interi (1)

Valori ammissibilibyte {-128 ... 127}short {-32768 ... 32767}int {-2147483648 ... 2147483647}long {-9.22 E18 ... 9.22E18}

Page 32: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

34Programmazione ad Oggetti

Tipi numerici interi (2)

Operazioni consentitearitmetiche

+, -, *, /, %, ++, --, >>logiche (bit a bit)

^, &, |, ~, <<, >>>confronto

==, !=, >, >=, <, <=

Page 33: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

35Programmazione ad Oggetti

Tipi numerici reali

Valori float {±3.403E38}

6 cifre significativedouble {±1.798E308}

15 cifre significative

Operazioniaritmetiche (+, -, *, /)confronto (==, !=,

>, >=, <, <=)

Page 34: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

36Programmazione ad Oggetti

Tipi non numerici: boolean

Valori {false, true}

Operazioni logiche (&&, ||, !)confronto (==, !=)

Page 35: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

37Programmazione ad Oggetti

Tipi non numerici: char

Rappresentazione dei caratteri secondo lo standard UnicodeLettere di vari alfabeti

arabo, armeno, bengalese, cirillico,greco, latino, ...

Simbolidiacritici, punteggiatura, matematici, tecnici, ...

Page 36: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

38Programmazione ad Oggetti

Tipi non numerici: char

Rappresentazione su due byteLe costanti sono indicate tra apici semplici (‘a’) I valori non stampabili sono rappresentati nel

formato unicode (‘\u27AF’)

Operazioni confronto

(==, !=, >,>=, <, <=)

Page 37: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

39Programmazione ad Oggetti

Dichiarazioni

Introducono l’utilizzo di una variabileFormato generale

<Tipo> <Nome> ‘;’<Tipo> <Nome> ‘=’ <ValoreIniziale> ‘;’

Esempichar c; int i = 10; long l1, l2;

La mancata dichiarazione è un errore sintattico

Opzionale

Page 38: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

40Programmazione ad Oggetti

Usare le variabili (1)

Si può dichiarare una variabile ovunque nel codice di un metodoBisogna farlo, però, prima di usarlaVisibilità limitata al blocco di istruzioni in cui è

dichiarata

Le variabili devono essere inizializzate! int a; int b = a;

Errore!La variabile “a” non è statainizializzata, e il suo valoreè casuale

Errore!La variabile “a” non è statainizializzata, e il suo valoreè casuale

Page 39: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

41Programmazione ad Oggetti

Usare le variabili (2)

Ad una variabile può essere assegnato:Un valore costante Il risultato di una formula

Esempi int i = 1, j = 5; i = (5*j) % 10; long l = 10L;char c1 = ‘a’, c2 = ‘\u0062’;boolean b = false;

Page 40: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

42Programmazione ad Oggetti

Argomenti della lezione

Modellare la realtàLe classi: il modello

Attributi e metodi

Gli oggetti: il mattoneCostruzione e accessoRiferimentiCiclo di vita degli oggetti

Page 41: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

43Programmazione ad Oggetti

Convenzioni sui nomi

Le classi hanno nomi che iniziano con la lettera maiuscola

Metodi, attributi e variabili hanno l’iniziale minuscolaSe un nome è composto da più parole

giustapposte, l’iniziale di ogni parola successiva alla prima è maiuscola

int contatoreNumeroOccorrenze = 0;class CentraleTelefonica { }

Page 42: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

44Programmazione ad Oggetti

Modellare la realtà (1)

STATOvia1: verdevia2: rosso

STATOvia1: verdevia2: rosso

STATOmotore:accesovelocità: 0

STATOmotore:accesovelocità: 0

COMPORTAMENTOParti!Frena!Sterza!

COMPORTAMENTOParti!Frena!Sterza!

Page 43: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

45Programmazione ad Oggetti

Modellare la realtà (2)

StatoL’insieme dei parametri caratteristici che

contraddistinguono un oggetto in un dato istanteModellato come insieme di attributi

ComportamentoDescrive come si modifica lo stato a fronte degli

stimoli provenienti dal mondo esternoModellato come insieme di metodi

Page 44: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

46Programmazione ad Oggetti

Classi

La classe costituisce il “progetto” di un oggettoSpecifica gli attributiDescrive i metodi Indica lo stato iniziale

Ogni classe ha un nomeDeve essere univoco

Page 45: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

47Programmazione ad Oggetti

Oggetti

Data una classe, è possibile costruire uno o più oggettiGli oggetti vengono detti “istanze” della classe In Java si utilizza la notazione

new NomeClasse ( );

Ogni oggetto “vive” all’interno della memoria del calcolatoreQui viene memorizzato il suo statoOggetti differenti occupano posizioni differenti

Page 46: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

48Programmazione ad Oggetti

Oggetti

class Cerchio {

double r;

...

}

class Cerchio {

double r;

...

}

Memoria

r:??

new Cerchio()

Cerchio

r: double

Page 47: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

49Programmazione ad Oggetti

Stato di un oggetto

Ogni oggetto ha un proprio stato: Insieme dei valori assunti dagli attributi

dell’oggettoOperando sui metodi, si può modificare lo stato

All’atto della costruzione di un oggetto, occorre assegnare un valore ai diversi attributiÈ il compito di un metodo particolare, detto

costruttore

Page 48: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

50Programmazione ad Oggetti

Costruttore

Metodo che inizializza gli attributi di una classe

Sintassi particolare:Ha lo stesso nome della classeNon indica nessun tipo ritornato

class Cerchio {class Cerchio { double r;double r; Cerchio() { Cerchio() { r=1.0; r=1.0; }}}}

class Cerchio {class Cerchio { double r;double r; Cerchio() { Cerchio() { r=1.0; r=1.0; }}}}

Page 49: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

51Programmazione ad Oggetti

Costruire oggetti

class Cerchio { double r;

Cerchio() { r=1.0; } ...}

class Cerchio { double r;

Cerchio() { r=1.0; } ...}

Memoria

r:1.0

new Cerchio()

Cerchio

r: double

Page 50: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

52Programmazione ad Oggetti

Costruire oggetti

class Rettangolo { double b,h;

Rettangolo() { b=2.0; h=1.0; } ...}

class Rettangolo { double b,h;

Rettangolo() { b=2.0; h=1.0; } ...}

Memoria

r:1.0

new Rettangolo()

b:2.0h:1.0

Rettangolo

b: doubleh: double

Page 51: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

53Programmazione ad Oggetti

Costruttore e parametri

Normalmente un costruttore assegna valori “standard” agli attributi

Se ha dei parametri, può differenziare gli oggetti costruitiChi invoca il costruttore deve fornire

i parametri richiesti

Una classe può avere molti costruttoriOccorre che siano distinguibili attraverso il

numero ed il tipo di parametri richiesti

Page 52: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

54Programmazione ad Oggetti

Costruttore e parametriclass Poligono {class Poligono { double lato;double lato; int numeroLati;int numeroLati; PoligonoPoligono(int n) { (int n) { numeroLati=n; numeroLati=n; lato=1.0; lato=1.0; }}}}

class Poligono {class Poligono { double lato;double lato; int numeroLati;int numeroLati; PoligonoPoligono(int n) { (int n) { numeroLati=n; numeroLati=n; lato=1.0; lato=1.0; }}}} Poligono p;Poligono p;

p= new Poligono(p= new Poligono(33););

Poligono p;Poligono p;

p= new Poligono(p= new Poligono(33););

Page 53: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

55Programmazione ad Oggetti

Riferimenti

Si opera su un oggetto attraverso un riferimento Indica la posizione in memoria occupata

dall’oggettoAll’atto della costruzione, l’operatore new:

Alloca un blocco di memoria sufficiente a contenere l’oggetto

Invoca il costruttore, determinandone la corretta inizializzazione

Restituisce il riferimento (indirizzo) del blocco inizializzato

Page 54: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

56Programmazione ad Oggetti

Riferimenti

r:1.0

b:2.0h:1.0

Riferimento alcerchioRiferimento alrettangolo

Memorianew Cerchio();new Rettangolo();new Cerchio();new Rettangolo();

Gli oggetti vengono costruiti,ma dove finisce il loro riferimento?Gli oggetti vengono costruiti,ma dove finisce il loro riferimento?

Page 55: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

57Programmazione ad Oggetti

Variabili

I riferimenti possono essere memorizzati all’interno di variabili localiDevono avere un tipo compatibile con il tipo di

riferimento che si intende memorizzare al loro interno

Devono essere dichiarate prima di essere usate

{… Cerchio c; c= new Cerchio();…}

{… Cerchio c; c= new Cerchio();…}

Page 56: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

58Programmazione ad Oggetti

Variabili{ Cerchio c; c= new Cerchio();}

{ Cerchio c; c= new Cerchio();}

Memoria

r:1.0

c

Page 57: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

59Programmazione ad Oggetti

Variabili

{ Cerchio c; c= new Cerchio();}

{ Cerchio c; c= new Cerchio();}

Memoria

r:1.0

c

Page 58: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

60Programmazione ad Oggetti

Ciclo di vita delle variabili locali

Le variabili locali “esistono” finché il metodo (blocco di codice) che le definisce è in esecuzioneQuando si incontra la loro definizione, il sistema

riserva un’area di memoria per ospitarne il contenuto

Quando il metodo (blocco) termina, l’area viene rilasciata ed il contenuto della variabile perso

La memoria viene prelevata da una zona apposita detta “stack” (quella in cui si trovano gli oggetti, invece, si chiama “heap”)

Page 59: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

61Programmazione ad Oggetti

Ciclo di vita delle variabili locali

{ Cerchio c; c= new Cerchio();}

{ Cerchio c; c= new Cerchio();}

Memoria

r:1.0

c

Page 60: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

62Programmazione ad Oggetti

Riferimenti multipli

Uno stesso oggetto può essere denotato da più variabiliSuccede quando si assegna ad un variabile il

valore contenuto in un’altra variabileLe variabili condividono il riferimento allo stesso

oggetto

Se si opera sull’oggetto attraverso la prima variabile, le modifiche sono visibili da tutte le altre variabili coinvolte

Page 61: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

63Programmazione ad Oggetti

Riferimenti multipli

Cerchio c1,c2;c1= new Cerchio();c2= c1;

Cerchio c1,c2;c1= new Cerchio();c2= c1;

Memoria

r:1.0

c1

c2

Page 62: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

64Programmazione ad Oggetti

Variabili elementari

Non tutte le variabili contengono un riferimentoLe informazioni più semplici possono essere

memorizzate direttamente nella variabileÈ il caso delle variabili il cui tipo è elementare

(detto anche primitivo)

Page 63: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

65Programmazione ad Oggetti

Variabili elementari

int i;i= 3;int i;i= 3;

Memoria

i

Page 64: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

66Programmazione ad Oggetti

Variabili elementari

int i;i= 3;int i;i= 3;

Memoria

i 33

Page 65: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

67Programmazione ad Oggetti

Copia di variabili elementari

Se si assegna ad una variabile elementare il valore di un’altra variabile viene eseguita una copia del valore I due valori diventano disgiunti e potranno

evolvere indipendentemente

Page 66: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

68Programmazione ad Oggetti

Variabili elementari

int i, j;i= 3;j= i;

int i, j;i= 3;j= i;

Memoria

i 33

j 33

Page 67: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

69Programmazione ad Oggetti

Riferimenti nulli

Nel caso di variabili di tipo classe, a volte occorre indicare che non contengono nessun valoreSi usa la parola chiave null

Se una variabile vale null, non è possibile accedere ai metodi o agli attributi

Page 68: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

70Programmazione ad Oggetti

Riferimenti nulli

Cerchio c;c= new Cerchio();...c=null

Cerchio c;c= new Cerchio();...c=null

Memoria

r:1.0

c

Page 69: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

71Programmazione ad Oggetti

Riferimenti nulli

Cerchio c;c= new Cerchio();...c=null

Cerchio c;c= new Cerchio();...c=null

Memoria

r:1.0

c

Page 70: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

72Programmazione ad Oggetti

Accedere agli oggetti

Noto il riferimento ad un oggetto, è possibile invocarne i metodi Si usa la notazione

variabile.metodo(...); Nelle parentesi si indicano gli eventuali parametri

Se la variabile contiene un riferimento nullo si genera un errore di esecuzione

Il metodo è costituito da un insieme di istruzioni Il comportamento è simile ad una chiamata a procedura Il chiamante attende il completamento del metodo, poi

prosegue la propria elaborazione

Page 71: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

73Programmazione ad Oggetti

Parametri Un metodo può avere parametri

Internamente, appaiono come variabili locali Il loro valore, però, è fornito dal chiamante

Come le variabili, i parametri hanno un tipo Elementare Complesso

Nel caso di parametri di tipo elementare All’interno del parametro viene memorizzata una copia del valore indicato

dal chiamante Eventuali modifiche compiute dal metodo sul valore non si ripercuotono

sul chiamante Se il tipo è complesso

Il parametro contiene una copia del riferimento all’oggetto passato come parametro

Le eventuali modifiche sullo stato dell’oggetto sono visibili al chiamante

Page 72: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

74Programmazione ad Oggetti

Invocare metodi

Cerchio c;c= new Cerchio();c.setRaggio(2.0);

Cerchio c;c= new Cerchio();c.setRaggio(2.0);

Memoria

r:1.0

c

r:2.0

Page 73: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

75Programmazione ad Oggetti

Valori di ritorno

Alcuni metodi restituiscono un valore Il tipo del valore ritornato viene dichiarato prima del nome

del metodo double calcolaPerimetro() { … }

Il valore ritornato può essere assegnato ad una variabile Occorre che la variabile sia compatibile con il tipo del valore

ritornato

Altri metodi non ritornano nulla In questo caso dichiarano di ritornare il tipo predefinito void void setRaggio(double r) { … }

Page 74: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

76Programmazione ad Oggetti

Valori di ritorno

c.setRaggio(2.0);double p;p=c.calcolaPerimetro()

c.setRaggio(2.0);double p;p=c.calcolaPerimetro()

Memoria

r:1.0

c

r:2.0

p

Page 75: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

77Programmazione ad Oggetti

Valori di ritorno

c.setRaggio(2.0);double p;p=c.calcolaPerimetro()

c.setRaggio(2.0);double p;p=c.calcolaPerimetro()

Memoria

r:1.0

c

r:2.0

p 12.5612.56

Page 76: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

78Programmazione ad Oggetti

Tipologie di metodi

Un metodo, in generale, può operare liberamente sull’oggetto su cui viene invocato…Modificandone lo stato Invocando metodi su altri oggetti conosciutiEffettuando calcoliRestituendo risultati

Spesso, però, si progettano metodi specializzati in una delle funzioni citate

Page 77: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

79Programmazione ad Oggetti

Tipologie di metodi

Modificatori (mutator) Servono ad alterare, in modo controllato, lo stato

dell’oggetto (o una sua parte specifica) Di solito hanno parametri e non ritornano nulla Per convenzione, in Java, hanno un nome simile a

void setXyz(…); Lettori (accessor)

Permettono di conoscere lo stato (o una sua parte specifca) di un oggetto

Di solito, non hanno parametri, e ritornano il valore letto Per convenzione, in Java, hanno un nome simile a

<tipoRitornato> getXyz();

Page 78: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

80Programmazione ad Oggetti

Attributi

Come le variabili, anche gli attributi possono avere tipiElementariComplessi (riferimenti ad oggetti)

Un attributo di tipo elementare Contiene direttamente il valore

Un attributo di tipo complessoContiene il riferimento ad un oggetto (oppure

null)

Page 79: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

81Programmazione ad Oggetti

class Disegno{class Disegno{int x;int x;int y;int y;

Cerchio c;Cerchio c;……

}}

class Disegno{class Disegno{int x;int x;int y;int y;

Cerchio c;Cerchio c;……

}}

Tipo elementareTipo elementare

Tipo compostoTipo composto

Esempio

Page 80: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

82Programmazione ad Oggetti

Attributi e costruttore

All’atto dell’invocazione del costruttore, tutti gli attributi hanno un valore di defaultGli attributi semplici valgono 0 (false, nel caso dei

valori booleani)Quelli complessi, valgono null

È compito del costruttore assegnare valori opportuni se quelli di default non sono adattiQuesto può comportare anche la creazione di

oggetti

Page 81: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

83Programmazione ad Oggetti

Attributi e costruttore

class Disegno { double x,y; Cerchio c;

Disegno() { x=7.0; y=3.0; c= new Cerchio() } ...}

class Disegno { double x,y; Cerchio c;

Disegno() { x=7.0; y=3.0; c= new Cerchio() } ...}

DisegnoDisegno

x, y: doublec: Cerchiox, y: doublec: Cerchio

……

Memoria

x:0y:0

c:

7

Page 82: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

84Programmazione ad Oggetti

Attributi e costruttore

class Disegno { double x,y; Cerchio c;

Disegno() { x=7.0; y=3.0; c= new Cerchio() } ...}

class Disegno { double x,y; Cerchio c;

Disegno() { x=7.0; y=3.0; c= new Cerchio() } ...}

DisegnoDisegno

x, y: doublec: Cerchiox, y: doublec: Cerchio

……

Memoria

x:7y:0

c: 3

Page 83: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

85Programmazione ad Oggetti

Attributi e costruttore

class Disegno { double x,y; Cerchio c;

Disegno() { x=7.0; y=3.0; c= new Cerchio() } ...}

class Disegno { double x,y; Cerchio c;

Disegno() { x=7.0; y=3.0; c= new Cerchio() } ...}

DisegnoDisegno

x, y: doublec: Cerchiox, y: doublec: Cerchio

……

Memoria

x:7y:0

c:

r:1.0

Page 84: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

86Programmazione ad Oggetti

Ciclo di vita di un oggetto

L’operatore new, su richiesta del programmatore, alloca la memoria necessaria a contenere un oggettoD1: quando viene rilasciata?R1: quando l’oggetto non serve più!D2: chi decide che non serve più?R2: l’ambiente di esecuzione (!?!)

Page 85: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

87Programmazione ad Oggetti

Accessibilità

Un oggetto è accessibile fino a che ne esiste un riferimento

Nel momento in cui non esistano più riferimenti, l’oggetto può essere eliminatoRilasciando la memoria che occupa

I riferimenti sono memorizzati in variabili e attributiSi cancellano quando la variabile cessa di

esistere (fine del blocco) Oppure assegnando esplicitamente il valore null

Page 86: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

88Programmazione ad Oggetti

Cerchio c;Cerchio c;c= new Cerchio();c= new Cerchio();......c=null;c=null;

Cerchio c;Cerchio c;c= new Cerchio();c= new Cerchio();......c=null;c=null;

cc

Memoria

r:1.0

Riferimenti nulli

Cerchio c;Cerchio c;c= new Cerchio();c= new Cerchio();......c=null;c=null;

Cerchio c;Cerchio c;c= new Cerchio();c= new Cerchio();......c=null;c=null;

cc

Memoria

r:1.0

Page 87: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

89Programmazione ad Oggetti

Conteggio dei riferimenti

All’interno di ogni oggetto, Java mantiene un contatore nascosto Indica il numero di riferimenti esistenti a quello specifico

oggetto Quando il suo valore scende a 0, indica che l’oggetto può

essere eliminato, rilasciando la memoria che occupa

Un particolare sottosistema, il garbage collector, si occupa, periodicamente, di riciclare la memoria degli oggetti eliminati Viene eseguito automaticamente dalla macchina virtuale

Java

Page 88: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

90Programmazione ad Oggetti

Cerchio c1,c2;Cerchio c1,c2;c1= new Cerchio();c1= new Cerchio();c2=c1;c2=c1;

Cerchio c1,c2;Cerchio c1,c2;c1= new Cerchio();c1= new Cerchio();c2=c1;c2=c1;

c1c1

Memoria

Conteggio dei riferimenti

c2c2

11

r:1.0

Page 89: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

91Programmazione ad Oggetti

Cerchio c1,c2;Cerchio c1,c2;c1= new Cerchio();c1= new Cerchio();c2=c1;c2=c1;

Cerchio c1,c2;Cerchio c1,c2;c1= new Cerchio();c1= new Cerchio();c2=c1;c2=c1;

c1c1

Memoria

Conteggio dei riferimenti

c2c2

11

r:1.022

Page 90: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

92Programmazione ad Oggetti

……c2= null;c2= null;……

……c2= null;c2= null;……

c1c1

Memoria

Conteggio dei riferimenti

c2c2

11

r:1.022

……c2= null;c2= null;……

……c2= null;c2= null;……

c1c1

Memoria

c2c2

11

r:1.0

Page 91: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

93Programmazione ad Oggetti

……c1= null;c1= null;……

……c1= null;c1= null;……

c1c1

Memoria

Conteggio dei riferimenti

11

r:1.011

……c1= null;c1= null;……

……c1= null;c1= null;……

c1c1

Memoria

Page 92: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

94Programmazione ad Oggetti

Costrutti di programmazione

Istruzioni sempliciSceltaRipetizioneSalto strutturato

Invocazione di metodiTrattata più in dettaglio

successivamenteBlocchi di istruzioni

Racchiusi tra parentesi graffe {...}

Page 93: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

95Programmazione ad Oggetti

Istruzioni di scelta (1)

Verifica della condizioneVera si esegue l’istruzione o il blocco di istruzioni

successivoFalsa si salta all’istruzione successiva oppure

viene eseguito il blocco “else”

if (condizione)...

if (condizione)... else ...

if (condizione)...

if (condizione)... else ...

Page 94: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

96Programmazione ad Oggetti

Istruzioni di scelta (2)

Struttura di selezione multiplaValutazione del valore di una variabileval1, …, valN:

espressioni costanti (interi o caratteri)

switch (var) {case val1: … break;case valN: … break;default: …

}

switch (var) {case val1: … break;case valN: … break;default: …

}

Page 95: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

97Programmazione ad Oggetti

Istruzioni di ripetizione (1)

espr1: inizializzazione variabile/i di controlloespr2: condizione di continuazioneespr3: modifica della/e variabili di controllo

for(espr1; espr2; espr3){… //istruzioni da ripetere

}

for(espr1; espr2; espr3){… //istruzioni da ripetere

}

Page 96: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

98Programmazione ad Oggetti

Istruzioni di ripetizione (2)

Esecuzione di un blocco di istruzioni finché la condizione rimane vera

do/while garantisce almeno una iterazione

while (cond ){…

}

while (cond ){…

}

do {…

} while(cond );

do {…

} while(cond );

Page 97: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

99Programmazione ad Oggetti

Salto strutturato

Istruzioni che permettono di alterare il flusso di esecuzione:break : provoca l’uscita immediata dal bloccocontinue: salto delle rimanenti istruzioni del

blocco, procede con l’interazione successiva del ciclo

Usati nei costrutti while, do/while, for, switch (quest’ultimo, solo break)

Page 98: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

100Programmazione ad Oggetti

Oggetti e utilizzatori

Non tutte le caratteristiche di un oggetto devono essere visibili dall’esterno Rischio di manomissioni indebite Occorre separare l’interfaccia

dall’implementazione Si realizza l’incapsulamento utilizzando un

modificatore di visibilità Metodi e attributi possono preceduti da una

parola chiave che indica il livello di privilegio loro associato

Page 99: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

101Programmazione ad Oggetti

Modificatori di visibilità

Private Indica che si può accedere all’elemento solo da

altri metodi appartenenti alla stessa classePublic

Indica che l’elemento può essere utilizzato da metodi di qualsiasi classe

[Nulla] In assenza di indicazioni, l’elemento è accessibile

alle altre classi dello stesso “gruppo” (package)

Page 100: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

102Programmazione ad Oggetti

Visibilità delle classi

Anche le classi possono essere precedute da un modificatore di visibilità In questo caso, “private” non ha senso

Se una classe è dichiarata pubblica, può essere utilizzata da classi appartenenti a qualsiasi gruppo (package)Altrimenti, può essere usata solo nell’ambito del

gruppo in cui è stata definita

Page 101: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

103Programmazione ad Oggetti

Incapsulamento

Per massimizzare il riuso, solo l’informazione minima necessaria al funzionamento deve essere accessibile

Di solito:Attributi privatiMetodi pubbliciCostruttori pubblici

Page 102: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

104Programmazione ad Oggetti

publicpublic class Cerchio { class Cerchio { privateprivate double r; double r; publicpublic Cerchio() { Cerchio() { ...... } } publicpublic void setRaggio(double val) void setRaggio(double val) { { r=val;r=val; }}}}

publicpublic class Cerchio { class Cerchio { privateprivate double r; double r; publicpublic Cerchio() { Cerchio() { ...... } } publicpublic void setRaggio(double val) void setRaggio(double val) { { r=val;r=val; }}}}

Incapsulamento

Page 103: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

105Programmazione ad Oggetti

Metodi e attributi statici

Oggetti appartenenti ad una stessa classe hanno lo stesso insieme di attributi Ogni oggetto ha però i propri valori, indipendenti

dagli altri Un metodo opera sui valori dell’oggetto su cui è

invocato L’evoluzione dello stato di un oggetto è

indipendente da quella di altri oggetti della stessa classe

Page 104: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

106Programmazione ad Oggetti

Attributi statici

Talora, si vuole memorizzare un’informazione comune a tutti gli oggetti di una data classe Si utilizzano gli attributi “statici” Il loro valore viene conservato in un blocco di

memoria separato, relativo alla classe Sono analoghi a variabili globali in altri

linguaggi (C, C++)

Page 105: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

107Programmazione ad Oggetti

Esempio

class Cerchio {class Cerchio { staticstatic double pi=3.14;double pi=3.14; double r;double r;......}}

class Cerchio {class Cerchio { staticstatic double pi=3.14;double pi=3.14; double r;double r;......}}

MemoriaMemoria

pi:3.14

Page 106: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

108Programmazione ad Oggetti

Esempio

Cerchio c1= Cerchio c1= new Cerchio(1.0);new Cerchio(1.0);

Cerchio c2=Cerchio c2=new Cerchio(2.5);new Cerchio(2.5);

Cerchio c1= Cerchio c1= new Cerchio(1.0);new Cerchio(1.0);

Cerchio c2=Cerchio c2=new Cerchio(2.5);new Cerchio(2.5);

MemoriaMemoria

pi:3.14

r:2.5

r:1.0

Page 107: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

109Programmazione ad Oggetti

Esempio

class Cerchio {class Cerchio { … … double calcolaArea() { double calcolaArea() { double a;double a;

a = r*r*a = r*r*pipi;;return a; return a;

}}}}

class Cerchio {class Cerchio { … … double calcolaArea() { double calcolaArea() { double a;double a;

a = r*r*a = r*r*pipi;;return a; return a;

}}}}

Page 108: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

110Programmazione ad Oggetti

Uso degli attributi statici

Si può fare accesso ad un attributo statico anche in mancanza di un oggetto specificodouble d= Cerchio.pi/2;

Gli attributi statici devono essere inizializzatiNon si può fare nel costruttore!Occorre farlo all’atto della dichiarazionestatic double pi = 3.14 ;

Page 109: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

111Programmazione ad Oggetti

Metodi statici

Non fanno riferimento a nessun attributo specifico di un oggetto Preceduti dal modificatore “static” Equivalenti a procedure e funzioni di altri

linguaggi Possono essere invocati a partire dal nome

della classe

Page 110: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

112Programmazione ad Oggetti

Esempi

La classe “Math” contiene metodi statici per le principali operazioni matematichedouble d1,d2;d1 = Math.sqrt( 2.0 );d2 = Math.sin( Math.PI / 2.0 );

La classe “System” contiene, sotto forma di attributi statici, oggetti che modellano le interazioni con la console di sistemaSystem.out //output su schermoSystem.in //input da tastiera

Page 111: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

113Programmazione ad Oggetti

System.out

PrintStreamPrintStreampublicvoid print(…)

publicvoid println(…)

Page 112: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

114Programmazione ad Oggetti

System.in

InputStreamInputStreampublicint read()

Restituisce il codice ASCII del tasto successivo!

Restituisce il codice ASCII del tasto successivo!

Page 113: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

115Programmazione ad Oggetti

Il metodo main()

Quando un programma inizia, non può esistere ancora nessun oggetto Il punto di ingresso deve essere un metodo

statico e pubblico Perché?

Convenzione Java: public static void

main(String[ ] args)

Page 114: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

116Programmazione ad Oggetti

Esempio

public class Hello {public class Hello { public static void public static void main(String[] args) {main(String[] args) { System.out.println(“Hello Java”);System.out.println(“Hello Java”); }}}}

public class Hello {public class Hello { public static void public static void main(String[] args) {main(String[] args) { System.out.println(“Hello Java”);System.out.println(“Hello Java”); }}}}

Page 115: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

117Programmazione ad Oggetti

La classe String

Classe che modella sequenze immutabili di caratteri

Sintassi semplificata String s1= “Hello” ; String s2 = s1+ “ Java”

Offre molti metodi Confronto, ricerca, derivazione di nuove

stringhe, informazioni generali, …

Page 116: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

118Programmazione ad Oggetti

Confronto e ricerca

public boolean equals(String s) Restituisce true se il parametro contiene gli

stessi caratteri dell’oggetto corrente public boolean equalsIgnoreCase(String s)

Idem, trascurando la differenza tra maiuscole e minuscole

public int indexOf(String s) Restituisce la posizione, all’interno della

sequenza di caratteri, in cui inizia la stringa indicata come parametro (-1 se non esiste)

Page 117: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

119Programmazione ad Oggetti

Derivazione e informazioni

public String toUpperCase() Restituisce una nuova stringa contenente gli stessi caratteri

in versione maiuscola public String replace(char oldChar, char newChar)

Restituisce una nuova stringa in cui tutte le occorrenze di oldChar sono sostituite con newChar

public String substring(int beginIndex, int endIndex) Restituisce una nuova stringa formata dai caratteri che

iniziano alla posizione beginIndex fino a endIndex escluso public int length()

Restituisce la lunghezza in caratteri della stringa corrente

Page 118: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

120Programmazione ad Oggetti

Esempi

String s1=“ciao”;String s1=“ciao”;

String s2= s1.toUpperCase();String s2= s1.toUpperCase();

boolean b= s2.equals (s1);boolean b= s2.equals (s1);

int i= s2.length();int i= s2.length();

int j= s2.indexOf(“AO”);int j= s2.indexOf(“AO”);

String s3=s1.substring(j,i);String s3=s1.substring(j,i);

char c=s1.charAt(0);char c=s1.charAt(0);

String s1=“ciao”;String s1=“ciao”;

String s2= s1.toUpperCase();String s2= s1.toUpperCase();

boolean b= s2.equals (s1);boolean b= s2.equals (s1);

int i= s2.length();int i= s2.length();

int j= s2.indexOf(“AO”);int j= s2.indexOf(“AO”);

String s3=s1.substring(j,i);String s3=s1.substring(j,i);

char c=s1.charAt(0);char c=s1.charAt(0);

Page 119: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

121Programmazione ad Oggetti

Argomenti della lezione

Raggruppare le classi in package

Struttura dei packagedelle API Java

Il packagejava.lang

Page 120: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

122Programmazione ad Oggetti

Nomi delle classi

La metodologia ad oggetti favorisce il riuso delle classi Il nome della classe dovrebbe suggerirne la

semanticaA volte bisogna utilizzare nello stesso progetto

classi già esistenti, di provenienza diversa ed aventi lo stesso nome

Occorre poter differenziare ulteriormente tali classi

Page 121: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

123Programmazione ad Oggetti

Package: un cognome per le classi

Le classi possono essere raggruppate in “package”Ogni package ha un nomeViene scelto in modo da essere univoco

Una classe è denotata:Dal nome proprioDal package di appartenenza

Page 122: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

124Programmazione ad Oggetti

Package: appartenenza

Le classi che appartengono ad uno stesso package formano un gruppo

Come nel caso di una famiglia, c’è un rapporto privilegiato: Accessibilità a tutti i componenti non privati

(public, protected, <vuoto>)

Page 123: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

125Programmazione ad Oggetti

Il nome dei package

Sequenza di parole separate da ‘.’ Dovrebbe suggerire lo scopo comune del

gruppo di classi Per evitare collisioni, spesso inizia con il nome

DNS in ordine inverso it.polito.didattica.esempi

Page 124: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

126Programmazione ad Oggetti

Sintassi

La parola chiave “package” denota il gruppo di appartenenzaÈ seguita dal nome del packageDeve essere posta all’inizio del file sorgente

Page 125: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

127Programmazione ad Oggetti

Sintassi

Le classi dello stesso package si “conoscono”Basta usare il nome proprio della classe

Tra package diversi occorre usare il nome completoAnche nei costruttori

Page 126: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

128Programmazione ad Oggetti

packagepackage formeforme;;

public class Cerchio {public class Cerchio {//…//…

}}

packagepackage formeforme;;

public class Cerchio {public class Cerchio {//…//…

}} packagepackage provaprova;;class Esempio {class Esempio {

forme.Cerchioforme.Cerchio c;c;

Esempio () {Esempio () { c=newc=new forme.Cerchioforme.Cerchio();(); }}}}

packagepackage provaprova;;class Esempio {class Esempio {

forme.Cerchioforme.Cerchio c;c;

Esempio () {Esempio () { c=newc=new forme.Cerchioforme.Cerchio();(); }}}}

Cerchio.javaCerchio.javaCerchio.javaCerchio.java

Esempio.javaEsempio.javaEsempio.javaEsempio.java

Esempio

Page 127: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

129Programmazione ad Oggetti

Importare riferimenti

L’uso di nomi completi è scomodo Gli amici si chiamano per nome

Il costrutto “import” permette di definire le classi note Queste vengono indicate solo per nome Serve solo in fase di compilazione!

Page 128: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

130Programmazione ad Oggetti

Esempio

package prova;package prova;importimport forme.Cerchio;forme.Cerchio;

class Esempio {class Esempio { CerchioCerchio c;c;

Esempio () {Esempio () { c=newc=new CerchioCerchio();(); }}}}

package prova;package prova;importimport forme.Cerchio;forme.Cerchio;

class Esempio {class Esempio { CerchioCerchio c;c;

Esempio () {Esempio () { c=newc=new CerchioCerchio();(); }}}}

Esempio.javaEsempio.javaEsempio.javaEsempio.java

Page 129: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

131Programmazione ad Oggetti

Importare riferimenti

Si possono includere un numero qualsiasi di clausole import Devono sempre precedere la definizione della

classe

Per importare tutte le classi di un package, si usa la sintassi import NomePackage.* ;

Page 130: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

132Programmazione ad Oggetti

Gerarchia di package

Il nome di un package può essere formato da molti segmenti Package che condividono lo stesso prefisso,

possono avere funzionalità “collegate”o java.awto java.awt.event

Per Java, sono gruppi totalmente separati

Page 131: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

133Programmazione ad Oggetti

Package anonimo

Le classi che non dichiarano in modo esplicito il proprio package appartengono al package “anonimo” A partire dalla versione 1.4, le classi del

package anonimo non possono essere utilizzate da classi appartenenti ad altri package

Page 132: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

134Programmazione ad Oggetti

Compilare ed eseguire

Per poter utilizzare una classe all’interno di un’altra non basta “risolverne” il nome Occorre localizzare il codice ad essa

associato Altrimenti viene lanciato l’errore

“NoClassDefFoundError”

Page 133: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

135Programmazione ad Oggetti

Rappresentazione su disco

Ad ogni classe, corrisponde un file “.class” che contiene il codice eseguibileQuesto deve risiedere in una (gerarchia di)

cartella il cui nome coincide con quello del package

Le classi del package anonimo si trovano nella cartella radice

Page 134: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

136Programmazione ad Oggetti

packagepackage geom.forme;geom.forme;

public class Cerchio {public class Cerchio {//…//…

}}

packagepackage geom.forme;geom.forme;

public class Cerchio {public class Cerchio {//…//…

}}

public class Test {public class Test {//…//…

}}

public class Test {public class Test {//…//…

}}

TestTest.class.classTestTest

.class.class

......

geomgeom

CerchioCerchio.class.class

CerchioCerchio.class.class

formeforme

Rappresentazione su disco

Page 135: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

137Programmazione ad Oggetti

La variabile CLASSPATH

Variabile d’ambiente del sistema operativoSpecifica un insieme di cartelle radice in cui

cercare i file “.class” o le sottocartelle dei package

Può contenere direttori compressi (file “.jar”)

set CLASSPATH=set CLASSPATH= . ; c:\a.jar; c:\classes . ; c:\a.jar; c:\classes

set CLASSPATH=set CLASSPATH= . ; c:\a.jar; c:\classes . ; c:\a.jar; c:\classes

Cerca i file .class, in ordine:Nella cartella in cui viene eseguita la JVM (“.”)Nella cartella compressa c:\a.jarNella cartella c:\classes

Page 136: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

138Programmazione ad Oggetti

File Jar

Gerarchie di cartelle e file compressiAnaloghi a file “.zip”Possono essere manipolati con il comando “jar”

Facilitano la distribuzione di interi package

Page 137: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

139Programmazione ad Oggetti

API Java

Application Programming Interface Insieme di meccanismi per interagire con il

sistema ospitanteProgettati interamente ad oggetti

Offrono Funzioni di libreria Interfaccia verso il sistema operativo

Versione 1.4.2:135 packageOltre 2700 classi

Page 138: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

140Programmazione ad Oggetti

Package principali

java.awt Abstract Windowing Toolkit Classi per creare interfacce utente di tipo

grafico

java.io Input/Output Classi per accedere a a flussi di dati, file e altri

meccanismi di comunicazione

Page 139: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

141Programmazione ad Oggetti

Package principali

java.langContiene le classi fondamentali del linguaggio

java.mathEstensioni matematicheClassi per modellare numeri interi e reali con

precisione illimitata

java.netMeccanismi di accesso alla rete Socket, URL, connessioni HTTP, …

Page 140: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

142Programmazione ad Oggetti

Package principali

java.nio New Input/Output Meccanismi di basso livello per interfacciarsi

con il mondo esterno

java.security Classi che implementano il modello di

sicurezza di Java

java.sql Accesso a basi dati relazionali

Page 141: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

143Programmazione ad Oggetti

Package principali

java.textTrattamento multiculturale di numeri, date, testo

java.util Insieme variegato di classi ad uso generale

Page 142: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

144Programmazione ad Oggetti

java.lang: l’ABC delle applicazioni Java

Fornisce le classi fondamentali per la programmazione Java Importato automaticamente dal compilatore in

tutti i programmi

Contiene – tra le altre – le classi Object, Throwable, String

Page 143: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

145Programmazione ad Oggetti

java.lang.StringBuffer

Analoga alla classe String Ma permette di modificare i caratteri contenuti

Principali operazioni append(…) insert(…) replace(…) toString()

Page 144: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

146Programmazione ad Oggetti

Classi “wrapper”

Utilizzate per trasformare in oggetti dati elementari Il dato contenuto è immutabile

Pattern generaledell’ingegneriadel software oggettooggetto

risorsarisorsanon ad oggettinon ad oggetti

risorsarisorsanon ad oggettinon ad oggetti

Page 145: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

147Programmazione ad Oggetti

Classi “wrapper”

ByteByteByteByte

ShortShortShortShort

IntegerIntegerIntegerInteger

LongLongLongLong

FloatFloatFloatFloat

DoubleDoubleDoubleDouble

NumberNumberNumberNumber

ObjectObjectObjectObject

BooleanBooleanBooleanBoolean CharCharCharChar

Page 146: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

148Programmazione ad Oggetti

Wrapper numerici

Sottoclassi di Number Metodi per

Trasformare una stringa in un numero e viceversa

Trasformare un numero in formati diversi (con possibile troncamento)

Rappresentazione testuale ottale, esadecimale, binaria

Page 147: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

149Programmazione ad Oggetti

Character, Boolean

Character Maiuscolo / minuscolo Valore Unicode Confronto …

Boolean Conversione da/verso stringa Confronto …

Page 148: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

150Programmazione ad Oggetti

java.lang.System

Contiene attributi e metodi statici, utilizzati per: Interazione con il sistema Acquisizione di informazioni Caricamento di librerie Accesso a standard input e output …

Non può essere istanziata

Page 149: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

151Programmazione ad Oggetti

System: i metodi (1)

exit(…) terminazione della JVM

currentTimeMillis() Numero di millisecondi trascorsi dal 1 gennaio

1970

setProperties(…)/getProperties(…) assegnazione e acquisizione delle proprietà di

sistema

Page 150: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

152Programmazione ad Oggetti

System: i metodi (2)

gc() invocazione del garbage collector

load(…) / loadLibrary(…) carica dinamicamente un file o una libreria

setIn(…), setOut(…), setErr(…) riassegnazione dei flussi standard

Page 151: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

153Programmazione ad Oggetti

java.lang.Math

Mette a disposizione glistrumenti necessari per le operazioni matematiche base Contiene solo metodi e attributi statici valore assoluto, logaritmo, potenza,

trigonometrici, minimo, massimo, …

Math.pow(2,10); //210

Page 152: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

154Programmazione ad Oggetti

java.lang.Runtime

Singola istanza per ogni applicazione Consente di interfacciarsi con il sistema

operativo

Metodi Alcuni analoghi a System: exit, gc, … Esecuzione di un processo, memoria

disponibile,…

Page 153: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

155Programmazione ad Oggetti

Array

All’interno di un programma può essere necessario gestire collezioni di dati: Il modo più semplice per organizzarli, se sono di

tipo omogeneo, è attraverso il concetto di array o vettore

Array in Java: oggetti che incapsulano sequenze ordinate di datiHanno dimensione fissa, definita all’atto della

creazioneSintassi semplificata per accedere ai singoli

elementi

Page 154: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

156Programmazione ad Oggetti

MemoriaMemoriaint[] valori;int[] valori;valori = new int[3];valori = new int[3];for (int i=0; i< valori.length; i++)for (int i=0; i< valori.length; i++)

valori[i]= i*i;valori[i]= i*i;

int[] valori;int[] valori;valori = new int[3];valori = new int[3];for (int i=0; i< valori.length; i++)for (int i=0; i< valori.length; i++)

valori[i]= i*i;valori[i]= i*i;

valorivalori

lengthlength

0000

0000

0000

3333

Page 155: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

157Programmazione ad Oggetti

MemoriaMemoriaint[] valori;int[] valori;valori = new int[3];valori = new int[3];for (int i=0; i< valori.length; i++)for (int i=0; i< valori.length; i++)

valori[i]= i*i;valori[i]= i*i;

int[] valori;int[] valori;valori = new int[3];valori = new int[3];for (int i=0; i< valori.length; i++)for (int i=0; i< valori.length; i++)

valori[i]= i*i;valori[i]= i*i;

valorivalori

lengthlength

0000

1111

4444

3333

Page 156: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

158Programmazione ad Oggetti

Tipologie di array

Esistono due gruppi di arrayQuelli che modellano sequenze di tipi

elementari (interi, reali, caratteri, booleani)Quelli che modellano sequenze di oggetti

Qualunque sia il gruppo di appartenenza, gli array sono sempre oggetti complessiVengono creati tramite l’operatore newSi accede ad essi attraverso un riferimento in

memoria

Page 157: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

159Programmazione ad Oggetti

Inizializzare un arrayNel caso di array di tipi elementari, all’atto

della creazione vengono assegnati valori di default0 per i numeri (interi e reali) false per i valori logici ‘\000’ per i caratteri

A volte si conosce a priori l’intero contenuto dell’arrayJava offre una sintassi semplificata per la sua

inizializzazione

integer[] valori = new integer[] valori = new integerinteger[] [] {{44,, 00,, 77,, 99};};

integer[] valori = new integer[] valori = new integerinteger[] [] {{44,, 00,, 77,, 99};};

Page 158: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

160Programmazione ad Oggetti

Uso degli array

Per accedere ad un singolo elemento, si utilizza la sintassi nome_array [ indice ] L’indice deve essere compreso tra 0 e il numero di

elementi presenti nell’array

Un array può contenere anche tipi complessi (oggetti) In questo caso, nelle singole posizioni sono memorizzati i

riferimenti agli oggetti specifici All’atto della creazione del vettore, tutti i riferimenti

contenuti valgono null String[] nomi= String[] nomi=

new String[10];new String[10]; String[] nomi= String[] nomi=

new String[10];new String[10];

Page 159: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

161Programmazione ad Oggetti

String[] nomi;String[] nomi;nomi = new String[3];nomi = new String[3];nomi[1]=“Mario”nomi[1]=“Mario”

nominomi

MemoriaMemoria

lengthlength 33

nullnull

nullnull

nullnull

Page 160: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

162Programmazione ad Oggetti

String[] nomi;String[] nomi;nomi = new String[3];nomi = new String[3];nomi[1]=“Mario”nomi[1]=“Mario”

nominomi

MemoriaMemoria

lengthlength 33

nullnull

nullnull

nullnull

““Mario”Mario”

Page 161: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

163Programmazione ad Oggetti

Array a più dimensioni

È anche possibile creare matrici int [ ] [ ] matrice= new int [3] [3];

Si tratta di “array di array” Il primo indice si riferisce alla riga, il secondo alla

colonna

Non c’è limite al numero di dimensioni dell’arraySe non la memoria disponibile…

Page 162: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

164Programmazione ad Oggetti

int[][] matrice = new int[3][3];int[][] matrice = new int[3][3];matrice[2][0]= 1;matrice[2][0]= 1;

int[][]int[][]int[][]int[][]

lengthlengthlengthlength 3333

nullnullnullnull nullnullnullnull nullnullnullnullmatricematrice

int[]int[]int[]int[]

lengthlengthlengthlength 3333

0000 0000 0000

int[]int[]int[]int[]

lengthlengthlengthlength 3333

0000 0000 0000

int[]int[]int[]int[]

lengthlengthlengthlength 3333

0000 0000 000011

Page 163: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

165Programmazione ad Oggetti

Argomenti della lezione

I concetti principaliEreditarietà in JavaLa classe ObjectClassi astratte

e interfacce

Page 164: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

166Programmazione ad Oggetti

Riusare il software

A volte si incontrano classi con funzionalità simili In quanto sottendono concetti semanticamente “vicini” Una mountain bike assomiglia ad una bicicletta tradizionale

È possibile creare classi disgiunte replicando le porzione di stato/comportamento condivise L’approccio “Taglia&Incolla”, però, non è una strategia

vincente Difficoltà di manutenzione correttiva e perfettiva

Meglio “specializzare” codice funzionante Sostituendo il minimo necessario

Page 165: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

167Programmazione ad Oggetti

Ereditarietà

Meccanismo per definire una nuova classe (classe derivata) come specializzazione di un’altra (classe base) La classe base modella un concetto generico La classe derivata modella un concetto più specifico

La classe derivata: Dispone di tutte le funzionalità (attributi e metodi) di quella

base Può aggiungere funzionalità proprie Può ridefinirne il funzionamento di metodi esistenti

(polimorfismo)

Page 166: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

168Programmazione ad Oggetti

Esempio BiciclettaBiciclettacoppiarapportoPosteriore…

coppiarapportoPosteriore…

pedala(coppia)cambiaRapporto(n)frena(intensità)…

pedala(coppia)cambiaRapporto(n)frena(intensità)…

MountainBikeMountainBikerapportoAnteriorerapportoAnteriore

cambiaRapportoAnt(n)cambiaRapportoAnt(n)

TandemTandemcoppia2coppia2

pedala2(coppia)pedala2(coppia)

Page 167: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

169Programmazione ad Oggetti

Terminologia

BiciclettaBicicletta

MountainBikeMountainBike TandemTandem

Classe base,superclasseClasse base,superclasse

Classi derivate,sottoclassi

Classi derivate,sottoclassi

Page 168: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

170Programmazione ad Oggetti

Astrazione

Il processo di analisi e progettazione del software di solito procede per raffinamenti successivi Spesso capita che le similitudini tra classi non siano colte

inizialmente In una fase successiva, si coglie l’esigenza/opportunità di

introdurre un concetto più generico da cui derivare classi specifiche

Processo di astrazione Si introduce la superclasse che “astrae” il concetto comune

condiviso dalle diverse sottoclassi Le sottoclassi vengono “spogliate” delle funzionalità

comuni che migrano nella superclasse

Page 169: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

171Programmazione ad Oggetti

VeicoloVeicolodouble getVelocità()double getVelocità()double getAccelerazione()double getAccelerazione()……

double getVelocità()double getVelocità()double getAccelerazione()double getAccelerazione()……

BiciclettaBiciclettavoid pedala()void pedala()void pedala()void pedala()

AutomobileAutomobilevoid avvia()void avvia()void spegni()void spegni()void avvia()void avvia()void spegni()void spegni()

Page 170: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

172Programmazione ad Oggetti

Tipi ed ereditarietà

Ogni classe definisce un tipo: Un oggetto, istanza di una sotto-classe, è formalmente

compatibile con il tipo della classe base Il contrario non è vero!

Esempio Un’automobile è un veicolo Un veicolo non è (necessariamente) un’automobile

La compatibilità diviene effettiva se I metodi ridefiniti nella sotto-classe rispettano la semantica

della superclasse L’ereditarietà gode delle proprietà transitiva

Un tandem è un veicolo (poiché è una bicicletta, che a sua volta è un veicolo)

Page 171: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

173Programmazione ad Oggetti

Vantaggi dell’ereditarietà

Evitare la duplicazione di codice

Permettere il riuso di funzionalità

Semplificare la costruzione di nuove classi

Facilitare la manutenzioneGarantire la consistenza delle interfacce

Page 172: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

174Programmazione ad Oggetti

Ereditarietà in Java

Si definisce una classe derivata attraverso la parola chiave “extends”Seguita dal nome della classe base

Gli oggetti della classe derivata sono, a tutti gli effetti, estensioni della classe baseAnche nella loro rappresentazione in memoria

Page 173: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

175Programmazione ad Oggetti

Ereditarietà in Java

public class Veicolo {private double velocità;private double accelerazione;

public double getVelocità() {…} public double getAccelerazione() {…}}

public class Veicolo {private double velocità;private double accelerazione;

public double getVelocità() {…} public double getAccelerazione() {…}}

public class Automobile extends Veicolo {

private boolean avviata;public void avvia() {…}

}

public class Automobile extends Veicolo {

private boolean avviata;public void avvia() {…}

}

Veicolo.javaVeicolo.java

Automobile.javaAutomobile.java

Page 174: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

176Programmazione ad Oggetti

Ereditarietà in Java

MemoriaAutomobile a= new Automobile();Automobile a= new Automobile();

velocità: 0.0accelerazione: 0.0

avviata: falseaa

Page 175: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

177Programmazione ad Oggetti

Meccanismi

Costruzione di oggetti di classi derivate

Accesso alle funzionalità della superclasse

Ri-definizione di metodi

Page 176: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

178Programmazione ad Oggetti

Costruzione

Per realizzare un’istanza di una classe derivata, occorre – innanzi tutto – costruire l’oggetto baseDi solito, provvede automaticamente il

compilatore, invocando – come prima operazione di ogni costruttore della classe derivata – il costruttore anonimo della superclasse

Si può effettuare in modo esplicito, attraverso il costrutto super(…)

Eventuali ulteriori inizializzazioni possono essere effettuate solo successivamente

Page 177: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

179Programmazione ad Oggetti

Esempioclass class ImpiegatoImpiegato { { String nome;String nome; double stipendio; double stipendio;

Impiegato(String n) {Impiegato(String n) { nome = n;nome = n; stipendio= 1500;stipendio= 1500; }}}}

class class ImpiegatoImpiegato { { String nome;String nome; double stipendio; double stipendio;

Impiegato(String n) {Impiegato(String n) { nome = n;nome = n; stipendio= 1500;stipendio= 1500; }}}}

class class FunzionarioFunzionario extendsextends ImpiegatoImpiegato { {

Funzionario(String n) {Funzionario(String n) { super(n)super(n);; stipendio = 2000;stipendio = 2000; }}}}

class class FunzionarioFunzionario extendsextends ImpiegatoImpiegato { {

Funzionario(String n) {Funzionario(String n) { super(n)super(n);; stipendio = 2000;stipendio = 2000; }}}}

Page 178: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

180Programmazione ad Oggetti

Accedere alla superclasse

L’oggetto derivato contiene tutti i componenti (attributi e metodi) dell’oggetto da cui derivaMa i suoi metodi non possono operare

direttamente su quelli definiti privati

La restrizione può essere allentata:La super-classe può definire attributi e metodi

con visibilità “protected” Questi sono visibili alle sottoclassi

Page 179: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

181Programmazione ad Oggetti

Ridefinire i metodi

Una sottoclasse può ridefinire metodi presenti nella superclasse

A condizione che abbianoLo stesso nomeGli stessi parametri (tipo, numero, ordine)Lo stesso tipo di ritorno (La stessa semantica!)

Per le istanze della sottoclasse, il nuovo metodo nasconde l’originale

Page 180: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

182Programmazione ad Oggetti

Ridefinire i metodi

class Base {class Base {

int m() {int m() {

return 0; return 0;

}}}}

class Base {class Base {

int m() {int m() {

return 0; return 0;

}}}}

class Derivata class Derivata extends Base {extends Base {

int m() {int m() {

return 1; return 1;

}}}}

class Derivata class Derivata extends Base {extends Base {

int m() {int m() {

return 1; return 1;

}}}}

Base b= new Base();System.out.println(b.m()b.m());Derivata d= new Derivata();System.out.println(d.m()d.m());

Base b= new Base();System.out.println(b.m()b.m());Derivata d= new Derivata();System.out.println(d.m()d.m());

Page 181: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

183Programmazione ad Oggetti

Ridefinire i metodi

A volte, una sottoclasse vuole “perfezionare” un metodo ereditato, non sostituirlo in totoPer invocare l’implementazione presente nella

super-classe, si usa il costrutto super.<nomeMetodo> ( … )

class Base {class Base {

int int mm() {() {

return 0; return 0;

}}}}

class Base {class Base {

int int mm() {() {

return 0; return 0;

}}}}

class Derivata class Derivata extendsextends Base { Base {

int int mm() {() {

return return super.m()super.m()+ 1;+ 1;

}}}}

class Derivata class Derivata extendsextends Base { Base {

int int mm() {() {

return return super.m()super.m()+ 1;+ 1;

}}}}

Page 182: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

184Programmazione ad Oggetti

Compatibilità formale

Un’istanza di una classe derivata è formalmente compatibile con il tipo della super-classeBase b = new Derivata( );

Il tipo della variabile “b” (Base) limita le operazioni che possono essere eseguite sull’oggetto contenutoAnche se questo ha una classe più specifica

(Derivata), in grado di offrire un maggior numero di operazioni

Altrimenti viene generato un errore di compilazione

Page 183: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

185Programmazione ad Oggetti

Compatibilità formale

CCCC

print()print()print()print()

DDDD

print()print()reset()reset()print()print()reset()reset()

C v1= new C();C v2= new D();D v3= new D();

C v1= new C();C v2= new D();D v3= new D();

v1.print() v2.print() v2.reset() v3.reset()

v1.print() v2.print() v2.reset() v3.reset()

Page 184: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

186Programmazione ad Oggetti

Polimorfismo

class Base {class Base {

int m() {int m() {

return 0; return 0;

}}}}

class Base {class Base {

int m() {int m() {

return 0; return 0;

}}}}

class Derivata class Derivata extends Base {extends Base {

int m() {int m() {

return 1; return 1;

}}}}

class Derivata class Derivata extends Base {extends Base {

int m() {int m() {

return 1; return 1;

}}}}

Base b= new Base b= new DerivataDerivata();();System.out.println(System.out.println(b.m()b.m()););Base b= new Base b= new DerivataDerivata();();System.out.println(System.out.println(b.m()b.m()););

Page 185: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

187Programmazione ad Oggetti

Polimorfismo

Java mantiene traccia della classe effettiva di un dato oggettoSeleziona sempre il metodo più specifico……anche se la variabile che lo contiene

appartiene ad una classe più generica!Una variabile generica può avere “molte

forme” Contenere oggetti di sottoclassi differenti In caso di ridefinizione, il metodo chiamato

dipende dal tipo effettivo dell’oggetto

Page 186: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

188Programmazione ad Oggetti

Polimorfismo

Per sfruttare questa tecnica:Si definiscono, nella super-classe, metodi con

implementazione generica……sostituiti, nelle sottoclassi, da implementazioni

specificheSi utilizzano variabili aventi come tipo quello della

super-classeMeccanismo estremamente potente e

versatile, alla base di molti “pattern” di programmazione

Page 187: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

189Programmazione ad Oggetti

Esempio

FormaForma f1 = f1 = newnew Cerchio()Cerchio();;

Forma Forma f2 = newf2 = new Rettangolo()Rettangolo();;

double d1,d2;double d1,d2;

d1=f1.area();d1=f1.area();d2=f2.area();d2=f2.area();

CerchioCerchioCerchioCerchio

area()area()perimetro()perimetro()area()area()perimetro()perimetro()

FormaFormaFormaForma

area()area()perimetro()perimetro()area()area()perimetro()perimetro()

RettangoloRettangoloRettangoloRettangolo

area()area()perimetro()perimetro()area()area()perimetro()perimetro()

Page 188: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

190Programmazione ad Oggetti

La classe java.lang.Object

In Java:Gerarchia di ereditarietà sempliceOgni classe ha una sola super-classe

Se non viene definita esplicitamente una super-classe, il compilatore usa la classe predefinita ObjectObject non ha super-classe!

Page 189: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

191Programmazione ad Oggetti

Metodi di Object

Object definisce un certo numero di metodi pubblici Qualunque oggetto di qualsiasi classe li eredita La loro implementazione base è spesso minimale La tecnica del polimorfismo permette di ridefinirli

public boolean equals(Object o) Restituisce “vero” se l’oggetto confrontato è identico (ha lo

stesso riferimento) a quello su cui viene invocato il metodo Per funzionare correttamente, ogni sottoclasse deve fornire

la propria implementazione polimorfica

Page 190: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

192Programmazione ad Oggetti

Metodi di Object

public String toString() Restituisce una rappresentazione stampabile dell’oggetto L’implementazione base fornita indica il nome della classe

seguita dal riferimento relativo all’oggetto (java.lang.Object@10878cd)

public int hashCode() Restituisce un valore intero legato al contenuto dell’oggetto Se i dati nell’oggetto cambiano, deve restituire un valore

differente Oggetti “uguali” devono restituire lo stesso valore, oggetti

diversi possono restituire valori diversi Utilizzato per realizzare tabelle hash

Page 191: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

193Programmazione ad Oggetti

Controllare l’ereditarietà

In alcuni casi, si vuole impedire esplicitamente l’utilizzo della tecnica del polimorfismo Ad esempio, per motivi di sicurezza o per garantire il

mantenimento di una data proprietà del sistema Si utilizza la parola chiave “final”

Un metodo “final” non può essere ridefinito da una sottoclasse

Una classe “final” non può avere sottoclassi Un attributo “final” non può essere modificato

Non c’entra nulla con l’ereditarietà!

Page 192: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

194Programmazione ad Oggetti

Controllare l’ereditarietà

In altri casi si vuole obbligare l’utilizzo del polimorfismoSi introducono metodi privi di implementazioneFacendoli precedere dalla parola chiave

“abstract”Una classe che contiene metodi astratti

Deve essere, a sua volta, dichiarata abstractNon può essere istanziata direttamenteOccorre definire una sottoclasse che fornisca

l’implementazione dei metodi mancanti

Page 193: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

195Programmazione ad Oggetti

Classi astratte

abstractabstract class class BaseBase { {

abstractabstract int m();int m();

}}

abstractabstract class class BaseBase { {

abstractabstract int m();int m();

}}

class class DerivataDerivata extends extends BaseBase { {

int m() {int m() {

return 1; return 1;

}}}}

class class DerivataDerivata extends extends BaseBase { {

int m() {int m() {

return 1; return 1;

}}}}

Base b= new Derivata();Base b= new Derivata();System.out.println(b.m());System.out.println(b.m());Base b= new Derivata();Base b= new Derivata();System.out.println(b.m());System.out.println(b.m());

Page 194: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

196Programmazione ad Oggetti

Interfacce

Una classe astratta può contenere metodi non astratti A beneficio delle proprie sottoclassi

In alcuni casi, si vogliono definire metodi astratti senza vincolare la gerarchia di ereditarietà delle classi che li implementeranno

Si utilizzano le interfacce: Insiemi di metodi astratti e costanti (attributi static final) Pubblici per definizione

Una classe può implementare un’interfaccia Fornendo il codice relativo a tutti i metodi dichiarati

nell’interfaccia

Page 195: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

197Programmazione ad Oggetti

Esempio

public interface public interface ComparableComparable { {public int public int compareTocompareTo(Object o);(Object o);

}}

public interface public interface ComparableComparable { {public int public int compareTocompareTo(Object o);(Object o);

}}

public class public class RettangoloRettangolo extends extends FormaFormaimplements implements ComparableComparable { {

public int public int compareTocompareTo(Object o) {(Object o) { //codice relativo…//codice relativo… }}

//altri attributi e metodi…//altri attributi e metodi…}}

public class public class RettangoloRettangolo extends extends FormaFormaimplements implements ComparableComparable { {

public int public int compareTocompareTo(Object o) {(Object o) { //codice relativo…//codice relativo… }}

//altri attributi e metodi…//altri attributi e metodi…}}

Page 196: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

198Programmazione ad Oggetti

Interfacce e tipi

Analogamente alle classi, ogni interfaccia definisce un tipoUn oggetto che implementa una data interfaccia

ha come tipo anche il tipo dell’interfaccia Un oggetto può implementare molte interfacceDi conseguenza può avere molti tipi

Si può verificare se un oggetto ha un dato tipo con l’operatore “instanceof” if (myObject instanceof Comparable) …

Page 197: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

199Programmazione ad Oggetti

Interfacce vuote

Alcune interfacce non hanno metodiServono solo come “marcatori” o indicatori di

tipo Indicano che gli oggetti delle classi che le

implementano godono di qualche proprietà

Page 198: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

200Programmazione ad Oggetti

Interfacce vuote

public interface public interface ClonableClonable { { //indica che è lecito usare, //indica che è lecito usare, // sulle istanze di questa classe// sulle istanze di questa classe // il metodo Object.clone()// il metodo Object.clone()}}

public interface public interface ClonableClonable { { //indica che è lecito usare, //indica che è lecito usare, // sulle istanze di questa classe// sulle istanze di questa classe // il metodo Object.clone()// il metodo Object.clone()}}

public class public class RettangoloRettangolo extends extends FormaFormaimplements implements ComparableComparable , , ClonableClonable { {

public int public int compareTocompareTo(Object o) {(Object o) { //codice relativo…//codice relativo… }}

//altri attributi e metodi…//altri attributi e metodi…}}

public class public class RettangoloRettangolo extends extends FormaFormaimplements implements ComparableComparable , , ClonableClonable { {

public int public int compareTocompareTo(Object o) {(Object o) { //codice relativo…//codice relativo… }}

//altri attributi e metodi…//altri attributi e metodi…}}

Page 199: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

201Programmazione ad Oggetti

Percorso

Eventi eccezionali Identificazione,

descrizione e segnalazione

Eccezioni in Java I meccanismi offertiLe classi principali

Modellare le eccezioni

Page 200: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

202Programmazione ad Oggetti

Affidabilità di un programma

Un programma esegue una sequenza di operazioni su un calcolatoreAlcune direttamente, altre attraverso le

funzionalità offerte dal sistema operativo

Talvolta qualche operazione non può essere effettuata Il programma deve accorgersene e reagire di

conseguenza

Page 201: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

203Programmazione ad Oggetti

Le ragioni del fallimento

Mancanza di risorseMemoria esaurita, disco pieno, autorizzazioni

insufficienti, …

Parametri erratiDivisione per 0, riferimenti a risorse inesistenti

(file, URL), …

Sequenza illecita di operazioniUtilizzo di riferimenti nulli, scrittura su file

chiuso, …

Page 202: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

204Programmazione ad Oggetti

Le ragioni del fallimento

Alcune dipendono dal programmatoreAltre, dal contesto di esecuzione

In ogni caso, quando si rileva un’anomaliaNon è possibile concludere l’operazione in corso Il programma, nel suo complesso, viene a

trovarsi in uno stato incoerente

Per garantire l’affidabilità del sistema, occorre mettere in atto una strategia di rilevazione e gestione delle eccezioni

Page 203: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

205Programmazione ad Oggetti

Strategie

Tutte le operazioni che possono fallire, devono indicare:Se sono terminate con successo o menoL’eventuale anomalia riscontrata

Alcuni linguaggi si basano su valori di ritornoOccorre verificarli Il diagramma di flusso si complica notevolmenteSe si omette un test, si compromette la capacità

di valutare l’integrità del sistema

Page 204: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

206Programmazione ad Oggetti

Esempio

Semplice procedura:Tre operazioni

in successioneCiascuna può fallire

Apri il fileApri il fileApri il fileApri il file

ScriviScriviScriviScrivi

Chiudi il fileChiudi il fileChiudi il fileChiudi il file

Page 205: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

207Programmazione ad Oggetti

Esempio

Apri il fileApri il fileApri il fileApri il file ScriviScriviScriviScrivi Chiudi il fileChiudi il fileChiudi il fileChiudi il file

OK?OK?OK?OK?sisinono

OK?OK?OK?OK?sisinono

OK?OK?OK?OK?sisinono

Page 206: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

208Programmazione ad Oggetti

Complessità

Rapidamente, il codice associato ad una procedura semplice diventa ingestibileLa reazione comune

consiste nell’omettere i test

Cosa fare quando si rileva un malfunzionamento?

Page 207: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

209Programmazione ad Oggetti

Contesto

Spesso, ci si accorge dei fallimenti all’interno di procedure genericheNon si sa quali contromisure prendere

Occorrerebbe segnalare il malfunzionamento al chiamanteFornendo la descrizione più accurata possibile di

quanto successo Il chiamante può gestire l’eccezione o

rimandarne la gestione al proprio chiamante, ricorsivamente…

Page 208: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

210Programmazione ad Oggetti

La risposta di Java

Un’insieme di classi per modellare l’anomalia riscontrataFa capo alla classe Throwable

Meccanismi perSegnalareGestirePropagare

un’anomalia, attraverso la catena di invocazione dei metodi

Page 209: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

211Programmazione ad Oggetti

Sintassi

Un metodo che può fallire deve segnalarlo nella propria dichiarazione Attraverso la parola chiave “throws” Seguita dal tipo (o dai tipi) di eccezione che si può

verificare durante l’esecuzione

Chi invoca tale metodo deve: Cercare di gestire la possibile anomalia attraverso il

costrutto “try” / “catch” Oppure, segnalare che a propria volta può generare la

stessa anomalia: l’eccezione si propaga al chiamante del chiamante

Page 210: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

212Programmazione ad Oggetti

Esempio

double div(int num, int den)double div(int num, int den)

throwsthrows Exception {Exception {

if (den==0)if (den==0)

throw throw

newnew Exception(“div 0”);Exception(“div 0”);

return num/den;return num/den;

}}

double div(int num, int den)double div(int num, int den)

throwsthrows Exception {Exception {

if (den==0)if (den==0)

throw throw

newnew Exception(“div 0”);Exception(“div 0”);

return num/den;return num/den;

}}

Segnala che Segnala che puo’ fallirepuo’ fallire

Segnala che Segnala che puo’ fallirepuo’ fallireVerifica la Verifica la coerenzacoerenza

Verifica la Verifica la coerenzacoerenza

Descrive Descrive l’anomalial’anomaliaDescrive Descrive l’anomalial’anomalia

Interrompe Interrompe l’esecuzionel’esecuzionedel metododel metodo

Interrompe Interrompe l’esecuzionel’esecuzionedel metododel metodo

Page 211: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

213Programmazione ad Oggetti

Try/Catch

Costrutto utilizzato per il controllo delle eccezioni Isola le parti di codice che possono provocare

anomalie

trytry{{ … … // codice da controllare// codice da controllare}} catchcatch((…Exception e…Exception e){){ … … // gestione anomalia// gestione anomalia}}

trytry{{ … … // codice da controllare// codice da controllare}} catchcatch((…Exception e…Exception e){){ … … // gestione anomalia// gestione anomalia}}

Page 212: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

214Programmazione ad Oggetti

Try/Catch

È possibile reagire in modo differente a tipi diversi di eccezioni mettendo più clausole “catch” in sequenzaAvendo cura di indicare dapprima le anomalie più

specifiche

trytry{{ … …}} catchcatch((ExceptionA e1ExceptionA e1){ …){ …}} catchcatch((ExceptionB e2ExceptionB e2){ …){ …}}

trytry{{ … …}} catchcatch((ExceptionA e1ExceptionA e1){ …){ …}} catchcatch((ExceptionB e2ExceptionB e2){ …){ …}}

Page 213: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

215Programmazione ad Oggetti

La clausola “finally”

finally indica le istruzioni che devono essere eseguite comunque Tanto nel caso in cui il codice controllato sia stato eseguito

correttamente Quanto nel caso in cui si sia verificata un’eccezione

trytry{{ … … // codice da controllare// codice da controllare}} catchcatch((Exception eException e){){ … … // gestione dell’anomalia// gestione dell’anomalia}} finallyfinally {{ … … // istruzioni da eseguire// istruzioni da eseguire // in ogni caso // in ogni caso}}

trytry{{ … … // codice da controllare// codice da controllare}} catchcatch((Exception eException e){){ … … // gestione dell’anomalia// gestione dell’anomalia}} finallyfinally {{ … … // istruzioni da eseguire// istruzioni da eseguire // in ogni caso // in ogni caso}}

Page 214: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

216Programmazione ad Oggetti

trytry{{ … … … …}} catchcatch((ExcA e1ExcA e1){){ … …} } catchcatch((ExcB e2ExcB e2){){ … …} } finallyfinally {{ … …}}

trytry{{ … … … …}} catchcatch((ExcA e1ExcA e1){){ … …} } catchcatch((ExcB e2ExcB e2){){ … …} } finallyfinally {{ … …}}

Qualunque Qualunque anomalia in anomalia in

questo bloccoquesto bloccodetermina determina

l’interruzione l’interruzione dell’esecuzionedell’esecuzione

Qualunque Qualunque anomalia in anomalia in

questo bloccoquesto bloccodetermina determina

l’interruzione l’interruzione dell’esecuzionedell’esecuzione

1)1)1)1)

Page 215: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

217Programmazione ad Oggetti

trytry{{ … … … …}} catchcatch((ExcA e1ExcA e1){){ … …} } catchcatch((ExcB e2ExcB e2){){ … …} } finallyfinally {{ … …}}

trytry{{ … … … …}} catchcatch((ExcA e1ExcA e1){){ … …} } catchcatch((ExcB e2ExcB e2){){ … …} } finallyfinally {{ … …}}

Si confrontaSi confrontail tipo segnalatoil tipo segnalato

con quelli indicaticon quelli indicatinelle clausolenelle clausole

““catch”:catch”:

si selezionasi selezionala primala prima

corrispondenzacorrispondenzatrovatatrovata

Si confrontaSi confrontail tipo segnalatoil tipo segnalato

con quelli indicaticon quelli indicatinelle clausolenelle clausole

““catch”:catch”:

si selezionasi selezionala primala prima

corrispondenzacorrispondenzatrovatatrovata

2)2)2)2)

Page 216: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

218Programmazione ad Oggetti

trytry{{ … … … …}} catchcatch((ExcA e1ExcA e1){){ … …} } catchcatch((ExcB e2ExcB e2){){ … …} } finallyfinally {{ … …}}

trytry{{ … … … …}} catchcatch((ExcA e1ExcA e1){){ … …} } catchcatch((ExcB e2ExcB e2){){ … …} } finallyfinally {{ … …}}

Si esegueSi esegueil bloccoil bloccodi codicedi codice

corrispondente:corrispondente:

la segnalazionela segnalazionedell’anomaliadell’anomaliaviene rimossaviene rimossa

Si esegueSi esegueil bloccoil bloccodi codicedi codice

corrispondente:corrispondente:

la segnalazionela segnalazionedell’anomaliadell’anomaliaviene rimossaviene rimossa

3)3)3)3)

Page 217: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

219Programmazione ad Oggetti

trytry{{ … … … …}} catchcatch((ExcA e1ExcA e1){){ … …} } catchcatch((ExcB e2ExcB e2){){ … …} } finallyfinally {{ … …}}

trytry{{ … … … …}} catchcatch((ExcA e1ExcA e1){){ … …} } catchcatch((ExcB e2ExcB e2){){ … …} } finallyfinally {{ … …}}

ComunqueComunquesiano andatesiano andatele cose, vienele cose, viene

eseguito il bloccoeseguito il blocco““finally”,finally”,

se presentese presente

ComunqueComunquesiano andatesiano andatele cose, vienele cose, viene

eseguito il bloccoeseguito il blocco““finally”,finally”,

se presentese presente

4)4)4)4)

Page 218: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

220Programmazione ad Oggetti

Problemi

Il codice del blocco catch selezionato dovrebbe ripristinare la coerenza nel sistemaNon è detto sia possibile!

È possibile che si verifichi un’eccezione durante l’esecuzione del blocco catchPuò dare origine ad una struttura di

programmazione alquanto complessaPuò essere indice di cattiva progettazione

Page 219: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

221Programmazione ad Oggetti

Gestire le eccezioni

Stampare un messaggio di erroreNon risolve nulla, ma aiuta il debugging

trytry{{ … …}} catchcatch((Exception e1Exception e1){){

e1.e1.printStackTraceprintStackTrace();();}}

trytry{{ … …}} catchcatch((Exception e1Exception e1){){

e1.e1.printStackTraceprintStackTrace();();}}

Page 220: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

222Programmazione ad Oggetti

Gestire le eccezioni

Generare una nuova eccezionePermette di aggiungere informazioni sul contesto

in cui si è verificata l’anomalia originale

trytry{{ … …}} catchcatch((Exception e1Exception e1){){ throwthrow new new MyExcMyExc(e1,new Date());(e1,new Date());}}

trytry{{ … …}} catchcatch((Exception e1Exception e1){){ throwthrow new new MyExcMyExc(e1,new Date());(e1,new Date());}}

Page 221: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

223Programmazione ad Oggetti

Gestire le eccezioni

Rilanciare la stessa eccezioneAvendo compiuto qualche azione a margine

trytry{{ … …}} catchcatch((Exception Exception e1e1){){ Logger.log(e1.getMessage());Logger.log(e1.getMessage()); throwthrow e1e1;;}}

trytry{{ … …}} catchcatch((Exception Exception e1e1){){ Logger.log(e1.getMessage());Logger.log(e1.getMessage()); throwthrow e1e1;;}}

Page 222: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

224Programmazione ad Oggetti

Gestire le eccezioni

Correggere l’anomalia… ...e riprovare l’azione Facendo attenzione ai cicli infiniti

boolean done = false;boolean done = false;do do {{ trytry{ … ; done = true; }{ … ; done = true; } catchcatch((Exception e1Exception e1){){ //correggi l’anomalia …//correggi l’anomalia … } }whilewhile (! done);(! done);

boolean done = false;boolean done = false;do do {{ trytry{ … ; done = true; }{ … ; done = true; } catchcatch((Exception e1Exception e1){){ //correggi l’anomalia …//correggi l’anomalia … } }whilewhile (! done);(! done);

Page 223: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

225Programmazione ad Oggetti

Gestire le eccezioniRipristinare uno stato precedente…

…disfacendo eventuali azioni non terminate (rollback)

ContoCorrente a,b; //…ContoCorrente a,b; //…int stato =0;int stato =0;double somma;double somma;try try { {

a.preleva(somma); a.preleva(somma); stato = 1;stato = 1;b.deposita(somma);b.deposita(somma);stato = 2;stato = 2;

}}catchcatch((Exception e1Exception e1){){

if (stato if (stato ==== 1) 1)a.deposita(somma);a.deposita(somma);

}}

ContoCorrente a,b; //…ContoCorrente a,b; //…int stato =0;int stato =0;double somma;double somma;try try { {

a.preleva(somma); a.preleva(somma); stato = 1;stato = 1;b.deposita(somma);b.deposita(somma);stato = 2;stato = 2;

}}catchcatch((Exception e1Exception e1){){

if (stato if (stato ==== 1) 1)a.deposita(somma);a.deposita(somma);

}}

Page 224: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

226Programmazione ad Oggetti

Gestire le eccezioni

Interrompere l’esecuzioneDisastro irreparabile!

trytry{{ … …}} catchcatch((Exception e1Exception e1){){ System.System.exitexit(0);(0);}}

trytry{{ … …}} catchcatch((Exception e1Exception e1){){ System.System.exitexit(0);(0);}}

Page 225: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

227Programmazione ad Oggetti

Gestire le eccezioni

Non fare nullaLa peggior scelta possibile!Da non fare mai

trytry{{ … …}} catchcatch((Exception e1Exception e1){){ //nessuna azione!//nessuna azione!}}

trytry{{ … …}} catchcatch((Exception e1Exception e1){){ //nessuna azione!//nessuna azione!}}

Page 226: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

228Programmazione ad Oggetti

Modellare le eccezioni

Java prevede che un’anomalia sia descritta da un oggetto di tipo ThrowableClasse radice della gerarchia delle eccezioniOffre vari metodi per la gestione dell’anomaliaLe sue sottoclassi modellano diversi tipi di

malfunzionamenti

Page 227: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

229Programmazione ad Oggetti

La classe Throwable

String getMessage()Restituisce la stringa che descrive l’anomalia Inizializzata nel costruttore a partire da un

parametrovoid printStackTrace()

Stampa la posizione in cui si è verificata l’eccezione e la sequenza dei metodi chiamanti ad essa relativi

Riporta anche, se disponibili, i riferimenti alle righe, nei file sorgente, in cui si sono verificate le successive invocazioni

Page 228: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

230Programmazione ad Oggetti

Tipologie di anomalie

Errori della macchina virtuale Fanno capo alla classe Error Non possono essere recuperati Memoria esaurita, stack overflow, …

Errori di programma Fanno capo alla classe Exception Per lo più, devono essere gestiti in modo esplicito,

dichiarandone l’eventualità nei metodi che li possono generare e utilizzando costrutti di tipo “try”

Alcuni possono capitare pressoché sempre (RuntimeException): non occorre dichiarare esplicitamente la possibilità che si verifichino

Page 229: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

231Programmazione ad Oggetti

unrecoverableproblems

‘unchecked’exceptions

‘checked’exceptions

Gerarchia delle eccezioni

ThrowableThrowableThrowableThrowable

ErrorErrorErrorError ExceptionExceptionExceptionException

StackStackOverflowOverflowStackStack

OverflowOverflow

IOExceptionIOExceptionIOExceptionIOException NullPointerNullPointerExceptionException

NullPointerNullPointerExceptionException

RuntimeExceptionRuntimeExceptionRuntimeExceptionRuntimeException

Page 230: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

232Programmazione ad Oggetti

Definire nuove eccezioni

È possibile creare classi di eccezioni personalizzateSpesso non contengono nessun metodo né

attributoDi solito, hanno un costruttore anonimo, che

associa all’oggetto una descrizione generica ed un costruttore che accetta una stringa, che permette di dettagliare l’anomalia verificatasi

Page 231: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

233Programmazione ad Oggetti

public class MyException public class MyException extends Exception {extends Exception {public public MyExceptionMyException() {() {

super(“MyException”);super(“MyException”);}}public public MyExceptionMyException(String (String ss){){

super(“MyException: ”+s);super(“MyException: ”+s);}}

}}……

throw new MyException(“message”);throw new MyException(“message”);……

public class MyException public class MyException extends Exception {extends Exception {public public MyExceptionMyException() {() {

super(“MyException”);super(“MyException”);}}public public MyExceptionMyException(String (String ss){){

super(“MyException: ”+s);super(“MyException: ”+s);}}

}}……

throw new MyException(“message”);throw new MyException(“message”);……

Esempio

Page 232: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

234Programmazione ad Oggetti

Argomenti della lezione

Flussi di datiLettura e scritturaInteragire con

il file systemFile ad accesso

casuale

Page 233: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

235Programmazione ad Oggetti

Flussi di dati

Sequenze continue e monodirezionali di informazioni che transitano da un’entità ad un’altra

Attraverso un flusso possono scorrere dati di qualsiasi tipo: Omogenei / eterogenei Semplici / composti

Un programma costituisce la sorgente o la destinazione di un flusso L’altra estremità può essere un altro

programma, il disco, lo schermo o la tastiera, …

Page 234: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

236Programmazione ad Oggetti

Classi Java per I/O

Modellano l’interazione di un programma con flussi dati Ingresso o uscita Binari o testuali

Organizzate in una struttura di ereditarietà Le sottoclassi estendono e specializzano le

funzionalità base Fanno capo al package java.io

Page 235: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

237Programmazione ad Oggetti

Struttura generale

InputStreamInputStreamInputStreamInputStream OutputStreamOutputStreamOutputStreamOutputStream

ReaderReaderReaderReader WriterWriterWriterWriter

IngressoIngressoIngressoIngresso UscitaUscitaUscitaUscita

BinarioBinarioBinarioBinario

TestualeTestualeTestualeTestuale

Page 236: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

238Programmazione ad Oggetti

InputStream

Modella le operazioni di lettura da un flusso binarioOpera su sequenze di byteClasse astratta

Offre metodi per leggere i singoli byteTutti i metodi possono lanciare IOException

Page 237: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

239Programmazione ad Oggetti

Metodi principali

int read()Attende il prossimo byte, dopodiché ne

restituisce il valore (0-255)Ritorna -1 se il flusso è terminato

int available()Ritorna il numero di byte leggibili senza attesa

Page 238: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

240Programmazione ad Oggetti

Metodi principali

long skip(long n) Scarta i prossimi “n” byte dal flusso, se

esistono Ritorna il numero di caratteri scartati

void close() Chiude il flusso e rilascia le risorse di sistema

associate Occorre ricordarsi di chiamarlo!

Page 239: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

241Programmazione ad Oggetti

Sorgenti

InputStream offre funzionalità minimali: Non indica da dove provengano i dati letti

Sottoclassi “sorgente” Modellano la lettura di byte da supporti specifici File, array di byte, StringBuffer, …

Page 240: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

242Programmazione ad Oggetti

FileInputStream

Permette di leggere il contenuto di un fileParametro del costruttoreDeve esistere ed essere leggibile

Lettura sequenzialeDall’inizio alla fine

Page 241: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

243Programmazione ad Oggetti

FileInputStream fis;FileInputStream fis;

String filename= “prova.dat”;String filename= “prova.dat”;

try {try {

fisfis= new= new FileInputStreamFileInputStream(filename);(filename);

int i;int i;

while ( (i=while ( (i=fis.read()fis.read()) != ) != -1-1) {) {

byte b= (byte) i; byte b= (byte) i;

//Opera sul dato…//Opera sul dato…

}}

} finally {} finally { fis.close(); fis.close(); }}

FileInputStream fis;FileInputStream fis;

String filename= “prova.dat”;String filename= “prova.dat”;

try {try {

fisfis= new= new FileInputStreamFileInputStream(filename);(filename);

int i;int i;

while ( (i=while ( (i=fis.read()fis.read()) != ) != -1-1) {) {

byte b= (byte) i; byte b= (byte) i;

//Opera sul dato…//Opera sul dato…

}}

} finally {} finally { fis.close(); fis.close(); }}

Esempio

Page 242: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

244Programmazione ad Oggetti

Filtri

InputStream offre funzionalità minimali: Permette solo di leggere byte

Classi “filtro” Arricchiscono le funzionalità o le prestazioni,

interponendosi ad altre sorgenti o filtri

Page 243: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

245Programmazione ad Oggetti

Classi filtro

Richiedono un InputStream da cui prelevare i dati Deve essere passato nel costruttore

Trasformano i dati letti da tale flusso Conversione di formato, memoria tampone,

reinserimento, …

Page 244: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

246Programmazione ad Oggetti

BufferedInputStream bis;BufferedInputStream bis;bis=new BufferedInputStream(bis=new BufferedInputStream(

new FileInputStream(“file.dat”)new FileInputStream(“file.dat”) ););byte b=bis.read(); b=bis.read();byte b=bis.read(); b=bis.read();

BufferedInputStream bis;BufferedInputStream bis;bis=new BufferedInputStream(bis=new BufferedInputStream(

new FileInputStream(“file.dat”)new FileInputStream(“file.dat”) ););byte b=bis.read(); b=bis.read();byte b=bis.read(); b=bis.read();

FileFileInputStreamInputStream

FileFileInputStreamInputStream

read()read()……read()read()……

FileFile

Classi filtro

Page 245: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

247Programmazione ad Oggetti

BufferedInputStream bis;BufferedInputStream bis;bis=new BufferedInputStream(bis=new BufferedInputStream(

new FileInputStream(“file.dat”)new FileInputStream(“file.dat”) ););byte b=bis.read(); b=bis.read();byte b=bis.read(); b=bis.read();

BufferedBufferedInputStreamInputStreamBufferedBuffered

InputStreamInputStream

read()read()……read()read()……

FileFileInputStreamInputStream

FileFileInputStreamInputStream

read()read()……read()read()……

byte[]byte[]byte[]byte[]

FileFileisis

bufbuf

countcount

Classi filtro

Page 246: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

248Programmazione ad Oggetti

BufferedInputStream bis;BufferedInputStream bis;bis=new BufferedInputStream(bis=new BufferedInputStream(

new FileInputStream(“file.txt”)new FileInputStream(“file.txt”) ););byte b=bis.read(); b=bis.read();byte b=bis.read(); b=bis.read();

BufferedBufferedInputStreamInputStreamBufferedBuffered

InputStreamInputStream

read()read()……read()read()……

FileFileInputStreamInputStream

FileFileInputStreamInputStream

read()read()……read()read()……

byte[]byte[]byte[]byte[]

FileFileisis

bufbuf

countcount

Classi filtro

Page 247: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

249Programmazione ad Oggetti

BufferedInputStream bis;BufferedInputStream bis;bis=new BufferedInputStream(bis=new BufferedInputStream(

new FileInputStream(“file.txt”)new FileInputStream(“file.txt”) ););byte b=bis.read(); b=bis.read();byte b=bis.read(); b=bis.read();

BufferedBufferedInputStreamInputStreamBufferedBuffered

InputStreamInputStream

read()read()……read()read()……

FileFileInputStreamInputStream

FileFileInputStreamInputStream

read()read()……read()read()……

byte[]byte[]byte[]byte[]

FileFileisis

bufbuf

countcount

Classi filtro

Page 248: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

250Programmazione ad Oggetti

Composizione

Il meccanismo dei filtri è molto flessibilePiù filtri possono essere concatenati (in che

ordine?)Si possono costruire oggetti con tutte e sole le

funzionalità richieste

Page 249: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

251Programmazione ad Oggetti

InputInputStreamStreamInputInput

StreamStream

ByteArrayByteArrayInputStreamInputStreamByteArrayByteArrayInputStreamInputStream

FileFileInputStreamInputStream

FileFileInputStreamInputStream

FilterFilterInputStreamInputStream

FilterFilterInputStreamInputStream

BufferedBufferedInputStreamInputStreamBufferedBuffered

InputStreamInputStream

SequenceSequenceInputStreamInputStreamSequenceSequenceInputStreamInputStream

StringBufferStringBufferInputStreamInputStream

StringBufferStringBufferInputStreamInputStream

DataDataInputStreamInputStream

DataDataInputStreamInputStream

PushbackPushbackInputStreamInputStreamPushbackPushbackInputStreamInputStream

Gerarchia di ereditarietà

Page 250: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

252Programmazione ad Oggetti

OutputStream

Modella le operazioni di scrittura su un flusso binarioClasse astratta

Offre metodi per scrivere i singoli byteTutti i metodi possono lanciare IOException

Page 251: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

253Programmazione ad Oggetti

Metodi principali

void write(int b)Scrive il valore b (troncato ad 8 bit) sul flusso

void flush()Forza l’invio effettivo di byte temporaneamente

accodati all’interno dell’oggettovoid close()

Chiude il flusso e rilascia le risorse di sistema associate

Una volta chiuso, il flusso non può essere riaperto né può ricevere ulteriori dati

Occorre ricordarsi di chiamarlo

Page 252: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

254Programmazione ad Oggetti

Destinazioni

Anche OutputStream offre funzionalità minimali: Non indica dove scrivere i dati letti

Sottoclassi “destinazione” Modellano la scrittura di byte su supporti

specifici File, array di byte, …

Page 253: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

255Programmazione ad Oggetti

FileOutputStream

Permette di scrivere un file Parametro del costruttore Può non esistere Occorre poterlo creare / modificare (diritto di

scrittura)

Scrittura sequenziale Dall’inizio alla fine Il contenuto precedente viene cancellato

Page 254: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

256Programmazione ad Oggetti

FileOutputStream fos;FileOutputStream fos;

String filename= “prova.dat”;String filename= “prova.dat”;

try {try {

fosfos= new= new FileOutputStreamFileOutputStream(filename);(filename);

//Esempio di scrittura…//Esempio di scrittura…

for (int i=0; i<=255; i++) for (int i=0; i<=255; i++)

fos.write( (byte) i);fos.write( (byte) i);

} finally {} finally { fos.close(); fos.close(); }}

FileOutputStream fos;FileOutputStream fos;

String filename= “prova.dat”;String filename= “prova.dat”;

try {try {

fosfos= new= new FileOutputStreamFileOutputStream(filename);(filename);

//Esempio di scrittura…//Esempio di scrittura…

for (int i=0; i<=255; i++) for (int i=0; i<=255; i++)

fos.write( (byte) i);fos.write( (byte) i);

} finally {} finally { fos.close(); fos.close(); }}

Esempio

Page 255: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

257Programmazione ad Oggetti

Filtri

Insieme di classi che estendono le capacità di OutputStream Inserimento di un buffer Scrittura di dati elmentari ed oggetti Scrittura di sequenze di caratteri ASCII

Page 256: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

258Programmazione ad Oggetti

OutputOutputStreamStreamOutputOutputStreamStream

ByteArrayByteArrayOutputStreamOutputStreamByteArrayByteArray

OutputStreamOutputStream

FileFileOutputStreamOutputStream

FileFileOutputStreamOutputStream

FilterFilterOutputStreamOutputStream

FilterFilterOutputStreamOutputStream

BufferedBufferedOutputStreamOutputStream

BufferedBufferedOutputStreamOutputStream

ObjectObjectOutputStreamOutputStream

ObjectObjectOutputStreamOutputStream

PipedPipedOutputStreamOutputStream

PipedPipedOutputStreamOutputStream

DataDataOutputStreamOutputStream

DataDataOutputStreamOutputStream

PrintPrintStreamStreamPrintPrint

StreamStream

Gerarchia di ereditarietà

Page 257: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

259Programmazione ad Oggetti

Reader & Writer

Classi duali di InputStream e OutputStream Modellano operazioni su flussi di caratteri

UNICODE Classi astratte Rispetto ai flussi binari, cambiano i tipi dei

parametri

Page 258: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

260Programmazione ad Oggetti

ReaderReaderReaderReader

CharArrayCharArrayReaderReader

CharArrayCharArrayReaderReader

BufferedBufferedReaderReader

BufferedBufferedReaderReader

InputStreamInputStreamReaderReader

InputStreamInputStreamReaderReader

FilterFilterReaderReaderFilterFilterReaderReader

StringStringReaderReaderStringStringReaderReader

FileFileReaderReaderFileFile

ReaderReader

Gerarchia di ereditarietà

Page 259: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

261Programmazione ad Oggetti

WriterWriterWriterWriter

CharArrayCharArrayWriterWriter

CharArrayCharArrayWriterWriter

BufferedBufferedWriterWriter

BufferedBufferedWriterWriter

OutputStreamOutputStreamWriterWriter

OutputStreamOutputStreamWriterWriter

PrintPrintWriterWriterPrintPrintWriterWriter

StringStringWriterWriter

StringStringWriterWriter

FileFileWriterWriterFileFile

WriterWriter

Gerarchia di ereditarietà

Page 260: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

262Programmazione ad Oggetti

Codifica dei caratteri

Un carattere UNICODE è rappresentato su 16 bit Esistono vari modi per trasformarlo in una

sequenza di byte InputStreamReader e OutputStreamWriter

hanno, all’interno, il codice necessario alla conversione in byte Nel costruttore si può indicare la codifica da

adottare

Page 261: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

263Programmazione ad Oggetti

Leggere da console

BufferedReader br;BufferedReader br;

try {try {

brbr= new= new BufferedReaderBufferedReader((

newnew InputStreamReaderInputStreamReader(System.in)(System.in)

););

String s=String s=brbr..readLinereadLine();();

… …

} finally {} finally { brbr..closeclose(); }(); }

BufferedReader br;BufferedReader br;

try {try {

brbr= new= new BufferedReaderBufferedReader((

newnew InputStreamReaderInputStreamReader(System.in)(System.in)

););

String s=String s=brbr..readLinereadLine();();

… …

} finally {} finally { brbr..closeclose(); }(); }

Page 262: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

264Programmazione ad Oggetti

La classe File

Modella il nome di file e cartelle in modo indipendente dal sistema operativo: Il file corrispondente può non esistere Permette di creare, cancellare, rinominare, … file e

cartelle

Page 263: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

265Programmazione ad Oggetti

Creazione e cancellazione

boolean createNewFile();boolean mkdir();boolean renameTo(File dest);boolean delete();void deleteOnExit();

Page 264: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

266Programmazione ad Oggetti

Proprietà di un file

boolean canRead(); boolean canWrite(); boolean isDirectory(); boolean isFile(); File getParentFile(); long length(); String[] list();

Page 265: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

267Programmazione ad Oggetti

Ulteriori funzionalità

static File[] listRoots(); Elenca le possibili radici del filesystem corrente

(“a:”, “c:”, …)

static String separator; Indica il carattere che separa il nome di cartelle

e file (‘\’ o ‘/’)

Page 266: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

268Programmazione ad Oggetti

Esempio

File dir= new File(“c:\”, “temp”);File dir= new File(“c:\”, “temp”);boolean b;boolean b;if (!dir.exists())if (!dir.exists())

b=dir.mkdir();b=dir.mkdir();else else

b=dir.isDirectory();b=dir.isDirectory();if (b) {if (b) {

String[] nomi= dir.list();String[] nomi= dir.list();//…//…

}}

File dir= new File(“c:\”, “temp”);File dir= new File(“c:\”, “temp”);boolean b;boolean b;if (!dir.exists())if (!dir.exists())

b=dir.mkdir();b=dir.mkdir();else else

b=dir.isDirectory();b=dir.isDirectory();if (b) {if (b) {

String[] nomi= dir.list();String[] nomi= dir.list();//…//…

}}

Page 267: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

269Programmazione ad Oggetti

File ad accesso casuale

In alcune situazioni occorre operare su un file, procedendo in modo non sequenziale Lettura e scrittura possono avvenire in qualsiasi posizione

del file indipendentemente dall’operazione precedente

La classe RandomAccessFile modella il file come fosse un array di byte Memorizzato su disco, invece che in memoria Mantiene un puntatore di posizione interno che tiene

traccia del prossimo byte a cui accedereo Modificabile dal programmatore

È possibile operare sia in lettura che in scritturao Si specifica in fase di costruzione

Page 268: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

270Programmazione ad Oggetti

File ad accesso casuale

File

RandomAccessFileRandomAccessFile

FileFile

pospos

Posizione in cui avverràla prossima operazione

read( )write( )seek( pos )…

DataInput DataOutput

Page 269: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

271Programmazione ad Oggetti

Operare in lettura void seek(long pos)

Posiziona il puntatore interno a pos byte dall’inizio del file long getFilePointer( )

Restituisce la posizione corrente del puntatore interno rispetto all’inizio del file

String readLine( ) Legge una sequenza di caratteri ASCII terminata da newline e la

converte in formato Unicode String readUTF( )

Legge una sequenza di caratteri Unicode codificati nel formato UTF-8 (che contiene la lunghezza della stringa)

Altri metodi dell’interfaccia DataInput Permettono di leggere tipi elementari (numeri interi, numeri in

virgola mobile, caratteri e booleani)

Page 270: 1 Programmazione ad Oggetti Argomenti della lezione Programmare in Java Un esempio elementare Gli strumenti di Java Struttura di un programma Java Metodi.

272Programmazione ad Oggetti

Operare in scrittura

void writeBytes(String s) Scrive la sequenza di byte meno significativi corrispondenti

ai caratteri contenuti in “s”

void writeChars(String s) Scrive la sequenza di caratteri (due byte ciascuno)

contenuti in “s”

void writeUTF(String s) Scrive la rappresentazione della stringa “s” nel formato

UTF-8

Altri metodi dell’interfaccia DataOutput Permettono la scrittura di dati elementari