1 programmazione ad oggetti argomenti della lezione programmare in java un esempio elementare gli...
TRANSCRIPT
![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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/1.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/2.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/3.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/4.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/5.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/6.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/7.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/8.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/9.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/10.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/11.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/12.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/13.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/14.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/15.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/16.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/17.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/18.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/19.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/20.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/21.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/22.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/23.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/24.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/25.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/26.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/27.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/28.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/29.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/30.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/31.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/32.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/33.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/34.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/35.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/36.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/37.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/38.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/39.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/40.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/41.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/42.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/43.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/44.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/45.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/46.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/47.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/48.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/49.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/50.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/51.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/52.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/53.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/54.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/55.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/56.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/57.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/58.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/59.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/60.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/61.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/62.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/63.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/64.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/65.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/66.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/67.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/68.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/69.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/70.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/71.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/72.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/73.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/74.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/75.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/76.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/77.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/78.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/79.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/80.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/81.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/82.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/83.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/84.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/85.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/86.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/87.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/88.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/89.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/90.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/91.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/92.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/93.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/94.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/95.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/96.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/97.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/98.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/99.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/100.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/101.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/102.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/103.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/104.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/105.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/106.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/107.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/108.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/109.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/110.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/111.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/112.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/113.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/114.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/115.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/116.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/117.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/118.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/119.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/120.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/121.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/122.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/123.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/124.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/125.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/126.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/127.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/128.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/129.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/130.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/131.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/132.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/133.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/134.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/135.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/136.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/137.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/138.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/139.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/140.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/141.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/142.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/143.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/144.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/145.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/146.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/147.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/148.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/149.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/150.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/151.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/152.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/153.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/154.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/155.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/156.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/157.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/158.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/159.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/160.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/161.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/162.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/163.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/164.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/165.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/166.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/167.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/168.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/169.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/170.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/171.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/172.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/173.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/174.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/175.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/176.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/177.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/178.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/179.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/180.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/181.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/182.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/183.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/184.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/185.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/186.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/187.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/188.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/189.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/190.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/191.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/192.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/193.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/194.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/195.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/196.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/197.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/198.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/199.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/200.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/201.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/202.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/203.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/204.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/205.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/206.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/207.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/208.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/209.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/210.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/211.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/212.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/213.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/214.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/215.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/216.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/217.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/218.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/219.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/220.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/221.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/222.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/223.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/224.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/225.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/226.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/227.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/228.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/229.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/230.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/231.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/232.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/233.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/234.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/235.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/236.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/237.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/238.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/239.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/240.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/241.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/242.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/243.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/244.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/245.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/246.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/247.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/248.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/249.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/250.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/251.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/252.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/253.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/254.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/255.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/256.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/257.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/258.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/259.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/260.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/261.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/262.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/263.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/264.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/265.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/266.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/267.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/268.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/269.jpg)
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](https://reader035.vdocuments.mx/reader035/viewer/2022062404/5542eb5a497959361e8c6302/html5/thumbnails/270.jpg)
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