i i i i I Prefazione Prefazione alla prima edizione Il volume che il lettore ha in mano è un libro di introduzione alla Programmazione con l’uso del linguaggio Java. Si tratta di un testo destinato allo studio e non di una semplice raccolta di esempi di programmi. Proprio da questa sua natura emerge il principale pregio del libro: l’ambizione cioè di descrivere completamente e rigorosamente il linguaggio Java e il suo uso nella programmazione di tipo algoritmico e applicativo, fino alla soglia dello sviluppo di sistemi di grandi dimensioni. La scelta di Java non necessita di particolari commenti, essendo ormai uno dei linguaggi di più ampia diffusione tanto in ambito accademico che nella pratica industriale. Da un punto di vista didattico, Java consente di presentare – direttamente all’interno del linguaggio – alcuni concetti fondamentali della programmazione moderna, quali l’approccio orientato agli oggetti, la gestione strutturata delle eccezioni, l’analisi statica e i forti controlli sui tipi, la programmazione concorrente, la verifica di correttezza. Il libro, che trae origine anche da una lunga esperienza “sul campo” degli autori, presenta questi aspetti con il necessario rigore, senza penalizzare l’esposizione di quelli che sono i fondamenti della programmazione. Nella prima parte del testo, infatti, è dedicato ampio spazio ai concetti di grammatica, variabile, tipo, dichiarazione, espressione, comando e flusso di controllo. L’approccio che gli autori propongono al lettore prevede, da un lato, una trattazione di tipo solidamente scientifico: lo studente non troverà in questo testo divagazioni eccessive con vignette o storielle (benché non manchi l’occasionale concessione allo humor), ma regole e formule, sempre bene illustrate. Dall’altro, il lettore più attento può contare di ottenere una conoscenza pratica pressoché completa degli argomenti trattati: non solo saprà quello che funziona e come, ma anche cosa non funziona e perché. Idealmente, a ogni dubbio riguardante la programmazione lo studente sarà in grado di rispondere “si” o “no” consultando il testo, lasciando poco spazio al “forse, non ho mai provato. . . ”. Il rigore scientifico non va a scapito della pragmatica: le utilissime sezioni su Cosa può andare male, che accompagnano tutti i capitoli trattando gli errori più comuni osservati nella pratica didattica su migliaia di allievi, e i circa 180 esercizi e mini-progetti proposti favoriscono il consolidamento delle conoscenze acquisite, e incoraggiano ad applicarle immediatamente. Con questo testo, gli autori forniscono un significativo contributo allo studio della programmazione, innovando nel solco di una consolidata tradizione di didattica di qualità. Francesco Romani Franco Turini Pisa, Gennaio 2009 i i i i i i i i xiv Prefazione Nota degli autori Il testo è organizzato in tre parti: dopo un’introduzione e alcune avvertenze pratiche, i capitoli dal 3 al 6 trattano i concetti di variabili, tipi, espressioni e comandi, e costituiscono quindi la parte basilare della presentazione del linguaggio. Vengono illustrati in questa prima parte tutti gli elementi necessari per la programmazione di semplici algoritmi non ricorsivi (gli algoritmi ricorsivi sono poi trattati, insieme ai metodi, nel Capitolo 8). In questi capitoli, gli oggetti sono descritti come dati strutturati, su cui sono disponibili speciali operazioni. I concetti di classe e oggetto sono poi approfonditi nei capitoli dal 7 all’11, in cui si discute del loro ruolo tanto nell’analisi dei problemi, quanto nella progettazione di sistemi complessi. Questa seconda parte fornisce tutti gli strumenti linguistici per lo sviluppo di classi e per la progettazione di librerie di classi (in particolare, ereditarietà e interfacce). Infine, la terza parte (Capitoli 12–15) descrive le ulteriori caratteristiche del linguaggio: eccezioni, concorrenza, libreria di I/O, accesso alla rete. Nel suo complesso, il libro descrive completamente il linguaggio Java (di cui l’Appendice A fornisce l’intera grammatica, raccolta dai capitoli precedenti), ma solo alcune delle moltissime classi della libreria del linguaggio. Per questo, il lettore è fortemente consigliato a consultare la documentazione relativa alla libreria (i Javadoc), che in genere è fornita con gli ambienti di sviluppo. Allo studente raccomandiamo inoltre di dedicare un po’ di tempo agli esercizi e mini-progetti proposti alla fine di ogni capitolo, molti dei quali non sono destinati tanto alla scrittura di codice, quanto al consolidamento delle nozioni apprese (e, se necessario, forniscono un utile strumento di auto-valutazione). Nell’uso come libro di testo, sarà opportuno associare allo studio teorico anche delle esercitazioni condotte in laboratorio, onde garantire che al sapere si aggiunga un saper fare che è parte integrante della pratica della programmazione. Note alla seconda edizione Questa seconda edizione del testo incorpora tutti gli aggiornamenti relativi alla versione 7 del linguaggio Java, nonché numerosi miglioramenti al testo, ulteriori esempi, trattazioni più precise e approfondimenti di alcuni argomenti di maggiore sofisticazione, e qualche semplificazione della trattazione sugli argomenti di applicazione più frequente. Il risultato è un testo che, dopo i positivi riscontri della prima edizione, si propone di ampliare la platea dei lettori, offrendo un buon servizio sia a chi cerchi nel testo una presentazione rapida dei concetti più comuni, sia a chi necessiti invece dei dettagli più fini di qualche caratteristica poco nota del linguaggio. La direzione intrapresa è tanto più rilevante, quanto maggiore è la complessità delle nuove caratteristiche del linguaggio introdotte in Java 7. Queste nuove caratteristiche non sono introdotte “a parte”, con una sovrapposizione di strati su strati che avrebbe poco senso (se non solo in un’ottica storica), ma integrate direttamente e naturalmente nella trattazione principale. Al lettore non viene presentato Java versione 6 con le estensioni di Java 7, ma il linguaggio Java 7 nella sua completezza. La seconda edizione è inoltre arricchita da una presentazione, pur elementare, dei principali concetti utili per la programmazione di rete. Benché il testo non possa certo sostituire un manuale specializzato sulle reti, diventa tuttavia possibile al programmatore Java scrivere programmi che comunicano su rete, sfruttando diversi protocolli, e incorporare nelle proprie applicazioni l’utilizzo di servizi remoti o il prelievo di pagine web. Seguiremo le orme di autori di maggior fama, nel ringraziare i lettori della prima edizione per la simpatia che ci hanno espresso, e i numerosi suggerimenti. È nostra speranza che questa edizione rinnovata e aggiornata venga accolta, com’è nostra intenzione, come un modo per esprimere loro la nostra sincera gratitudine. i i i i i i i i xv Sito web dedicato al libro Il supporto on-line di questo testo è reperibile all’indirizzo http://www.apogeonline.com/libri/9788850330690/scheda dove è possibile scaricare il codice sorgente degli esempi presentati nel testo, e in particolare il sorgente della classe jbook.util.Input utilizzata per l’input da tastiera. A Daniela irrinunciabile compagna di vita; a Anita e Laura piccole aiutanti volenterose. — Roberto Bruni A Martha, Franca e Claudio, semplicemente... grazie! Per esistere, per avermi scelto, e per la pazienza mostrata in questi mesi. — Andrea Corradini A’ miei maggiori: a quei colleghi che, tanti anni fa, hanno saputo trasmettere a me giovane studente la passione che ora cerco di trasmettere ad altri. — Vincenzo Gervasi i i i i