Introduzione
AL LETTORE
Alla fine del 1995, il linguaggio di programmazione Java ha
fatto irruzione sulla scena di Internet e si è conquistato una
celebrità immediata. La tecnologia Java prometteva di diventare il collante universale tra gli utenti e le informazioni provenienti da Web server, database, fornitori di informazioni e da qualsiasi altra fonte immaginabile. Java è di
fatto in una posizione unica per mantenere questa promessa. È un linguaggio dalla struttura estremamente solida, che ha ottenuto l’accettazione di tutte le principali case costruttrici, a eccezione di Microsoft. Le sue funzioni incorporate di sicurezza e protezione risultano gradite tanto
ai programmatori quanto agli utenti delle applicazioni Java. Possiede altresì un supporto incorporato che facilita le
operazioni di programmazione avanzata, quali la programmazione in rete, la connessione ai database e il multithreading. Fin dal 1995 Sun Microsystems ha distribuito cinque revisioni principali del Java Software Development Kit.
Negli ultimi sette anni, l’Application Program Interface
(API) è cresciuta da circa 200 a oltre 3.000 classi. Ora l’API copre aree molto diverse, tra cui realizzazione dell’interfaccia utente, gestione di database, internazionalizzazione, sicurezza ed elaborazione XML.
Questo libro rappresenta la sesta edizione di Core Java.
Con la pubblicazione di ogni edizione il libro ha seguito, il
più velocemente possibile, gli aggiornamenti del Java Softwa-
X • INTRODUZIONE
re Development Kit, e ogni volta il libro è stato riscritto in
modo da sfruttare le ultime funzionalità di Java.
Come le versioni precedenti, il libro è destinato ai programmatori seri che desiderano lavorare con Java su progetti
reali. Il lettore è considerato un programmatore con una solida preparazione in un linguaggio di programmazione. Non
occorre tuttavia conoscere C++ o la programmazione a oggetti. La risposta alle edizioni precedenti del libro dà agli autori la certezza che i programmatori esperti nell’uso di Visual
Basic, C o COBOL non avranno difficoltà (non è necessario
neanche avere esperienza nella costruzione di interfacce grafiche utente in Windows, Unix o Macintosh).
Il presupposto di partenza è che il lettore desideri:
■
Scrivere codice reale per risolvere problemi reali
e che
Non gradisca i libri pieni di esempi fittizi (come elettrodomestici da cucina o alberi da frutto).
■
In questo libro si troverà molto codice di esempio che mostra quasi tutte le funzionalità del linguaggio e delle librerie
descritte. I programmi di esempio sono intenzionalmente
semplici per aiutare a concentrare l’attenzione sui punti
principali, ma per lo più non sono finti e non presentano
scorciatoie.
Possono fungere da valido punto di partenza per creare
codice personalizzato.
Si presuppone che il lettore sia disposto e anzi desideroso di apprendere tutte le funzioni avanzate che Java mette a
disposizione. Per esempio, verranno trattati in modo dettagliato i seguenti argomenti:
La programmazione a oggetti.
La riflessione e i proxie.
■ Le interfacce e le classi interne.
■ Il modello di rilevazione degli eventi di Java.
■ La progettazione di interfacce grafiche utente con il toolkit
Swing per le GUI.
■ La gestione delle eccezioni.
■ I flussi di input/output la serializzazione degli oggetti.
■
■
INTRODUZIONE • XI
Non verrà dedicato molto tempo ai programmi Java la cui
unica funzione è vivacizzare le pagine Web: questo tipo di
materiale è già reperibile da varie fonti.
Infine, questo volume esamina i concetti fondamentali del
linguaggio di Java e le basi della programmazione dell’interfaccia utente.
Nella stesura di un libro sono inevitabili sviste e imprecisioni: gli autori sarebbero lieti di venirne a conoscenza, ma
naturalmente gradirebbero che ciascuna di esse fosse segnalata una sola volta. Un elenco di domande frequenti, di bachi accertati e corretti è disponibile in una pagina Web all’indirizzo http://www.horstmann.com/corejava.html. Strategicamente collocato alla fine delle FAQ (per indurre i visitatori del sito a leggere tutto prima di scrivere) è disponibile
un modulo utilizzabile per segnalare bachi e suggerire miglioramenti. Non si rimanga delusi se gli autori non rispondono a tutte le domande: leggono comunque tutte le e-mail
e apprezzano lo sforzo fatto dal lettore per rendere le edizioni future di questo libro più chiare e informative.
Gli autori si augurano che il libro risulti gradevole e utile
per la programmazione in Java.
IL LIBRO
Il Capitolo 1 fornisce un quadro generale delle funzioni che
distinguono Java dagli altri linguaggi di programmazione.
Verrà spiegato qual era l’intento originario dei creatori del
linguaggio e la misura in cui la meta prefissa è stata raggiunta. Verrà quindi tracciata una breve storia di come è nato e si è evoluto Java.
Nel Capitolo 2 verrà spiegato come scaricare e installare Java SDK da http://java.sun.com/j2se. Quindi il lettore verrà guidato nella compilazione e nell’esecuzione di tre tipici programmi Java (una console, un’applicazione grafica e un’applet).
Nel Capitolo 3 avrà inizio la descrizione del linguaggio Java. Questo capitolo tratterà i concetti essenziali: le variabili,
i cicli e le funzioni semplici. I programmatori in C o C++ saranno facilitati, perché la sintassi di questi elementi del linguaggio è essenzialmente uguale a quella di C. Chi proviene
XII • INTRODUZIONE
da un ambiente diverso da C, quale Visual Basic o COBOL,
dovrà invece leggere questo capitolo con estrema attenzione.
La programmazione a oggetti (OOP, Object Oriented Programming) è attualmente la tendenza dominante della programmazione, e Java è completamente a oggetti. Il Capitolo
4 presenta l’incapsulamento, ovvero il primo dei due elementi
fondamentali della programmazione a oggetti, e il meccanismo del linguaggio Java per attuarlo, ovvero le classi e i metodi. In aggiunta alle regole del linguaggio Java, verranno
forniti anche alcuni consigli utili per una buona impostazione della programmazione a oggetti. Infine, verrà esaminato il meraviglioso strumento javadoc che formatta i commenti del codice in una serie di pagine Web con collegamenti
ipertestuali.
Chi conosce C++ potrà dare una rapida scorsa a questo capitolo, mentre i programmatori provenienti da un ambiente
non a oggetti dovrebbero dedicare un po’ di tempo all’approfondimento dei concetti inerenti alla OOP prima di procedere con Java.
Le classi e l’incapsulamento sono solo una parte della programmazione a oggetti: il Capitolo 5 presenta il seguito della storia, ovvero l’ereditarietà, che consente di prendere una
classe esistente e modificarla secondo le necessità. Questa è
una tecnica fondamentale per la programmazione in Java. Il
meccanismo di ereditarietà in Java è piuttosto simile a quello di C++. Anche in questo caso, i programmatori abituati a
questo ambiente possono concentrare l’attenzione sulle differenze tra i linguaggi.
Il Capitolo 6 spiega come avvalersi di un’interfaccia in Java.
Le interfacce consentono di oltrepassare il semplice modello
di ereditarietà descritto nel Capitolo 5. La padronanza delle
interfacce è la chiave per accedere appieno alla programmazione completamente a oggetti di Java. In questo capitolo verrà
altresì spiegata un’utile funzione di Java, le cosiddette classi
interne, che contribuiscono a un codice più pulito e snello.
Nel Capitolo 7 si entrerà nel merito della programmazione di applicazioni. Verrà indicato come creare finestre, disegnare al loro interno, tracciare forme geometriche, formattare il testo con vari font e visualizzare immagini.
Il Capitolo 8 è una trattazione dettagliata del modello di eventi del toolkit per finestre astratte (AWT, Abstract Windows
INTRODUZIONE • XIII
Toolkit). Verrà descritto il modello di eventi aggiunto in Java 1.1, non l’obsoleto e semplicistico modello di eventi della
versione 1.0. Si vedrà come scrivere il codice che risponde a
eventi quali i clic del mouse o le pressioni dei tasti. Nel corso della spiegazione verrà indicato come gestire gli elementi
di base delle GUI, come pulsanti e pannelli.
Il Capitolo 9 descrive più dettagliatamente il toolkit Swing
per le GUI, che consente di utilizzare Java per costruire un’interfaccia grafica utente trasferibile su varie piattaforme. Verrà
spiegato tutto ciò che riguarda i vari tipi di pulsanti, i componenti testuali, i bordi, le barre di scorrimento, le caselle di
riepilogo, i menu e le finestre di dialogo.
Al termine del Capitolo 9 il lettore avrà la padronanza di
tutti i meccanismi necessari per scrivere applet, ovvero i mini-programmi che possono essere incorporati all’interno di
una pagina Web: le applet saranno pertanto l’argomento del
Capitolo 10. Verranno presentate numerose applet utili e divertenti, ma, ancora più importante, verranno presentate le
applet come metodo di impiego dei programmi. Verrà quindi
descritto come inserire le applicazioni in file JAR e come distribuire applicazioni attraverso Internet con il meccanismo
Java Web Start. Infine si spiegherà come i programmi Java
possano memorizzare e recuperare informazioni sulla configurazione una volta che sono stati installati.
Il Capitolo 11 è dedicato alla gestione delle eccezioni, il solido meccanismo di Java che affronta gli inconvenienti che
possono sorgere anche nei buoni programmi. Per esempio,
una connessione di rete può interrompersi nel bel mezzo del
trasferimento di un file, oppure un disco può riempirsi e così via. Le eccezioni costituiscono un modo efficace per separare il codice di elaborazione normale dalla gestione degli errori. Naturalmente, anche dopo essere stato consolidato mediante la gestione di tutte le condizioni eccezionali, il programma può ostinarsi a non funzionare come previsto. Nella seconda metà del capitolo verranno forniti numerosi consigli per il debug. Infine, verrà eseguita una sessione di debug
di esempio con vari strumenti: il debugger JDB, il debugger
di un ambiente di sviluppo integrato, un profiler, uno strumento di verifica della copertura del codice e il robot AWT.
Il libro termina con la gestione dell’input e dell’output. In
Java, tutto l’I/O è gestito tramite i cosiddetti stream (flussi),
XIV • INTRODUZIONE
che consentono di trattare in modo uniforme la comunicazione con qualsiasi fonte di dati, per esempio file, connessioni di rete o memoria. Sono descritte in modo dettagliato
le classi reader e writer, che facilitano la gestione di Unicode; viene altresì indicato cosa accade “dietro alle quinte”
quando si adotta il meccanismo di serializzazione degli oggetti, che consente di salvare e caricare oggetti in modo facile e pratico. Infine vengono descritte numerose librerie che
sono state aggiunte a SDK 2.4: le classi di “nuovo I/O” che
contengono supporto per operazioni sui file avanzate e più
efficienti e la libreria di espressioni regolari.
Un’appendice elenca le parole chiave di Java.
CONVENZIONI
In tutto il libro i listati sono caratterizzati da un font monospaziato, come questo.
NOTA Sono presenti molte Note C++ che spiegano la differenza tra Java e C++. Se non si ha esperienza in C++ o
se quell’esperienza non è stata delle migliori, tali note possono essere saltate.
Note e suggerimenti sono contrassegnati con le icone “Nota” e “Suggerimento” illustrate accanto.
Quando incombe un pericolo, la nota “Attenzione” mette
in guardia il lettore.
API
Java è dotato di una grande libreria di programmazione o interfaccia per la programmazione di applicazioni (API, Application Programming Interface). Al primo utilizzo di una chiamata di API, al termine della sezione sarà riportata una breve descrizione riassuntiva contrassegnata con l’icona API. Tale descrizione è un po’ più informale, ma si spera anche un
po’ più informativa, di quella della documentazione API online ufficiale. Ogni nota API è stata contrassegnata con il numero di versione in cui è stata introdotta la funzione, per aiutare i lettori che non utilizzano l’ultima versione di Java.
INTRODUZIONE • XV
I programmi il cui codice sorgente si trova sul Web sono
elencati come esempi numerati:
Esempio 2.4 WelcomeApplet.java
CODICE DI ESEMPIO
Il codice sorgente di tutti gli esempi del libro è disponibile gratuitamente sul Web all’indirizzo www.informatica.mcgraw-hill.it, nella sezione Minisito. È possibile espandere il file con uno dei
noti programmi di decompressione o semplicemente con l’utility jar che fa parte del Java Software Development Kit. Per
ulteriori informazioni sull’installazione del Software Development Kit e del codice di esempio consultare il Capitolo 2.