JAVA
JAVA
Introduzione
INTRODUZIONE
C++
JDK e JRE
API
IDE (BLUEJ)
Cross Platform
DIAPOSITIVA 2
Web Dinamico
Versioni e IDE
ALESSANDRO URSOMANDO
1
JAVA
La programmazione orientata agli oggetti
JAVA
La programmazione OOP
Nascita della OOP
NASCITA DELLA OOP
1970
Programmi
Dati
Algoritmo
Sistema
Programmazione
strutturata
DIAPOSITIVA 4
Programmazione
OOP
ALESSANDRO URSOMANDO
2
JAVA
La programmazione OOP
Classi e Oggetti
CLASSI E OGGETTI
Classe Cane
Oggetto pabn
Oggetto snoopy
Oggetto scoobyDoo
Oggetto pluto
Oggetto spank
DIAPOSITIVA 5
JAVA
ALESSANDRO URSOMANDO
La programmazione OOP
Incapsulamento
INCAPSULAMENTO
-
DIAPOSITIVA 6
ATTRIBUTI
nome
colori
tipo
amici
dataNascita
diFantasia
abilita
Classe Cane
-
METODI
abbaia ()
scodinzola ()
mangia ()
gioca()
ALESSANDRO URSOMANDO
3
JAVA
La programmazione OOP
Ereditarietà
EREDITARIETÀ
Classe Cane
Classe Alano
Classe Barboncino
Classe Mastino
Classe PT
Classe Collie
DIAPOSITIVA 7
JAVA
ALESSANDRO URSOMANDO
La programmazione OOP
Polimorfismo
POLIMORFISMO
Classe PT
Classe Cane
Classe Collie
commissarioRex
DIAPOSITIVA 8
lassie
ALESSANDRO URSOMANDO
4
JAVA
La programmazione OOP
Linguaggi
LINGUAGGI
Linguaggi puri
Linguaggi ibridi
DIAPOSITIVA 9
ALESSANDRO URSOMANDO
JAVA
La portabilità
5
JAVA
Portabilità
PORTABILITÀ
Sistema Linux
con JVM
COMPILAZIONE
Codice
Sorgente
“INTERPRETAZIONE”
Bytecode
Sistema MAC
con JVM
Java Runtime
Enviroment (JVM e le
librerie di classi)
Compilatore ed altri
strumenti
Sistema WIN
con JVM
JDK
DIAPOSITIVA 11
ALESSANDRO URSOMANDO
JAVA
BlueJ
6
JAVA
BLUEJ
BLUEJ
IDE per sviluppare in Java
Multi-Piattaforma
Licenza GNU
Kent University
BlueJ
DIAPOSITIVA 13
JAVA
BLUEJ
ALESSANDRO URSOMANDO
Selezione JVM
SELEZIONE JVM
DIAPOSITIVA 14
ALESSANDRO URSOMANDO
7
JAVA
BLUEJ
Creazione di un progetto
CREAZIONE PROGETTO
Project
New Project
Raggiungi la posizione desiderata
Digita il nome del progetto
BlueJ crea una cartella con questo nome
(che rappresenta il progetto)
DIAPOSITIVA 15
JAVA
BLUEJ
ALESSANDRO URSOMANDO
Creazione di una classe
CREAZIONE CLASSE
Pulsante <New Class>
BlueJ crea un file con questo nome
DIAPOSITIVA 16
ALESSANDRO URSOMANDO
8
JAVA
BLUEJ
Creazione di una classe per eseguire codice
CREAZIONE CLASSE PER
ESEGUIRE CODICE
DIAPOSITIVA 17
JAVA
BLUEJ
ALESSANDRO URSOMANDO
Creazione di una classe per eseguire codice
CREAZIONE CLASSE PER
ESEGUIRE CODICE
DIAPOSITIVA 18
ALESSANDRO URSOMANDO
9
JAVA
BLUEJ
Creazione di una classe propriamente detta
CREAZIONE CLASSE
PROPRIAMENTE DETTA
DIAPOSITIVA 19
JAVA
BLUEJ
ALESSANDRO URSOMANDO
Creazione di un oggetto
CREAZIONE OGGETTO
DIAPOSITIVA 20
ALESSANDRO URSOMANDO
10
JAVA
BLUEJ
Creazione di un oggetto
CREAZIONE OGGETTO
DIAPOSITIVA 21
ALESSANDRO URSOMANDO
JAVA
Gli elementi del linguaggio
11
JAVA
Gli elementi del Linguaggio
Tipi di dato
TIPI DI DATO
TIPO
BIT
VALORI
VALORI
unsigned
VALORE
INIZIALE
boolean
1
-
-
false
char
16
byte
8
[-128; 127]
16
[-215;
215-1]
231-1]
short
unicode [0;
216-1]
int
32
[-231;
long
64
[-263; 263-1]
-
‘\u0000’
[0; 255]
0
[0;
216-1
0
[0;
232-1]
0
[0; 264-1]
0
float
32
precisione singola
0.0
double
64
precisione doppia
0.0
void
-
-
-
DIAPOSITIVA 23
JAVA
-
ALESSANDRO URSOMANDO
Gli elementi del Linguaggio
Operatori
OPERATORI
OPERATORI
SIGNIFICATO
++ --
Autoincremento / decremento
+ - * / %
Aritmetici
+
Concatenazione
== != > >= < <=
Confronto
&& || !
Logici
=
Assegnazione
+= -= *= /= %=
Assegnazione combinati
.
Accesso ai membri di un oggetto
/*..*/
DIAPOSITIVA 24
/**..*/
//..
Commenti
ALESSANDRO URSOMANDO
12
JAVA
Gli elementi del Linguaggio
Modificatori
MODIFICATORI
Modificatore
Applicato a
Significato
unsigned
attributi
solo valori non negativi
static
attributi e metodi
di classe (e non di ciascun oggetto)
final
attributi
rende la variabile costante
final
classe
rende la classe non estendibile
metodo
rende impossibile l’overriding del
metodo
final
DIAPOSITIVA 25
JAVA
ALESSANDRO URSOMANDO
Gli elementi del Linguaggio
Modificatori
MODIFICATORI
Modificatore
Applicato a
Significato
public
classi, attributi e metodi
visibile da tutte le classi di tutti i
package
private
classi, attributi e metodi
visibile solo nella classe
protected
classi, attributi e metodi
visibile a tutte le classi dello stesso
package (sottoclassi comprese)
package
classi, attributi e metodi
visibile a tutte le classi dello stesso
package (sottoclassi escluse)
abstract
metodo
è un metodo senza corpo
abstract
classe
classe non istanziabile: impone a tutte
le sottoclassi di implementare tutti i
metodi astratti
synchronized
metodo
è un metodo che accede a un dato da
usare in mutua esclusione
DIAPOSITIVA 26
ALESSANDRO URSOMANDO
13
JAVA
Gli elementi del Linguaggio
Istruzioni condizionali
ISTRUZIONI CONDIZIONALI
DIAPOSITIVA 27
JAVA
Gli elementi del Linguaggio
ALESSANDRO URSOMANDO
Istruzioni condizionali
ISTRUZIONI CONDIZIONALI
DIAPOSITIVA 28
ALESSANDRO URSOMANDO
14
JAVA
Gli elementi del Linguaggio
Istruzioni Iterative
ISTRUZIONI ITERATIVE
DIAPOSITIVA 29
JAVA
ALESSANDRO URSOMANDO
Gli elementi del Linguaggio
Variabili Reference
VARIABILI REFERENCE
DIAPOSITIVA 30
ALESSANDRO URSOMANDO
15
JAVA
Metodi speciali
JAVA
Metodi Speciali
Costruttori
COSTRUTTORI
Il costruttore è un metodo speciale
che viene invocato da Java quando
viene creata una nuova istanza di
un oggetto (con l’operatore new).
Si usa per inizializzare tutti
gli attributi della classe
Ha lo stesso nome della classe
Costruttore
Non restituisce niente
Non può essere invocato
esplicitamente
DIAPOSITIVA 32
ALESSANDRO URSOMANDO
16
JAVA
Metodi Speciali
Finalizzatore
FINALIZZATORE
Sappiamo che dichiarare una variabile di un certo oggetto
alloca spazio solo per il riferimento all’oggetto il quale verrà realmente
allocato in memoria successivamente con l’operatore new.
Il Garbage Collector conta i
riferimenti ai vari oggetti allocati e
quando il numero di riferimenti è
zero libera la memoria
Garbage Collector
Prima di eliminare un oggetto dalla memoria
Java invoca il metodo finalize(), che può essere
usato per chiudere file, chiudere connessioni a DB, ecc.
DIAPOSITIVA 33
JAVA
Metodi Speciali
ALESSANDRO URSOMANDO
equals()
EQUALS()
DIAPOSITIVA 34
ALESSANDRO URSOMANDO
17
JAVA
Metodi Speciali
toString()
TOSTRING()
DIAPOSITIVA 35
ALESSANDRO URSOMANDO
JAVA
API e package
18
JAVA
API e Package
API E PACKAGE
Un package è una libreria di classi.
La gerarchia di package riflette la
gerarchia a livello di file system.
Package
Per inserire una classe in un package
non basta far risiedere il file che la definisce
in una certa cartella, bisogna specificare:
package <nome_package>;
Quando in una classe si fa uso di classi
di altri package, bisogna indicarlo:
import <path_package>.*;
DIAPOSITIVA 37
JAVA
ALESSANDRO URSOMANDO
API e Package
API E PACKAGE
Le API delle librerie standard di Java
vengono fornite con il JRE e
consentono l’indipendenza dal sistema.
API
Le API di Java coprono le esigenze
base più disparate: dalla grafica alla gestione
del multi-threading; dalle classi contenitore per i
tipi base (più la classe String) alle classi per la
gestione della programmazione su reti.
http://download.oracle.com/javase/7/docs/api
Documentazione Java 7
DIAPOSITIVA 38
ALESSANDRO URSOMANDO
19
JAVA
Oveloading e Overriding
JAVA
Overloading ed Overriding
OVERLOADING ED OVERRIDING
Per overloading
si intende la
presenza – nella
stessa classe – di
più metodi con lo
stesso nome ma
con firme diverse.
Overloading
DIAPOSITIVA 40
ALESSANDRO URSOMANDO
20
JAVA
Overloading ed Overriding
OVERLOADING ED OVERRIDING
Per overriding si
intende la
possibilità di
riscrivere un
metodo ereditato
Overriding
DIAPOSITIVA 41
ALESSANDRO URSOMANDO
JAVA
La documentazione
21
JAVA
La Documentazione
LA DOCUMENTAZIONE
Java offre lo strumento javadoc che
interpretando il codice opportunamente
commentato genera la documentazione del
progetto in HTML.
javadoc
Tools
DIAPOSITIVA 43
JAVA
In BlueJ si trova in:
Project Documentation
ALESSANDRO URSOMANDO
La Documentazione
DIAPOSITIVA 44
ALESSANDRO URSOMANDO
22
JAVA
Gestione delle eccezioni
JAVA
Gestione delle eccezioni
Sommario
GESTIONE DELLE ECCEZIONI
Classificazione degli errori
La gerarchia delle classi
Il blocco try-catch
Propagazione dell’eccezione
Metodi della classe Exception
DIAPOSITIVA 46
ALESSANDRO URSOMANDO
23
JAVA
Gestione delle eccezioni
Classificazione degli errori
CLASSIFICAZIONE DEGLI ERRORI
I seguenti eventi possono generare l’arresto di un programma utente:
• l’accesso a un vettore con un indice sbagliato
• il tentativo di apertura di un file che fallisce
• ecc. ecc.
In questi casi il programma viene chiuso presentando a video
un messaggio che riporta:
- Il nome dell’errore
- La linea di codice che ha generato l’errore
- Lo stack dei metodi che hanno portato a quella linea di codice
In alcune circostanze questo (spiacevole) comportamento si può evitare!
DIAPOSITIVA 47
JAVA
ALESSANDRO URSOMANDO
Gestione delle eccezioni
Classificazione degli errori
CLASSIFICAZIONE DEGLI ERRORI
Java separa gli errori irreparabili (definiti appunto errori) da quelli che
Invece non compromettono il proseguimento del programma (definiti eccezioni).
Un errore potrebbe essere
il malfunzionamento fisico
di un dispositivo di sistema.
Un errore non può essere gestito.
DIAPOSITIVA 48
Un’eccezione potrebbe
essere il tentativo di eseguire una
divisione per zero.
In questi casi si può pensare di
gestire la situazione.
ALESSANDRO URSOMANDO
24
JAVA
Gestione delle eccezioni
Classificazione degli errori
CLASSIFICAZIONE DEGLI ERRORI
In un programma java quindi ci sono delle porzioni di codice che generano
(sollevano) eccezioni e delle altre parti di codice che le gestiscono.
Pertanto il programmatore nei confronti
di una possibile eccezione può decidere di:
- ignorarla
- gestirla subito
- gestirla altrove nel programma
DIAPOSITIVA 49
JAVA
Gestione delle eccezioni
ALESSANDRO URSOMANDO
La gerarchia delle classi
LA GERARCHIA DELLE CLASSI
Le eccezioni sono organizzate
in una gerarchia di classi dove la
classe base è la classe Exception
che viene specializzata in un certo
numero di sottoclassi.
http://download.oracle.com/javase/1.4.2/docs/api/java/lang/package-tree.html
DIAPOSITIVA 50
ALESSANDRO URSOMANDO
25
JAVA
Gestione delle eccezioni
Il blocco try-catch
IL BLOCCO TRY-CATCH
Java permette di eseguire
porzioni di codice
potenzialmente pericoloso
in un blocco try-catch.
DIAPOSITIVA 51
JAVA
ALESSANDRO URSOMANDO
Gestione delle eccezioni
Il blocco try-catch
IL BLOCCO TRY-CATCH
Nel blocco try inserisco il codice potenzialmente
pericoloso che viene eseguito tutto o fino al
sollevamento dell’eccezione.
A seguire inserisco uno o più clausole catch:
ogni clausola catch è in grado di catturare una
singola eccezione o una famiglia di eccezioni. Se
viene sollevata un’eccezione durante l’esecuzione del
blocco try, si valutano in ordine tutti i catch: viene
eseguito solo il blocco di codice del primo catch che è
in grado di gestire l’eccezione verificatasi.
E se l’eccezione
verificatasi non è
gestita da alcun catch?
Che senso ha
avere più catch?
A seguire inserisco il blocco finally
che viene sempre e comunque eseguito.
DIAPOSITIVA 52
ALESSANDRO URSOMANDO
26
JAVA
Gestione delle eccezioni
Propagazione dell’eccezione
PROPAGAZIONE DELL’ECCEZIONE
Un catch è in grado di gestire una condizione
anomala che si è verificata in un blocco try.
Nel blocco try ci possono essere tante istruzioni e anche
invocazioni di metodi.
BLOCCO DI CODICE
…
…
invoco il metodo x
…
…
METODO x
…
…
invoco il metodo y
…
…
METODO y
…
…
istruzione
…
…
Qualora nell’esecuzione di un metodo venga
sollevata un’eccezione e non venga gestita al suo interno,
questa viene propagata al metodo chiamante.
DIAPOSITIVA 53
JAVA
Gestione delle eccezioni
ALESSANDRO URSOMANDO
Metodi della classe Exception
METODI DELLA CLASSE EXCEPTION
In un modulo
catch viene – per
definizione – resa
disponibile un’istanza di
una classe Exception o
di una sua sottoclasse.
Possiamo usare il metodo toString
che mostra il messaggio di errore.
Possiamo usare il metodo printStackTrace()
– ereditato da Throwable – per stampare l’elenco dei
metodi che non hanno gestito l’eccezione.
DIAPOSITIVA 54
ALESSANDRO URSOMANDO
27
JAVA
Classi astratte ed interfacce
JAVA
Classi Astratte e Interfacce
Classi Astratte
CLASSI ASTRATTE
Un metodo è astratto quando viene dichiarato
con il modificatore abstract che sta ad
indicare quanto segue:
1) Il metodo è privo di implementazione
2) Tutte le sottoclassi devono implementare
questo metodo
Se una classe ha
anche un solo metodo
abstract è essa stessa
una classe astratta.
Metodi Astratti
Una classe astratta non può essere istanziata
ed obbliga tutte le sue sottoclassi ad
implementare tutti i suoi metodi abstract.
Una classe può essere
dichiarata astratta anche se
non ha alcun metodo astratto
Classi Astratte
DIAPOSITIVA 56
ALESSANDRO URSOMANDO
28
JAVA
Classi Astratte e Interfacce
Interfacce
INTERFACCE
Le interfacce sono il metodo con il
quale Java implementa la ereditarietà multipla.
Un’interfaccia è un contenitore simile a una
classe ma che presenta qualche limitazione:
1) tutte le variabili (se ci sono) sono per
definizione public static e final
2) tutti i metodi (se ci sono) sono per
definizione abstract e public
Le interfacce
Una classe può implementare una o più interfacce (oltre che estendere una classe)
in questo caso sarà obbligata ad implementare tutti i metodi delle interfacce.
DIAPOSITIVA 57
JAVA
ALESSANDRO URSOMANDO
Classi Astratte e Interfacce
Interfacce
INTERFACCE
Per esempio una classe che implementa l’interfaccia
predefinita Comparable è tenuta a definire il metodo
int compareTo (Object)
il quale viene adoperato in presenza di operatori di confronto.
DIAPOSITIVA 58
ALESSANDRO URSOMANDO
29
JAVA
File e Flussi
JAVA
File e Flussi
Sommario
FILE E FLUSSI
Introduzione ai flussi
La gerarchia delle classi
Concatenazione dei flussi
Input da tastiera
File di testo
File di dati
DIAPOSITIVA 60
ALESSANDRO URSOMANDO
30
JAVA
File e Flussi
Introduzione ai Flussi
INTRODUZIONE AI FLUSSI
Java gestisce tutte le operazioni di I/O con il concetto di flusso
(stream in inglese)
Connessione
remota
Tastiera
Flusso di Input
Programma
File di dati
Risorsa esterna
DIAPOSITIVA 61
JAVA
File e Flussi
ALESSANDRO URSOMANDO
Introduzione ai Flussi
INTRODUZIONE AI FLUSSI
Java gestisce tutte le operazioni di I/O con il concetto di flusso
(stream in inglese)
Connessione
remota
Flusso di Output
Monitor
Programma
File di dati
Risorsa esterna
DIAPOSITIVA 62
ALESSANDRO URSOMANDO
31
JAVA
File e Flussi
Introduzione ai Flussi
INTRODUZIONE AI FLUSSI
Java gestisce tutte le operazioni di I/O con il concetto di flusso
(stream in inglese)
Un flusso di byte indica la
trasmissione di dati strutturati
Un flusso di caratteri indica la
trasmissione di testi
Flusso di byte
Flusso di caratteri
DIAPOSITIVA 63
JAVA
ALESSANDRO URSOMANDO
File e Flussi
La gerarchia delle classi
LA GERARCHIA DELLE CLASSI
BufferedReader
Reader
InputStreamReader
FileReader
Object
PrintWriter
Writer
Le classi per i flussi di caratteri
OutputStreamWriter
FileWriter
FileInputStream
InputStream
ObjectInputStream
Object
FileOutputStream
OutputStream
Le classi per i flussi di byte
DIAPOSITIVA 64
ObjectOutputStream
ALESSANDRO URSOMANDO
32
JAVA
File e Flussi
Concatenazione di flussi
CONCATENAZIONE DI FLUSSI
In entrambe le gerarchie ci sono due classi per l’input e due classi per l’output.
Le due classi forniscono due punti di vista sullo stesso tipo di flusso.
Queste due classi di solito si usano insieme: una di seguito all’altra.
Flusso Basso Livello
Flusso Alto Livello
BufferedReader
Reader
InputStreamReader
FileReader
Object
PrintWriter
Writer
OutputStreamWriter
Le classi per i flussi di caratteri
FileWriter
FileInputStream
InputStream
ObjectInputStream
Object
FileOutputStream
OutputStream
ObjectOutputStream
Le classi per i flussi di byte
DIAPOSITIVA 65
JAVA
ALESSANDRO URSOMANDO
File e Flussi
Input da tastiera
INPUT DA TASTIERA
L’input da tastiera è visto come un flusso di caratteri che partono dallo standard input
(tastiera) ed arrivano al programma.
Tastiera
Flusso di Input
Programma
BufferedReader
Reader
InputStreamReader
FileReader
Object
PrintWriter
Writer
Le classi per i flussi di caratteri
DIAPOSITIVA 66
OutputStreamWriter
FileWriter
ALESSANDRO URSOMANDO
33
JAVA
File e Flussi
Input da tastiera
INPUT DA TASTIERA
Con la classe InputStreamReader leggo i byte dallo standard input e li codifico in
caratteri utilizzando un certo charset. La classe BufferedReader gestisce per noi un buffer
in modo da fornire solo dati significati (si pensi al metodo readLine()).
Tastiera
InputStreamReader
BufferedReader
Programma
BufferedReader
Reader
InputStreamReader
FileReader
Object
PrintWriter
Writer
OutputStreamWriter
Le classi per i flussi di caratteri
DIAPOSITIVA 67
JAVA
File e Flussi
FileWriter
ALESSANDRO URSOMANDO
Input da tastiera
INPUT DA TASTIERA
Con la classe InputStreamReader leggo i byte dallo standard input e li codifico in
caratteri utilizzando un certo charset. La classe BufferedReader gestisce per noi un buffer
in modo da fornire solo dati significati (si pensi al metodo readLine()).
Tastiera
InputStreamReader
BufferedReader
Programma
DIAPOSITIVA 68
ALESSANDRO URSOMANDO
34
JAVA
File e Flussi
File di testo
FILE DI TESTO
Flusso di Input
File di testo
Flusso di Output
File di testo
Programma
Apertura
in sovrascrittura (o creazione)
in scrittura (o append)
in lettura
Chiusura
Scrittura
Lettura
Cominciamo a studiare
l’operazione di lettura.
Operazioni sui file
DIAPOSITIVA 69
JAVA
File e Flussi
ALESSANDRO URSOMANDO
File di testo
Lettura
FILE DI TESTO: LETTURA
Prima di tutto dobbiamo aprire il file in lettura.
Flusso di Input
File di testo
Programma
BufferedReader
Reader
InputStreamReader
FileReader
Object
PrintWriter
Writer
Le classi per i flussi di caratteri
DIAPOSITIVA 70
OutputStreamWriter
FileWriter
ALESSANDRO URSOMANDO
35
JAVA
File e Flussi
File di testo
Lettura
FILE DI TESTO: LETTURA
Con la classe FileReader leggo i caratteri dal file. La classe BufferedReader gestisce
per noi un buffer in modo da fornire solo dati significativi (si pensi al metodo readLine()).
FileReader
BufferedReader
File di testo
Programma
BufferedReader
Reader
InputStreamReader
FileReader
Object
PrintWriter
Writer
OutputStreamWriter
Le classi per i flussi di caratteri
DIAPOSITIVA 71
JAVA
FileWriter
ALESSANDRO URSOMANDO
File e Flussi
File di testo
Lettura
FILE DI TESTO: LETTURA
Con la classe FileReader leggo i caratteri dal file. La classe BufferedReader gestisce
per noi un buffer in modo da fornire solo dati significativi (si pensi al metodo readLine()).
FileReader
BufferedReader
File di testo
Programma
DIAPOSITIVA 72
ALESSANDRO URSOMANDO
36
JAVA
File e Flussi
File di testo
Scrittura
FILE DI TESTO: SCRITTURA
Prima di tutto dobbiamo aprire il file in scrittura.
Flusso di Output
File di testo
Programma
BufferedReader
Reader
InputStreamReader
FileReader
Object
PrintWriter
Writer
OutputStreamWriter
Le classi per i flussi di caratteri
DIAPOSITIVA 73
JAVA
FileWriter
ALESSANDRO URSOMANDO
File e Flussi
File di testo
Scrittura
FILE DI TESTO: SCRITTURA
Con la classe FileWriter scrivo fisicamente sul file. La classe PrintWriter fornisce
metodi di scrittura evoluti come print() e println().
PrintWriter
FileWriter
File di testo
Programma
BufferedReader
Reader
InputStreamReader
FileReader
Object
PrintWriter
Writer
Le classi per i flussi di caratteri
DIAPOSITIVA 74
OutputStreamWriter
FileWriter
ALESSANDRO URSOMANDO
37
JAVA
File e Flussi
File di testo
Scrittura
FILE DI TESTO: SCRITTURA
Con la classe FileWriter scrivo fisicamente sul file. La classe PrintWriter fornisce
metodi di scrittura evoluti come print() e println().
PrintWriter
FileWriter
File di testo
Programma
DIAPOSITIVA 75
JAVA
File e Flussi
ALESSANDRO URSOMANDO
File di testo
Scrittura
FILE DI TESTO: SCRITTURA
DIAPOSITIVA 76
ALESSANDRO URSOMANDO
38
JAVA
File e Flussi
File di testo
Scrittura
FILE DI TESTO: SCRITTURA
Le apertura in scrittura di un file consentono
solo le due modalità indicate:
- in sovrascrittura (creazione)
- in append (aggiunta in coda)
In nessun caso è possibile modificare o eliminare un
valore archiviato in un file.
DIAPOSITIVA 77
JAVA
ALESSANDRO URSOMANDO
File e Flussi
File di testo
File di testo per dati
FILE DI TESTO PER DATI
Possiamo inserire (e poi leggere) in un file di testo anche valori di tipo diverso.
In lettura, una volta acquisita la stringa: “10;3.14”, possiamo separare i
vari campi con uno strumento che si chiama StringTokenizer.
DIAPOSITIVA 78
ALESSANDRO URSOMANDO
39
JAVA
File e Flussi
File di testo
File di testo per dati
FILE DI TESTO PER DATI
È una classe del
package java.util che
separa una stringa in
vari token separati da
un delimitatore.
hasMoreToken() restituisce true se
ci sono altri token da estarre
nextToken() restituisce il token attuale e si
sposta su quello successivo
StringTokenizer
DIAPOSITIVA 79
JAVA
ALESSANDRO URSOMANDO
File e Flussi
File strutturati
FILE STRUTTURATI
Flusso di Input
File di dati
Flusso di Output
File di dati
Programma
Apertura
in sovrascrittura (o creazione)
in scrittura (o append)
in lettura
Chiusura
Scrittura
Lettura
Cominciamo a studiare
l’operazione di lettura.
Operazioni sui file
DIAPOSITIVA 80
ALESSANDRO URSOMANDO
40
JAVA
File e Flussi
File strutturati
Lettura
FILE STRUTTURATI: LETTURA
Prima di tutto dobbiamo aprire il file in lettura.
Flusso di Input
File di dati
Programma
FileInputStream
InputStream
ObjectInputStream
Object
FileOutputStream
OutputStream
ObjectOutputStream
Le classi per i flussi di byte
DIAPOSITIVA 81
JAVA
ALESSANDRO URSOMANDO
File e Flussi
File strutturati
Lettura
FILE STRUTTURATI: LETTURA
Con la classe FileInputStream leggo i byte dal file. La classe ObjectInputStream
formatta questi dati nel tipo richiesto: fornisce infatti metodi come readInt(), readDouble(),
readBool() e anche readObject() (per gli oggetti).
FileInputStream
ObjectInputStream
File di dati
Programma
FileInputStream
InputStream
ObjectInputStream
Object
FileOutputStream
OutputStream
Le classi per i flussi di byte
DIAPOSITIVA 82
ObjectOutputStream
ALESSANDRO URSOMANDO
41
JAVA
File e Flussi
File strutturati
Lettura
FILE STRUTTURATI: LETTURA
Con la classe FileInputStream leggo i byte dal file. La classe ObjectInputStream
formatta questi dati nel tipo richiesto: fornisce infatti metodi come readInt(), readDouble(),
readBool() e anche readObject() (per gli oggetti).
FileInputStream
ObjectInputStream
File di dati
Programma
FileInputStream
InputStream
ObjectInputStream
Object
FileOutputStream
OutputStream
ObjectOutputStream
Le classi per i flussi di byte
DIAPOSITIVA 83
JAVA
ALESSANDRO URSOMANDO
File e Flussi
File strutturati
Scrittura
FILE STRUTTURATI: SCRITTURA
Prima di tutto dobbiamo aprire il file in scrittura.
Flusso di Output
File di dati
Programma
FileInputStream
InputStream
ObjectInputStream
Object
FileOutputStream
OutputStream
Le classi per i flussi di byte
DIAPOSITIVA 84
ObjectOutputStream
ALESSANDRO URSOMANDO
42
JAVA
File e Flussi
File strutturati
Scrittura
FILE STRUTTURATI: SCRITTURA
Con la classe FileOutputStream scrivo fisicamente sul file. La classe
ObjectOutputStream fornisce metodi come writeInt(), writeDouble(), writeBool()
e anche writeObject() (per gli oggetti).
ObjectOutputStream
FileOutputStream
File di testo
Programma
FileInputStream
InputStream
ObjectInputStream
Object
FileOutputStream
OutputStream
Le classi per i flussi di byte
ObjectOutputStream
DIAPOSITIVA 85
JAVA
ALESSANDRO URSOMANDO
File e Flussi
File strutturati
Scrittura
FILE STRUTTURATI: SCRITTURA
Con la classe FileOutputStream scrivo fisicamente sul file. La classe
ObjectOutputStream fornisce metodi come writeInt(), writeDouble(), writeBool()
e anche writeObject() (per gli oggetti).
ObjectOutputStream
FileOutputStream
File di testo
Programma
DIAPOSITIVA 86
ALESSANDRO URSOMANDO
43
JAVA
File e Flussi
File strutturati
Scrittura
FILE STRUTTURATI: SCRITTURA
La classe UnaClasseQualsiasi – per potere essere usata come argomento
di writeObject() – deve implementare l’interfaccia Serializable.
DIAPOSITIVA 87
ALESSANDRO URSOMANDO
JAVA
Gestione del Multithreading
44
JAVA
Gestione del Multi-threading
Introduzione
MULTI-THREADING
Con il termine thread (processo leggero) si
indicano le varie trame (o filoni) di un processo.
Thread
Supponiamo per esempio che un
processo avvii un nuovo thread per farsi
aiutare nel portare avanti un lavoro.
DIAPOSITIVA 89
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
Introduzione
MULTI-THREADING
Con il termine thread (processo leggero) si
indicano le varie trame (o filoni) di un processo.
Thread
Un processo (o anche un thread) può
avviare un numero imprecisato di thread.
DIAPOSITIVA 90
ALESSANDRO URSOMANDO
45
JAVA
Gestione del Multi-threading
Introduzione
MULTI-THREADING
Con il termine thread (processo leggero) si
indicano le varie trame (o filoni) di un processo.
Thread
Inoltre un processo potrebbe anche
avviare più thread e poi morire.
DIAPOSITIVA 91
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
Introduzione
MULTI-THREADING
Con il termine thread (processo leggero) si
indicano le varie trame (o filoni) di un processo.
Thread
Ovviamente non tutti i thread devono
completare il lavoro loro assegnato
contemporanemente
DIAPOSITIVA 92
ALESSANDRO URSOMANDO
46
JAVA
Gestione del Multi-threading
Introduzione
MULTI-THREADING
Con il termine thread (processo leggero) si
indicano le varie trame (o filoni) di un processo.
Thread
Il multi-threading può essere adoperato quando
un processo deve svolgere diverse attività in
contemporanea.
Multi-threading
Per esempio, quando si esegue un programma Java,
in realtà si lancia il processo della JVM (java.exe) il quale lancia diversi thread:
il gestore degli eventi utili alla grafica, il garbage collector,
il programma utente java mandato in esecuzione, ecc.
DIAPOSITIVA 93
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
Informazioni sul thread corrente
INFORMAZIONI SUL THREAD CORRENTE
ESERCIZIO
00-00-04-13
Cominciamo ad imparare come leggere e modificare
informazioni relative al thread del programma in esecuzione
DIAPOSITIVA 94
ALESSANDRO URSOMANDO
47
JAVA
Gestione del Multi-threading
La classe Thread
LA CLASSE THREAD
E se volessimo avviare un thread dal main?
Una strada è quella di creare
una nuova classe che deriva da Thread
Una sottoclasse di Thread deve
fare overriding del metodo run() che
viene invocato dalla JVM all’avvio del thread e
contiene il lavoro del thread
Una volta istanziata la classe possiamo avviare il thread
(metodo start), fermarlo (metodo stop), e/o distruggerlo (metodo destroy).
DIAPOSITIVA 95
JAVA
Gestione del Multi-threading
ALESSANDRO URSOMANDO
La classe Thread
Un esempio monothread
Margherita: i costruttori
ESERCIZIO
00-00-03-14
MARGHERITA: I COSTRUTTORI
DIAPOSITIVA 96
ALESSANDRO URSOMANDO
48
JAVA
Gestione del Multi-threading
La classe Thread
Un esempio monothread
Margherita: il metodo run()
ESERCIZIO
00-00-03-14
MARGHERITA: IL METODO RUN()
DIAPOSITIVA 97
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
La classe Thread
Un esempio monothread
Margherita: uso numero 1
ESERCIZIO
00-00-03-14
MARGHERITA: USO #1
DIAPOSITIVA 98
ALESSANDRO URSOMANDO
49
JAVA
Gestione del Multi-threading
La classe Thread
Un esempio monothread
Margherita: uso numero 2
ESERCIZIO
00-00-03-14
MARGHERITA: USO #2
DIAPOSITIVA 99
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
La classe Thread
Un esempio monothread
Margherita: uso numero 3
ESERCIZIO
00-00-03-14
MARGHERITA: USO #3
DIAPOSITIVA 100
ALESSANDRO URSOMANDO
50
JAVA
Gestione del Multi-threading
La classe Thread
Un esempio multi-thread
Margherita
MARGHERITA
E se volessimo avviare più thread dal main?
Modifichiamo l’esempio in modo che
ogni thread stampi il suo output in una
certa colonna a se’ intestata.
DIAPOSITIVA 101
JAVA
Gestione del Multi-threading
ALESSANDRO URSOMANDO
La classe Thread
Un esempio multi-thread
Margherita: i costruttori
ESERCIZIO
00-00-03-15
MARGHERITA: I COSTRUTTORI
DIAPOSITIVA 102
ALESSANDRO URSOMANDO
51
JAVA
Gestione del Multi-threading
La classe Thread
Un esempio multi-thread
Margherita: il metodo run()
ESERCIZIO
00-00-03-15
MARGHERITA: IL METODO RUN()
DIAPOSITIVA 103
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
La classe Thread
Un esempio multi-thread
Margherita: uso numero 1
ESERCIZIO
00-00-03-15
MARGHERITA: USO #1
DIAPOSITIVA 104
ALESSANDRO URSOMANDO
52
JAVA
Gestione del Multi-threading
La classe Thread
Un esempio multi-thread
Margherita: uso numero 2
ESERCIZIO
00-00-03-15
MARGHERITA: USO #2
DIAPOSITIVA 105
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
La classe Thread
Un esempio multi-thread
Margherita: uso numero 3
ESERCIZIO
00-00-03-15
MARGHERITA: USO #3
DIAPOSITIVA 106
ALESSANDRO URSOMANDO
53
JAVA
Gestione del Multi-threading
La classe Thread
Un esempio multi-thread
Margherita: uso numero 4
ESERCIZIO
00-00-03-15
MARGHERITA: USO #4
DIAPOSITIVA 107
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
La classe Thread
Un esempio multi-thread
Margherita: uso numero 5
MARGHERITA: USO #5
ESERCIZIO
00-00-03-15
Se imposto ad un valore
casuale la quantità di tempo
che un thread deve aspettare
prima di passare al petalo
successivo ottengo un
interfogliamento meno banale.
DIAPOSITIVA 108
ALESSANDRO URSOMANDO
54
JAVA
Gestione del Multi-threading
L’interfaccia Runnable
L’INTERFACCIA RUNNABLE
L’ereditarietà multipla in Java
si ottiene con le interfacce.
E se la mia classe – thread
è già sottoclasse di qualcun altro ?
Una classe che implementa
l’interfaccia Runnable è tenuta a
implementare il metodo run().
Un oggetto di una siffatta classe
può essere abbinato ad un oggetto
della classe Thread.
Runnable
La classe Thread ha
– tra gli altri –
un costruttore che prende
come argomento un
riferimento ad un oggetto che
implementi l’interfaccia
Runnable.
Il riferimento all’oggetto stesso this è un riferimento valido in tal senso.
DIAPOSITIVA 109
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
L’interfaccia Runnable
un esempio multi-thread
Margherita Runnable: attributi e costruttore
MARGHERITA RUNNABLE:
ESERCIZIO
00-00-04-16
ATTRIBUTI E COSTRUTTORE
DIAPOSITIVA 110
ALESSANDRO URSOMANDO
55
JAVA
Gestione del Multi-threading
L’interfaccia Runnable
un esempio multi-thread
Margherita Runnable: gli altri costruttori
MARGHERITA RUNNABLE:
ESERCIZIO
00-00-04-16
GLI ALTRI COSTRUTTORI
DIAPOSITIVA 111
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
L’interfaccia Runnable
un esempio multi-thread
Margherita Runnable: i metodi da inoltrare
MARGHERITA RUNNABLE:
I METODI DA INOLTRARE
ESERCIZIO
00-00-04-16
Il metodo
run() non
subisce
modifche
DIAPOSITIVA 112
ALESSANDRO URSOMANDO
56
JAVA
Gestione del Multi-threading
L’interfaccia Runnable
un esempio multi-thread
Margherita Runnable: usi numeri 1 e 2
MARGHERITA RUNNABLE: USI #1 E #2
ESERCIZIO
00-00-04-16
Questa classe Margherita può essere utilizzata esattamente come quella
precedente che estendeva Thread.
DIAPOSITIVA 113
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
L’interfaccia Runnable
un esempio multi-thread
Margherita Runnable: uso numero 3
MARGHERITA RUNNABLE: USO #3
ESERCIZIO
00-00-04-16
Questa classe Margherita può essere utilizzata esattamente come quella
precedente che estendeva Thread.
DIAPOSITIVA 114
ALESSANDRO URSOMANDO
57
JAVA
Gestione del Multi-threading
L’interfaccia Runnable
un esempio multi-thread
Margherita Runnable: uso numero 4
MARGHERITA RUNNABLE: USO #4
ESERCIZIO
00-00-04-16
Questa classe Margherita può essere utilizzata esattamente come quella
precedente che estendeva Thread.
DIAPOSITIVA 115
JAVA
ALESSANDRO URSOMANDO
Gestione del Multi-threading
L’interfaccia Runnable
Altri usi possibili
ALTRI USI DI RUNNABLE
Abbiamo dichiarato un oggetto di tipo Thread
nella classe Margherita e inoltrato alcuni metodi tipici.
Alternativamente a ciò si potrebbe:
• Scrivere il solo metodo run() nella classe che implementa Runnable
• Nel main (o altrove)
• istanziare un oggetto di questa classe
• istanziare un oggetto di tipo Thread al quale si lega l’oggetto appena istanziato
• fare uso dei metodi start(), stop(), getName(), ecc, dell’oggetto di tipo Thread
Questa soluzione induce a produrre un
codice meno pulito ma in alcuni casi
può risultare utile
DIAPOSITIVA 116
ALESSANDRO URSOMANDO
58
MUTUA ESCLUSIONE
Quando un dato deve essere usato in mutua esclusione
da Thread diversi, i metodi che accedono a questo dato
devono essere dichiarati con il modificatore synchronized
Posti Disponibili
Operatore
Utente 2
DIAPOSITIVA 117
JAVA
ESERCIZIO
00-00-03-20
Utente 1
ALESSANDRO URSOMANDO
Gestione del Networking
NETWORKING
401
144
DIAPOSITIVA 118
ALESSANDRO URSOMANDO
59