Questa seconda edizione del testo di Cay Horstmann si allinea con la terza edizione del testo originale, che è stato fortemente migliorato e ristrutturato dall’Autore, oltreché aggiornato alla versione più recente di Java 2.
La prima parte di questa nuova edizione, che contiene i primi sette capitoli, ha come argomento i fondamenti della programmazione orientata agli oggetti. Rispetto alla prima edizione, si può notare come i primi tre capitoli siano stati riorganizzati in modo da dare una presentazione più fluida e meglio articolata dei concetti di base, accentuando la scelta didattica dell’Autore in netto favore della filosofia “oggetti il più presto possibile”: classi e oggetti vengono ora presentati nel secondo capitolo, addirittura prima dei tipi di dati numerici fondamentali, invertendo l’ordine della presentazione adottata nella prima edizione, pur garantendo una stretta coerenza espositiva.
Rispetto alla prima edizione, l’Autore ha fortunatamente deciso di abbandonare totalmente l’approccio a “scatola nera” nella presentazione della lettura di dati in ingresso nei primi programmi, che costituiva una forzatura difficilmente comprensibile allo studente, che si trovava poi a dover abbandonare quella strategia nel giro di un paio di capitoli. Il ricorso ad una semplice interfaccia grafica con finestra di dialogo è senza dubbio più efficace.
Il settimo capitolo è stato quasi completamente riscritto, pur trattando gli stessi argomenti, con grande beneficio per il lettore. Infine, questa prima parte si conclude con un capitolo dedicato al collaudo dei programmi: per esigenze editoriali, vista la maggiore dimensione del volume, si è deciso di non pubblicare a stampa questo argomento (che pure riveste un grande interesse), ma di renderlo disponibile gratuitamente sul sito Internet dedicato al testo. La scelta dell’argomento da estrapolare è totalmente coerente con le interdipendenze tra i capitoli che sono state presentate nella prefazione dell’Autore, in quanto nessuno dei successivi capitoli del testo dipende da questo.
La seconda parte del libro, che comprende i capitoli che vanno dall’ottavo al quattordicesimo, tratta gli argomenti più avanzati della programmazione ad oggetti in Java, e ha subito le modifiche più sostanziali ed interessanti. Il nono capitolo della prima edizione è stato suddiviso nei capitoli ottavo e decimo, presentando separatamente la progettazione e l’utilizzo di interfacce e la derivazione di classi per ereditarietà. Nel fare ciò, oltre ad espandere tali argomenti, l’Autore ha brillantemente deciso di presentare prima il concetto di interfaccia, utilizzandolo nel successivo capitolo nono (dedicato alla progettazione di interfacce utente grafiche) ancor prima di aver discusso l’ereditarietà. In questo modo, lo studente può ben comprendere come i due paradigmi siano profondamente distinti e abbiano scopi e utilità diversi e complementari, caratteristica meno evidente nella prima edizione, dove l’ereditarietà veniva (secondo tradizione) presentata per prima.
Un’altra proficua suddivisione di argomenti riguarda il tredicesimo capitolo della prima edizione, che trattava di eccezioni e flussi, argomenti ora presentati, rispettivamente, nei capitoli tredicesimo e quattordicesimo, in modo più organico, strutturato e completo.
Come la prima parte del testo, anche questa seconda sezione si chiude con un capitolo che non viene pubblicato a stampa, ma è reso disponibile sul sito Internet ed è dedicato ai principi di ingegneria del software relativi alla programmazione ad oggetti. Anche questo interessante argomento non costituisce un prerequisito per alcuno dei capitoli successivi.
La terza e ultima parte del testo è stata quasi totalmente riscritta rispetto alla prima edizione e tratta di argomenti classici dell’informatica di base: algoritmi ricorsivi, algoritmi di ricerca e ordinamento, strutture di dati elementari. La ricorsione, trattata marginalmente in un paragrafo del capitolo settimo nella prima edizione, viene ora ad assumere tutta l’importanza che è consona ad un argomento così basilare nella programmazione; inoltre, l’approccio scelto dall’Autore nella presentazione dei casi di studio per questo argomento è decisamente innovativo, in quanto si utilizza la ricorsione in esempi realmente ad oggetti, contrariamente a quanto avviene di solito, dove la ricorsione rimane confinata in realizzazioni procedurali. Il capitolo sedicesimo, dedicato agli algoritmi di ricerca e ordinamento, è sostanzialmente immutato, con l’aggiunta dell’algoritmo quicksort.
Gli ultimi due capitoli della nuova edizione sono forse il punto di maggiore innovazione, fornendo una presentazione delle strutture dati elementari (liste concatenate, vettori, pile, code, insiemi, mappe, tabelle hash, alberi binari di ricerca) che era soltanto accennata nella prima edizione e che costituiva un eventuale punto debole per l’adozione di questo testo nei corsi classici di informatica di base, che tradizionalmente in Italia trattano anche questi argomenti, oltre a presentare i principi di programmazione. La trattazione di queste strutture dati non ha, ovviamente, i livelli di dettaglio e di approfondimento destinati a corsi avanzati, ma è decisamente sufficiente per un corso di base del nuovo ordinamento universitario.
Il testo è, poi, completato da una ricca dotazione di appendici, più nutrita di quanto non fosse già nella prima edizione, alcune delle quali spiccano per interesse: un utilissimo riassunto ragionato della sintassi di Java e un complemento sulla notazione binaria, che spesso viene affrontata nei corsi di fondamenti di informatica.
Infine, sul sito Internet saranno disponibili (a pagamento) altri cinque interessanti capitoli, dedicati ad altrettanti argomenti avanzati di programmazione Java: multi-threading, programmazione client/server (HTTP e URL), basi di dati relazionali (JDBC), XML, Java Servlet (e JSP).
Va infine menzionato il fatto che, in questa nuova edizione, l’Autore ha aggiornato il codice Java alla versione 1.4 della piattaforma Java 2, la più recente tra quelle disponibili.