Table Of ContentLaboratorio di programmazione in Java
Autori: Paolo Coppola e Stefano Mizzaro
Copyright @ 2004 - APOGEO
Via Natale Battaglia 12 - 20127 Milano (ltaly)
Telefono: 02-289981 - Fax: 02-26116334
Email [email protected]
U.R.L. www.apogeonline.com
ISBN 88-503-2145-7
Impaginazione elettronica con l11F){ 2e
Editor: Alberto Kratter ThaJer
Copertina e progetto grafico: Enrico Marcandalll
Responsabile di produzione: Vitiano Zaini
Tutti i diritti sono riservati a norma di legge e a norma delle convenzioni internazionali. Nessuna
parte di questo libro può essere riprodotta con sistemi elettronici, meccanici o altri, senza l'autoriz-
1..azione scritta dell'Editore.
Nomi e marchi citati nel testo sono generalmente depositati o registrati dalle rispettive case
produttrici.
Ad Anna,
che conosce i metodi e capisce le eccezioni
e a Giorgia,
che è ancora in compilazione,
ma che presto sarà in esecuzione.
A Federico,
per tutto quello che mi stai insegnando.
Indice
Prefazione ix
Premessa xi
Gli esercizi 1
Capitolo I
I primi passi 3
1.1 I nostri primi programmi in Java . . . . . . . 3
1.2 I mattoni di base dei programmi Java . .. . 6
1.2.1 I messaggi di errore del compilatore . 6
1.2.2 I tipi di dato primitivi . . . . . . 7
1.2.3 I letterali e le sequenze di escape 8
1.2.4 Gli operatori fra valori interi . 8
1.2.5 L'operatore di modulo''%" . 9
1.2.6 Il tipo di dato boolean . . . IO
1.2.7 Promozioni e cast ... .. . IO
1.2.8 Le convenzioni per gli identificatori e i commenti 12
1.3 Tecniche, problemi e trucchi ricorrenti . 12
1.4 Una classe utile: Leggi. j ava . 15
Capitolo 2
La programmazione strutturata 19
2.1 Le strutture di controllo di base . . . . . . 19
2.1.1 La sequenza di istruzioni . . . . . 19
2.1.2 L'istruzione di selezione if / else 21
2.1.3 Gli if /else annidati . . . . . . . 22
2.1.4 L'istruzione while ....... . 24
2.1. 5 Lo sviluppo incrementale dei programmi 24
2.1.6 I cicli annidati . . . . . . . 25
2.2 Le strutture di controllo avanzate . 26
2.2.1 L'istruzione switch / case 26
2.2.2 L'istruzione do/while .. 27
vi Indice
2.2.3 L'i truzione for .... . ... . 27
2.2.4 I for annidati ... . ... .. . 28
2.2.5 Le istruzioni break e continue 29
2.2.6 Approfondimenti: for, cicli annidati,++ e -- 30
2.3 Glj array ........ .. . . 35
2.3.1 Array unidjmen ionaJi . . . . . . . . . 35
2.3.2 Array multimen ionaJi . . . . . . . . . 36
2.3.3 E ercizi di approfondimento sugli array 38
Capitolo 3
I metodi e l'occultamento delle informazioni 41
3.1 I metodi . . . . . . . . . . . . . . 41
3.1.1 Introduzione ai metodi . . . 41
3 .1. 2 Parametri per valore e per riferimento 45
3.1.3 La vi ibilità delle variabili 46
3.1.4 Saper u are i metodi ...... . 47
3.1.5 Metodi e array . ... . .... . 48
3.1.6 Imparare a progettare un metodo 51
3.2 La ricor ione . . . . . . . . . . . . . . . 53
3.3 I ti pi di dato a tratti . . . . . . . . . . . 57
3.3. l U are e modificare un semplice TDA 57
3.3.2 Metodi in ver ione procedurale e funzionale . 59
3.3.3 I CO truttori . . . . . . . . . . . . 60
3.3.4 Definire nuovi TDA . . . . . . . . 61
3.3.5 L'occultamento delle informazioni 62
Capitolo 4
La programmazione orientata agli oggetti 65
4.1 Dai tipi di dato a tratti agli oggetti . . . . . . . 65
4.1. l Definire e usare oggetti . . . . . . . . 65
4.1.2 L'uso di this e della notazione puntata 70
4.2 Eredità e polimorfi mo . . . . . . . . . 76
4.2. l L'ereditarietà e la sovrascrittura . . . . 76
4.2.2 L'uso di super . . . . . . . . . . . . 78
4.2.3 li polimorfi mo, il late-binding, le clas i a tratte e le interfacce 80
4.2.4 Definire gerarchie . . . . . . . . . . . . . . . . . . . . . . 85
Capitolo 5
fava avanzato 89
5.1 Le API di Java . . . . . . 89
5.1.l Le eccezioni . . . 89
5.1.2 La clas e 0b j ect 91
5.1.3 Package e documentazione delle API Java . 92
Indice vii
5.2 Le interfacce grafiche . . . . . . . 94
5.2.1 Le prime interfacce grafiche 94
5.2.2 A coltatori e adattatori .. . 95
5.2.3 I ge tori del Iayout e gli eventi . 97
5.2.4 Gli applet e come di egnare ui componenti . 104
Le soluzioni 107
apitolo 6
oluzioni del capitolo J 109
6.1 I no tri primi programmi in Java . . . . . . . 109
6.2 I mattoni di ba e dei programmi Java . . . . 111
6.2.1 I me aggi di errore del compilatore . 111
6.2.2 I tipi di dato primitivi . . . . . . 112
6.2.3 I letterali e le equenze d.i e cape 113
6.2.4 Gli operatori fra valori interi . 114
6.2.5 L'operatore di modulo''%" . 114
6.2.6 U tipo di dato boolean ... 115
6.2.7 Promozioni e ca t . . . . . . 120
6.2.8 Le convenzioni per gli identificatori e i commenti 122
6.3 Tecniche, problemi e trucchi ricorrenti . . . . . . . . . . 122
apitolo 7
oluzioni del capitolo 2 133
7.1 Le trutture di controllo di base . . ... . 133
7.1.1 La equenza di i truzioni .... . 133
7.1.2 L'istruzione di selezione i f / else 136
7.1.3 Gliif/elseannidati . .. .. . . 138
7. l.4 L'i truzione while . ... . .. . 139
7. l.5 Lo viluppo incrementale dei programmi 140
7 .1.6 I cicli annidati . . . . . . . 145
7.2 Le trutture di controllo avanzate . 147
7.2.1 L'i truzione switch/case 147
7.2.2 L'i truzione do/while 148
7.2.3 L'i truzione for ... .. . 149
7.2.4 I for annidati .. . ... . 151
7.2.5 Le i truzioni break e continue 152
7.2.6 Approfondimenti: for, cicli annidati,++ e -- 153
7.3 Gli array . .. . . ... .. .. . 157
7.3.1 Array unidimensionali ...... . . . 157
7.3.2 Array multidimen ionali . . .. ... . 159
7.3.3 E ercizi di approfondimento sugli array 161
viii Indice
Capitolo 8
Soluzioni del capitolo 3 165
8.1 I metodi . ....... .......... . 165
8 .1.1 Introduzione ai metodi . . . . . . . . 165
8.1.2 Parametri per valore e per riferimento 169
8.1.3 La vi ibilità delle variabili 170
8.1.4 ap r u are le funzioni . . . . . . 170
8.1.5 Metodi e array . . . . . . . . . . 171
8.1.6 Imparare a progettare un metodo 175
8.2 La ricor ione . . . . . . . . . . . . . . . 180
8.3 I tipi di dato a tratti . . . . . . . . . . . 192
8.3.1 U are e modificare un emplice TDA 192
8.3.2 Metodi in ver ione procedurale e funzionale . 198
8.3.3 l CO truttori . . . . . . . . . . . . 200
8.3.4 D finire nuovi TD 201
8.3.5 L'occultamento delle informazioni 207
apitolo 9
Soluzioni del capitolo 4 21 I
9.1 Dai tipi di dato a tratti agli ogg tti . . . . . . . 211
9.1.1 Definir u are oggetti . . . . . . . . 211
9.1.2 L'u o di this d Ila notazione puntata 220
9.2 Er dit e polimorfi mo . . . . . . . . . 229
9.2.1 L'ereditarietà e la ovra crittura . . . 229
9.2.2 L'u o di super . . . . . . . . . . . 231
9.2.3 Il polimorfi mo, il late-binding, le eia i a tratte e le int rfacce 234
9.2.4 D finire gerarchie . . . . . . . . . . . . . . . . . . . . . . 241
Capitolo IO
Soluzioni del capitolo 5 247
IO.I Le API di Ja a ... .. . 247
I O. I. I Le eccezioni . . . 247
10.1.2 Lacla e Object 250
I 0.1.3 Package e documentazion d Il API Java . 252
I 0.2 Le interfacce grafiche . . . . . . 253
I 0.2.1 Le prime interfacce grafiche . . . . . . . . 253
I 0.2.2 I ge tori del layout e gli eventi . . . . . . . 257
10.2.3 Gli applet e come di gnare ui compon nti 262
Una conclu ione? 267
Prefazione
Quel ol che pria d'amor mi cald il petto
Di bella verità m'avea co erto
Provando e riprovando, il dolce a petto.
Paradiso, canto terza, 1-3.
el uo viaggio attraver o il Paradi o, Dante gujdato da Beatrice (il ole che per
primo cald d'amore il uo cuore), che provando e riprovando (cioè argomentando
e di -provando, ovvero controargomentando) gli rivela la natura della verità.
li "provando e riprovando" dj Beatrice, reinterpretato come le" en ate e perien
ze" iterate e reiterate dj Galileo, è una deUe e pre ioru più acre e care delJa cienza
w
m derna. Tre ecoli dopo Dante, aranno degli allievi ideali Galileo a ceg)jerlo
com motto delJa prima accademja cientifica moderna, queU' Accademia del Cimen
t eh i po e come obiettivo di verificare con metodo rigoro amente p rimentale
(pr vando e riprovando) i principi delJa filo ofia naturale.
La cienza moderna na ce dall'o ervazione ripetuta, dall'e ercizio, dalla verifi
ca, dall'errore e dalla ua correzione. La compren ione cientifica (anzi, la cienza
te a) caturi ce empre da un problema a cui non a dare ri po ta. Per tro are olu
zi n i inventano tecniche, teorie, congetture. Molte dj e e non uperano il vaglio
dell 'e perimento, e dal l'errore comme o e rile ato na cono a.I tre tecruch , altre t o
rie, altr congetture, fino a quando la oluzione al problema appare chiara, limpida,
·pe o empi ice ed elegante. La ricerca della oluzione ad un problema ha finalmente
part rito una teoria generale, che piega eia i di problemi imili e forni ce tecniche
generali, belle e potenti.
Lo tudio delle di cipline cientifiche troppo pe o solo tudio di que te teo
rie genera.li. Impariamo l'anaJi i matematica a partire da.Ila definizione di funzione
continua e di limite, la meccanica a partire da.Ile leggi fondamenta.li che legano forza,
ma a e moto, l'informatica a partire dal.la definjzione dj un linguaggio w program
mazione. Ma co l facendo perdiamo il sen o te o della pratica di cienza, che
w w
inte uta dj problemi, di prove, dj riprove e -prove. È evidente che non a
rebb n ato ripercorrere ogru volta la trada dei no tri predece ori, ripetere i loro
tentativi falliti, ri coprire le loro tecruche. Ma I' a etticità delJe teorie generali non
w
deve impedire di porcarci le maru, provare quegli trumenti ui problemi che ci
appa ionano, dj inventare nuove appljcazionj della teoria. La cienza entra in noi,
anche oggi, olo attraver o I' e ercizio, il confronto con quelli che hanno tentato lo
1
I primi passi
Contenuto
I.I I nostri primi programmi in lava
1.2 I ma/Ioni di base dei programmi lava
1.3 Tecniche, problemi e trucchi ricorrenti
1.4 Una classe utile: Leggi. j ava
Questo è un libro da non leggere. Assolutamente.
Da un libro che non abbiamo letto ...
1.1 I nostri primi programmi in Java
Dove si impara a editare (scrivere), compilare ed eseguire un semplice programma in
Java. Per ora vediamo solo i rudimenti; l'obiettivo è familiarizzare con l'ambiente che
useremo per tutto il resto del libro e con i meccanismi del ciclo editing-compilazione
esecuzione.
Per risolvere gli e ercizi in questo paragrafo dovete saper usare un calcolatore,
con un sistema operativo qualsiasi (Linux, Windows, MacOS, ... ). A dire il vero,
questo paragrafo contiene esercizi estremamente semplici; approfittatene anche per
prendere confidenza con il sistema operativo e gli applicativi usati (editor, shell dei
comandi, esplorazione del file system, ecc.).
Prima di cominciare, create una cartella in cui mettere tutti i vo tri primi pro
grammi. Ad esempio, potreste creare e se rei tazione1, ma scegliete il nome, e
l'organizzazione dei programmi scritti per risolvere gli esercizi, che più vi aggradano.
Abituatevi a farlo sistematicamente.
Esercizio 1.1 Più che un esercizio, questa è un'attività che eseguiamo insieme, pas
so dopo passo. Avviate, sul vostro caJcolatore, un editor di testi e create il file
"CiaoATutti. j ava", nella cartella eserci tazione1. In questo file copiate il
programma "CiaoATutti" seguente:
/* Il nostro primo programma Java */
class CiaoATutti {
public static void main (String[] args) {
4 I primi pa si
System.out.println("Ciao a tuttill I' );
}
È importante che lo in eriate da ta tiera, non con un copia e incolla da qualche 1-
to Web! In que to modo, infatti, cominciate a imparare a crivere i programmi
con la ma ima attenzione e con preci ione: una differenza di un unico caratte
re, anche un egno di punteggiatura, o una maiu cola al po to di una rninu cola,
può rendere il programma corretto e non e eguibile. Ricordatevi di alvare il file
"CiaoATutti. j ava".
Pa ate ora alla hell dei comandi p r compilare ed e eguire il programma.
un'operazione in due pas i. Il primo pa o la compilazione con il comand
"j avac":
l>javac CiaoATutti.java
Se ci ono me aggi di errore, cercate di comprenderli, e ricontrollate attentarnent di
aver copiato il programma in modo e atto. Quando capite co a non va, modificat il
file "CiaoATutti. j ava", ricordatevi di alvarlo (!) e ricompilate.
Quando non ci ono errori di compilazione potete pa are al econdo pa ed
e eguire il programma, con il comando "j ava":
l>java CiaoATutti
Se il programma vi ualizza "Ciao a tutti 111 ", congratulazioni, avete critto il
vo tro primo programma in Java.
Se siete curio i, con il comando Unix/Linux "ls" (o l'analogo "dir" del DOS,
o e plorando il file y tem con uno trumento grafico) avrete notato che c' un nuo
vo file, "CiaoATutti. class": è il prodotto del compilatore; non vi ualizzatelo,
formato da caratteri non tarnpabili !
Esercizio 1.2 [s] Modificate il programma "CiaoATutti" in modo che vi ualizzi
"Ciao agli altri! 11 ". Per verificare che la modifica è corretta, al vate, ricom
pilate e rieseguite. .B.: (l) alvate; (2) ricompilate; (3) rie eguite. È nec ario fare
que ti 3 pa i in que to ordine.
Esercizio 1.3 Con iderate il codice di "CiaoATutti": vi ono in tutto 19 parole.
• Quali ono quelle che potete modificare (aggiungendo o togliendo una lettera
qual ia i) enza che il compilatore vi dia errore?
• Quali ono quelle che potete modificare enza errori in compilazione, ma con
un errore in e ecuzione?
• Quali ono quelle che potete modificare enza errori in compilazione e enza er
rori in e ecuzione? Quali tra queste non modificano il risultato (viene tampato
empre "Ciao agli altri")?