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.