Prefazione Benvenuti nel mondo di Java! Alla Deitel & Associates, scriviamo libri di testo per corsi di programmazione di livello universitario e lavoriamo molto per mantenere i nostri libri aggiornati. Questo libro, Java. Fondamenti di programmazione e il suo complemento, Java. Tecniche avanzate di programmazione, possiedono tutto quanto è richiesto da professori e studenti per un’esperienza di apprendimento del linguaggio Java che sia informativa, interessante, stimolante e divertente. Questo libro è aggiornato all’ultima versione di Java, ovvero Java 2 Platform, Standard Edition (J2SE), versione 1.4.1, e all’ultima versione del linguaggio UML (Unified Modeling Language) per la progettazione orientata agli oggetti. Rispetto all’edizione precedente, abbiamo aggiornato e messo a punto il testo, la strategia didattica, lo stile del codice e aggiunto, tra l’altro, una trattazione sostanziosa della metodologia di sviluppo orientata agli oggetti con il linguaggio UML e una presentazione di parecchi design pattern (ovvero, strategie di progettazione del software) utilizzati dai programmatori esperti. Più avanti nella prefazione, troverete una panoramica del libro, che aiuta i docenti, gli studenti e i professionisti a rendersi conto di quanto il testo copra il linguaggio Java e la progettazione orientata agli oggetti con il linguaggio UML. Che siate un docente, uno studente, un programmatore professionista o principiante, questo libro ha molto da offrirvi. Java è un linguaggio di programmazione per sviluppare applicazioni informatiche industriali per dispositivi che vanno dai telefoni cellulari e dai PDA fino ai più grandi server aziendali. Abbiamo controllato attentamente il nostro testo rispetto alla Specifica del linguaggio Java (disponibile sul sito Web java.sun.com/docs/ books/jls/index.html). Quindi, i programmi che creerete studiando questo testo dovrebbero funzionare con ogni piattaforma Java compatibile con J2SE 1.4.1. Incluso nel testo, troverete un CD che contiene il J2SE 1.4.1 Software Development Kit (J2SDK) di Sun Microsystems e l’ambiente integrato di sviluppo Sun ONE Studio 4 (Community Edition). Se avete bisogno di informazioni per iniziare a utilizzare questi prodotti, consultate per prima cosa la documentazione fornita nel CD-ROM, ed eventualmente il sito Web degli autori www.deitel.com/. Oltre ai commenti che ci sono giunti dalle revisioni dell’edizione precedente, abbiamo integrato nel testo finale i commenti di 44 noti professionisti del mondo accademico e dell’industria, che vengono elencati nei ringraziamenti al termine. Concluderemo questa prefazione con informazioni sugli autori e sulla Deitel & Associates, Inc. Il nostro approccio didattico Questo libro contiene un’ampia varietà di esempi, esercizi e progetti che prendono spunto da molte situazioni, e che offrono agli studenti la possibilità di risolvere problemi reali. Il libro prende in esame i principi della progettazione del software, insistendo sull’importanza della chiarezza dei programmi ed evitando l’uso di terminologia complessa a favore di esempi chiari e diretti, il cui codice è stato testato sulle piattaforme Java più diffuse. X PREFAZIONE Imparare Java usando l’approccio LIVE-CODE™ Il libro presenta una grande quantità di esempi di codice Java. Ogni nuovo argomento viene presentato nell’ambito di un programma Java completo e funzionante, seguito sempre da una o più finestre che mostrano l’input/output del programma in questione. Viene quindi usato il linguaggio di programmazione per insegnare il linguaggio di programmazione, e la lettura di questi programmi offre un’esperienza molto simile alla loro scrittura ed esecuzione reale su di un computer. Il codice sorgente di tutti i programmi si trova sia sul CD che accompagna il libro, che sul sito www.apogeonline.com/libri/02096/allegati/. Programmazione in Java con applicazioni e Swing dal capitolo due! A partire dal capitolo due, ci immergiamo da subito nella programmazione di applicazioni con i componenti GUI Swing. In questo modo, gli studenti possono iniziare presto a vedere dei risultati concreti, eseguendo programmi di ogni tipo attraverso le librerie per la grafica, l’animazione, il multimedia, l’audio, le basi di dati, e l’accesso alla rete. Gli studenti possono così implementare da subito dei progetti, e sono di solito più creativi e produttivi degli studenti che seguono analoghi corsi di C e C++. Accesso al World Wide Web Tutto il codice presente nel libro si trova anche in Internet, all’indirizzo www.apogeonline.com/ Il nostro consiglio è quello di scaricare tutto il codice, eseguendo poi ogni singolo programma via via che appare nel testo. Potete anche modificare il codice degli esempi e vedere cosa succede, e imparare così il linguaggio programmando. libri/02096/allegati/. Obiettivi Ogni capitolo inizia con la presentazione degli Obiettivi. Gli studenti possono così sapere in anticipo ciò che andranno ad apprendere e, alla fine della lettura del capitolo, potranno verificare se hanno raggiunto o meno questi obiettivi. Migliaia di righe di codice in oltre cento programmi di esempio Le funzionalità di Java vengono presentate nell’ambito di programmi Java completi e funzionanti. Ogni programma è seguito dalle immagini degli output che vengono prodotti, così che gli studenti possano assicurarsi della correttezza dei risultati. I programmi presentati vanno da poche linee di codice a esempi composti da varie centinaia di righe di codice. Centinaia di illustrazioni e figure Il libro offre un’ampia varietà di grafici, immagini e output di programmi. Abbiamo convertito tutti i diagrammi di flusso in diagrammi di attività UML. Usiamo anche diagrammi di classe UML per modellare le relazioni tra classi che incontriamo nel testo. Centinaia di suggerimenti per il programmatore Il libro offre molti suggerimenti riguardanti la programmazione per aiutare gli studenti a concentrarsi sugli aspetti più importanti dello sviluppo di programmi. Questi consigli vengono forniti attraverso le sezioni chiamate Buona abitudine, Errore tipico, Collaudo e messa a punto, Look-and-Feel, Obiettivo efficienza, Obiettivo portabilità e Ingegneria del software. PREFAZIONE XI Buona abitudine All’interno delle sezioni Buona abitudine vengono presentate delle tecniche per la scrittura di programmi chiari, comprensibili e più facilmente documentabili. Errore tipico Tutti gli studenti che affrontano per la prima volta un nuovo linguaggio tendono a commettere frequentemente gli stessi errori. Le sezioni Errore tipico aiutano gli studenti a evitare di commettere questi comuni errori. Collaudo e messa a punto Queste sezioni forniscono consigli circa le attività di test e correzione degli errori dei programmi Java, anche a livello preventivo. Look-and-Feel Queste sezioni forniscono consigli circa le convenzioni da usare per le interfacce utente grafiche, aiutando lo studente a progettare le proprie interfacce utente grafiche in conformità con le convenzioni usate nell’industria. Obiettivo efficienza In base alla nostra esperienza, insegnare agli studenti come scrivere programmi chiari e comprensibili deve costituire l’obiettivo più importante di qualsiasi corso di programmazione. Gli studenti, però, vogliono normalmente imparare a scrivere programmi che vengano eseguiti in modo veloce, che utilizzino poca memoria, che richiedano una minima quantità di comandi e che offrano prestazioni eccellenti. Le sezioni Obiettivo efficienza offrono suggerimenti su come migliorare le prestazioni dei propri programmi. Obiettivo portabilità Alcuni programmatori pensano che, implementando un’applicazione Java, questa sia immediatamente portabile su tutte le piattaforme Java; sfortunatamente, non è sempre così. Le sezioni Obiettivo portabilità aiutano gli studenti a scrivere codice realmente portabile, fornendo inoltre informazioni su come Java sia in grado di raggiungere questo elevato livello di portabilità. Ingegneria del software La programmazione orientata agli oggetti implica una totale rivisitazione del modo in cui vengono costruiti i sistemi software. Java è un linguaggio molto efficace nell’ambito della progettazione del software, e le sezioni Ingegneria del software prendono in esame gli aspetti architetturali e progettuali che influiscono sulla realizzazione di sistemi software, specialmente nel caso di sistemi su vasta scala. Molte di queste informazioni saranno utili agli studenti nei corsi più avanzati, oltre che nel mondo del lavoro. XII PREFAZIONE Centinaia di esercizi di autovalutazione con risposte Il libro propone molti esercizi corredati di risposte, così che gli studenti possano prepararsi alle esercitazioni vere e proprie. Gli studenti dovrebbero essere incoraggiati a svolgere tutti questi esercizi di autovalutazione. Centinaia di esercizi Ogni capitolo si conclude con un insieme di esercizi di vario tipo, che permettono agli insegnanti di adattare le proprie lezioni alle esigenze particolari di ogni classe. Gli esercizi verificano l’apprendimento dei concetti e dei termini più importanti, chiedono agli studenti di scrivere singole istruzioni Java, porzioni di classi e metodi Java, oppure metodi, classi, applet e applicazioni Java complete. Software incluso con questo libro Ci sono parecchi strumenti per lo sviluppo di programmi Java in vendita. Comunque, non avete bisogno di comprare nulla per iniziare a programmare in Java. Abbiamo scritto questo libro usando solo il Java 2 Standard Edition Software Development Kit (J2SDK) versione 1.4.1, che è incluso nel CD che accompagna questo libro. La versione corrente del J2SDK può essere scaricata dal sito Web di Sun dedicato a Java java.sun.com/j2se. Questo sito vi permette anche di scaricare la documentazione relativa. Con la collaborazione di Sun, abbiamo incluso nel CD anche un potente ambiente di sviluppo integrato, chiamato Sun ONE Studio 4, Community Edition, scritto in Java e comprendente un sistema visuale per la progettazione di interfacce grafiche, un editor di codice, un compilatore, un debugger visuale, e altro ancora. Il J2SDK deve essere installato prima di installare Sun ONE Studio 4, Community Edition. Per ulteriori informazioni riguardo all’utilizzo di questi programmi software, vi consigliamo di leggere la documentazione introduttiva del CD-ROM, oppure di visitare il nostro sito Web www.deitel.com. Il CD contiene inoltre tutti gli esempi del libro (compresa l’implementazione del caso di studio sull’ascensore) e una pagina HTML con i collegamenti ai siti Web di Deitel, Inc. Se avete accesso a Internet, questa pagina Web può essere caricata nel vostro browser per accedere rapidamente a tutti questi siti. Una panoramica del libro In questa sezione, vengono presentati i vari capitoli che compongono questo libro. Capitolo 1: Introduzione ai computer, a Internet e al Web Il capitolo 1 discute che cosa sono i computer, come funzionano e come vengono programmati. Viene fornita una breve storia dello sviluppo dei linguaggi di programmazione dai linguaggi macchina, ai linguaggi assembly e ai linguaggi di alto livello, oltre alle origini del linguaggio Java. Viene inoltre offerta un’introduzione a un tipico ambiente di programmazione Java, alla tecnologia degli oggetti, al linguaggio UML e ai design pattern. PREFAZIONE XIII Capitolo 2: Introduzione alle applicazioni Java Nel capitolo 2, vengono presentate le prime applicazioni Java. Il capitolo introduce i principianti ai concetti e costrutti di base della programmazione. I programmi in questo capitolo illustrano come visualizzare delle informazioni sullo schermo e ricevere informazioni da parte dell’utente attraverso la tastiera, anche attraverso l’uso di interfacce utente grafiche. Il capitolo 2 tratta anche le decisioni e le operazioni aritmetiche. Capitolo 3: Introduzione alle applet Java Nel capitolo 3, vengono presentate le applet, che sono programmi Java progettati per essere trasportati attraverso Internet e eseguiti all’interno di browser Web (come Netscape Navigator e Microsoft Internet Explorer). Il capitolo mostra molte delle applet di esempio fornite con il J2SDK. Poi, propone delle applet Java che riprendono alcuni degli esempi del capitolo 2, per mostrare la differenza tra i due diversi tipi di programmi. Capitolo 4: Le istruzioni di controllo: Parte 1 Nel capitolo 4, viene preso in esame il processo di sviluppo dei programmi. Il capitolo mostra come sia possibile, partendo dalla specifica di un problema, sviluppare un programma Java perfettamente funzionante, compreso lo sviluppo di passi intermedi in pseudocodice. Il capitolo introduce alcuni dei tipi di dati primitivi più importanti e alcune semplici istruzioni di controllo che permettono al programma di prendere delle decisioni (if e if...else) ed eseguire delle ripetizioni (while). Esamineremo la ripetizione controllata da un contatore e la ripetizione controllata da un valore sentinella, e introdurremo gli operatori per l’incremento, il decremento e l’assegnazione. Il capitolo usa dei semplici diagrammi di attività UML per mostrare il flusso del controllo attraverso ognuna delle istruzioni di controllo. Capitolo 5: Le istruzioni di controllo: Parte 2 Il capitolo 5 continua la discussione delle istruzioni di controllo in Java con esempi delle istruzioni for, do...while, switch, break e continue. Il capitolo contiene inoltre una discussione degli operatori logici in Java. Capitolo 6: I metodi Nel capitolo 6, vengono presi in esame più attentamente gli oggetti. Gli oggetti contengono dei dati (normalmente chiamati campi) e delle unità eseguibili chiamate metodi. Parleremo dettagliatamente dei metodi e dei metodi ricorsivi (ovvero i metodi che chiamano sé stessi). Le tecniche presentate nel capitolo 6 sono essenziali per la produzione di programmi strutturati in modo adeguato. Il sovraccaricamento di metodi (cioè, permettere a più metodi di avere lo stesso nome ma “firme” diverse) viene motivato e spiegato chiaramente. Inoltre, vengono introdotti gli eventi e la loro gestione. Capitolo 7: Gli array Il capitolo 7 prende in esame l’elaborazione dei dati all’interno di elenchi e tabelle di valori chiamate array. In Java, gli array sono oggetti. Il capitolo presenta numerosi esempi sia di array monodimensionali, che multidimensionali. Gli esempi del capitolo prendono in considerazione manipolazioni comuni di array, la stampa di istogrammi, il passaggio di array a XIV PREFAZIONE metodi e un’introduzione all’analisi dei dati (con semplici elaborazioni statistiche). Una delle caratteristiche del capitolo è la discussione di tecniche elementari per l’ordinamento e la ricerca, la presentazione della ricerca binaria e dei suoi vantaggi nei confronti della ricerca lineare. Capitolo 8: La programmazione basata su oggetti Il capitolo 8 si concentra sul concetto di classe come implementazione di nuovi tipi di dati astratti. Il capitolo presenta i concetti e la terminologia delle classi e degli oggetti, discutendo l’implementazione delle classi, l’accesso ai membri delle classi, l’occultamento delle informazioni mediante modificatori di accesso, la separazione dell’interfaccia dall’implementazione, l’uso di metodi per l’accesso e l’inizializzazione di oggetti con i costruttori. Inoltre, il capitolo discute la dichiarazione e l’uso di costanti, la composizione, il riferimento this, i membri static di classe, e esempi di tipi di dati astratti popolari come le pile e le code. Infine, viene introdotta la dichiarazione package e viene discusso come creare package riusabili. Capitolo 9: La programmazione orientata agli oggetti: ereditarietà Il capitolo 9 introduce una delle caratteristiche fondamentali dei linguaggi orientati agli oggetti, ovvero l’ereditarietà, che è una forma di riutilizzo del software in cui nuove classi vengono sviluppate rapidamente e facilmente assorbendo le caratteristiche di classi esistenti, e aggiungendo nuove funzionalità appropriate. Il capitolo discute le nozioni di superclasse e sottoclasse, il modificatore di accesso protected, le superclassi dirette e indirette, l’uso dei costruttori nelle superclassi e nelle sottoclassi, e l’ingegneria del software con l’ereditarietà. Capitolo 10: La programmazione orientata agli oggetti: polimorfismo Il capitolo 10 introduce un’altra caratteristica fondamentali dei linguaggi orientati agli oggetti, ovvero il polimorfismo, uno stile di programmazione che viene tipicamente usato per implementare i componenti per le interfacce utente, come la libreria Swing di Java. Questo capitolo distingue tra classi astratte e classi concrete, e introduce le interfacce (ovvero, lo strumento Java per implementare l’ereditarietà multipla). Viene inoltre presentato il concetto di classe interna, e viene mostrata la prima applicazione basata su interfaccia utente grafica, in modo da introdurre la gestione degli eventi. Il capitolo contiene tre casi di studio sul polimorfismo: un sistema per il calcolo delle paghe e una gerarchia di figure geometriche implementata usando una superclasse astratta e un’interfaccia. Capitolo 11: I costruttori della classe String Il capitolo 11 prende in esame l’elaborazione di parole, frasi, caratteri e gruppi di caratteri. Vengono presentate le classi String, StringBuffer, Character e StringTokenizer. Inoltre, presentiamo le librerie di classi Java per le espressioni regolari (introdotte nella versione 1.4.1), che permettono ai programmatori di cercare sequenze di caratteri all’interno di stringhe che corrispondono a delle combinazioni precise. Aspetti più avanzati del linguaggio Java vengono presentati nel volume Tecniche avanzate di programmazione, naturale complemento al testo introduttivo che state leggendo. PREFAZIONE XV Ringraziamenti Uno dei momenti più piacevoli, durante la realizzazione di un libro, è il riconoscimento del lavoro di tutte le persone il cui nome non appare sulla copertina, ma che sono state di importanza fondamentale per la buona riuscita dell’opera. Parecchie persone alla Deitel & Associates, Inc. hanno dedicato molte ore a questo progetto. Vogliamo ringraziare in particolare gli sforzi dei nostri colleghi Tem Nieto, Sean Santry, Su Zhang e Jeff Listfield. • • • • Tem Nieto si è laureato al Massachusetts Institute of Technology. Tem insegna XML, Java, Internet e Web, C, C++ e Visual Basic e lavora con noi alla scrittura di libri di testo, allo sviluppo dei corsi e del materiale multimediale. È coautore di diversi libri di Deitel & Associates, Inc. Sean Santry, si è laureato al Boston College (Informatica e Filosofia) ed è coautore di diversi libri di Deitel & Associates, Inc. Tra l’altro, si è occupato del caso di studio facoltativo con UML. Su Zhang si è laureata in informatica alla McGill University, e si è occupata di modellazione e simulazione, sistemi in tempo reale e tecnologie Java. È coautrice di diversi libri di Deitel & Associates, Inc. Jeff Listfield si è laureato in informatica a Harvard, e ha tenuto lezioni di grafica, reti e teoria della computazione. Conosce i linguaggi C, C++, C#, Java, Perl e Lisp. È coautore di diversi libri di Deitel & Associates, Inc. Siamo stati fortunati a poter lavorare a questo progetto con i professionisti di Prentice Hall, in particolare Petra Recter e il suo dirigente Marcia Horton, Direttore editoriale del gruppo Prentice-Hall’s Engineering and Computer. Tom Manshrek ha svolto un lavoro prezioso come production manager. Jennifer Cappello ha gestito in maniera ottimale il processo di revisione. Dobbiamo anche ringraziare Tamara Newnam ([email protected]) che ha realizzato la grafica delle icone delle osservazioni di programmazione e la copertina della versione inglese. Infine, vogliamo ricordare lo sforzo dei 70 revisori di questa edizione e della precedente: Revisori di Sun Microsystems Dibyendu Baksi (Sun Microsystems) Konstantin Kladko (Sun Microsystems) Doug Kohlert (Sun Microsystems) Peter Jones (Sun Microsystems) Paul Monday (Sun Microsystems) Tomas Pavek (Sun Microsystems) Brandon Taylor (Sun Microsystems) Revisori accademici Rekha Bhowmik (St. Cloud State University) Clint Bickmore (Front Range Community College) Brian Blake (Georgetown University) PREFAZIONE XVI Ayad Boudiab (Georgia Perimiter College) Chadi Boudiab (Georgia Perimiter College) Michael Buckley (State University of New York-Buffalo) James Chegwidden (Tarrant County College) Deborah Coleman (Rochester Institute of Technology) Don Francis Costello (University of Nebraska) Balazs Csizmazia (University of Klagenfurt) Tamara Dinev (Florida Atlantic University) Sarah Fix (The Career Center High School) Bill Freitas (The Lawrenceville School) Thomas Graffte (Strayer University) Balaji Janamanchi (Texas Tech University) Charles Lake (Faulkner State Community College) Brian Larson (Modesto Junior College) Hong Lin (DeVry University) David McKain (Lakota East High School) Andy Novobilski (University of Tennessee-Chattanooga) Richard Ord (University of California, San Diego) Gavin Osborne (Saskatchewan Institute of Applied Sci.& Tech.) Merrill Parker (Chattanooga State Technical Community College) Donna Reese (Mississippi State University) Craig Slinkman (University of Texas, Arlington) Gidget Smith (Arkansas State University) Ron Sones (James Madison University) Mahendran Velauthapillai (Georgetown University) Loran Walker (Lawrence Technological University) Warren Wiltsie (Fairleigh Dickinson University) Altri revisori dell’industria Shishir Abhyanker (Accenture) Sinan Alhir (indipendente) Richard Bonneau (IONA Technologies) Columbus Brown (IBM) Carl Burnham (Southpoint) Brian Cook (Zurich Insurance) Jonathan Earl (indipendente) Ron Felice (Omniware Development) Karl Frank (TogetherSoft Corporation) Kyle Gabhart (indipendente) Johan Galle (E2S) Mark Grand (ClickBlocks, LLC) Ajay Gupta (American Airlines, Inc.) Kevlin Henney (Curbralan, Ltd.) Ethan Henry (Sitraka) Anne Horton (AT&T Laboratories) James Huddleston (indipendente) Terrell Hull (Sun Certified Java Architect, Rational Qualified Practitioner) PREFAZIONE XVII Sachin Korgaonkar (Idealake Technologies, Pvt. Ltd.) Don Kostuch (You Can C Clearly Now) Krishna Kunchithapadam (Oracle Corporation) Paul McLachlan (Compuware Corporation) Davyd Norris (Rational) Bill O’Farrell (IBM) Praveen Sadhu (Infodat Solutions, Inc.) Cameron Skinner (Embarcadero Technologies/OMG) Stephen Tockey (Construx Software/OMG) Kim Topley (Keyboard Edge, Ltd.) Sudhir Upadhyay (BEA Systems, Inc.) John Varghese (UBS Warburg) Bing Xue (Siemens) Hadar Ziv (eBuilt, Inc.) Queste persone hanno revisionato ogni aspetto del testo e fornito innumerevoli suggerimenti per migliorare l’accuratezza e la completezza della presentazione. Abbiamo lavorato duramente per creare questo libro. Java è un potente linguaggio di programmazione che vi aiuterà a scrivere programmi velocemente ed efficacemente. Se volete mandarci dei commenti, critiche, correzioni e suggerimenti, mandateli a: [email protected] Vi risponderemo, e inseriremo le correzioni sul sito Web www.deitel.com Speriamo che vi divertiate a leggere questo libro quanto noi ci siamo divertiti a scriverlo! Dr. Harvey M. Deitel Paul J. Deitel Gli autori Harvey M. Deitel – Chief Excecutive Officer della Deitel & Associates, Inc. – si occupa di informatica da oltre 40 anni e ha maturato una significativa esperienza accademica e aziendale. È uno dei più affermati istruttori di informatica a livello mondiale. Ha conseguito la laurea in scienze presso il Massachusetts Institute of Technology (MIT) e la laurea in filosofia presso l’Università di Boston. Ha partecipato a progetti d’avanguardia dei sistemi operativi con memoria virtuale presso l’IBM e il MIT, sviluppando quelle tecniche che oggi sono ampiamente implementate nei sistemi UNIX, Linux e Windows NT. Ha insegnato per 20 anni nelle università ed è stato rettore della facoltà di informatica del Boston College, prima di fondare la Deitel & Associates, Inc. con Paul J. Deitel. È autore e coautore di numerosi libri e package multimediali e ne sta scrivendo altri. I testi di Harvey M. Deitel sono stati tradotti e pubblicati in giapponese, cinese, russo, italiano, francese, spagnolo, coreano, polacco e portoghese. Ha tenuto vari seminari internazionali per grandi aziende e organizzazioni governative e militari. Paul J. Deitel – Executive Vice President della Deitel & Associates, Inc. – si è laureato presso la Sloan School of Management del MIT dove ha studiato tecnologia dell’informazione. Con la Deitel & Associates ha realizzato dei corsi di addestramento su Java, C, C++, XVIII PREFAZIONE Internet e il World Wide Web per clienti di primaria importanza, quali Compaq, Sun Microsystems, White Sands Missile Range, Rogue Wave Software, Computervision, Stratus, Fidelity, Cambridge Technology Partners, Boeing, Lucent Technologies, Adra Systems, Entergy, CableData Systems, NASA (Kennedy Space Center), National Severe Storm Laboratory, IBM e molte altre organizzazioni. Ha tenuto conferenze sui linguaggi C++ e Java per il Boston Chapter dell’Association for Computing Machinery; ha insegnato Java via satellite grazie a un’iniziativa congiunta fra Deitel & Associates, Prentice Hall e Technology Education Network. Paul e suo padre Harvey M. Deitel sono autori di libri di informatica che hanno riscosso grande successo in tutto il mondo. Deitel & Associates, Inc. Deitel & Associates, Inc. è una società di fama internazionale specializzata nell’addestramento aziendale e nella realizzazione di testi sui linguaggi di programmazione, Internet/World Wide Web, e-business/e-commerce e tecnologie orientate agli oggetti. Deitel & Associates è membro del World Wide Web Consortium (W3C). La società ha realizzato corsi introduttivi e avanzati sui linguaggi Java, C++, Visual Basic .NET, C, C#, Perl, Python e XML, sulla programmazione di Internet e del World Wide Web, sulle applicazioni e-business/e-commerce e sulle tecnologie orientate agli oggetti. I soci della Deitel & Associates, Inc. sono Harvey M. Deitel e Paul J. Deitel. Fra i clienti della società figurano molte delle più importanti aziende mondiali, enti governativi e delle forze armate USA e altre organizzazioni. Grazie alla collaborazione della società editrice Prentice Hall, la Deitel & Associates pubblica testi d’avanguardia sulla programmazione, libri per l’informatica professionale, corsi multimediali interattivi su CD-ROM e corsi di addestramento sul Web. La Deitel & Associates e gli autori possono essere contattati via e-mail al seguente indirizzo: [email protected] Per avere maggiori informazioni sulla Deitel & Associates e per consultare l’elenco aggiornato delle sue pubblicazioni e dei corsi di addestramento aziendale, visitate il sito Web: www.deitel.com