Thinking in Java recensione di Giuseppe Sacco
Titolo: Thinking in Java - seconda edizione, 2000
Autore: Bruce Eckel Editore: Prentice Hall
ISBN: 0-13-027363-5
Prezzo: 44.99 USD
Pagine: 1128 pp + CDROM
Lingua: inglese.
Rilegatura: brossura.
Premessa
Questo volume nasce in realtà per la distribuzione via internet e continua ad avere una vita propria presso il sito dell'autore. È un testo in continua evoluzione che ha già avuto il riconoscimento di una grande quantità di lettori. La versione su carta arriva dopo una reiterata richiesta di vari lettori che trovano più utile una versione cartacea del testo. Oltre al testo è fornito anche un CD con il testo del libro (quello della prima edizione), tutti i sorgenti degli esempi e il testo dell'altro volume scritto dallo stesso autore: Thinking in C: Foundations for C++ & Java. Non è presente la licenza per la redistribuzione del testo (in formato elettronico), ma è specificato che il contenuto del CD -- e quindi forse anche del testo -- è soggetto alla licenza EULA di Microsoft, che viene riportata in appendice al testo.
L'autore è ormai specializzato in corsi su Java. Molte parti di questo testo sono state raffinate alla luce dei suoi corsi. Per saperne di più fate riferimento al sito dell'autore.
Involucro
Cominciamo dall'aspetto esteriore: il libro è decisamente spesso, pesante e poco maneggevole, inoltre è scritto con caratteri che avrebbero certamente potuto essere più piccini. Questa scomodità va decisamente contro lo scopo primo del libro, cioé fornire uno strumento di facile consultazione cartacea contrapposto alla versione elettronica già disponibile e meno economicamente onerosa. La versione PDF fornita all'interno del CD è impaginata allo stesso modo e quindi l'unico modo per ridurre il tutto è quello di stampare più pagine in un solo foglio; ma a quel punto il tutto diventa illegibile.
Trattazione dei capitoli
Il testo affronta l'insegnamento di Java a chi già conosce la programmazione, anche solo teorica o con linguaggi non ad oggetti, e presenta una serie di paragoni con il solo C++. Non si tratta comunque di un testo che richieda grosse conoscenze: il primo capitolo fa egregiamente il suo lavoro e i successivi sono organizzati secondo una complessità crescente. Spesso inoltre gli argomenti sono affrontati più volte, rivisitandoli successivamente all'introduzione di nuovi concetti.
Uno degli aspetti maggiormente interessanti del libro è che non si tratta del solito libro che presenta prima le regole di Java e poi tutte le classi e tutti i metodi. Non si tratta quindi una "reference guide," ma di una prosa nella quale si parla delle tecniche utilizzabili tramite il linguaggio Java. I capitoli del testo seguono più che altro un ordine dato dalla elementarità degli argomenti: in prima istanza le basi e successivamente il resto.
I problemi che l'autore vuole aiutare a risolvere non sono quelli ben conosciuti dall'informatica pratica, come quelli legati alle basi di dati relazionali nelle quali la complessità sta nella scelta dello schema relazionale, ma quelli per i quali non esistono precedenti soluzioni. Per questo motivo la focalizzazione non è sulle classi della libreria Java, ma su problematiche generali e sugli strumenti (spesso con particolare riguardo alle classi abstract) che il linguaggio Java fornisce.
Prima metà del libro
Il primo capitolo Introduction to Objects è un compendio di ingegneria del software che spiega, applicate a Java, le tecniche di sviluppo del ciclo a cascata. Il tutto passando da metodologie come UML o la programmazione in coppia. Si tratta in pratica di un capitolo che fa montare certamente l'entusiasimo in tutti quelli che sono o sono stati programmatori. Le tecniche presentate vengono confrontate alle attuali utilizzate in america, come quella di racchiudere ogni persona tra tre pareti e un corridoio in modo che non sia distratta da altri. Credo proprio che anche chi non voglia leggersi il libro dovrebbe egualmente dare un'occhiata a questo capitolo, scaricandolo da Internet.
L'utilizzo di UML è qui limitato alla presentazione grafica delle classi e delle relazioni tra classi. In questo caso, come in molti altri, l'autore adotta una politica molto libera: non è richiesta e neppure proposta al lettore una totale adesione ad UML, ma semplicemente proposta una via da adottare finché se ne tragga vantaggio.
I capitoli immediatamente successivi sono facili da leggere e ricchi di esempi esaustivi -- a volte gli esempi sono anche troppo esaustivi perché presentano tutte le possibile combinazini dell'argomento dell'esempio, mentre potrebbero essere studiati per un pubblico che più maturo --. Inoltre ogni capitolo presenta una serie di esercizi, di varia difficoltà, per il lettore.
Gli argomenti trattati in questi capitoli sono la gestione del flusso, l'inizializzazione e la terminazione degli oggetti, il nascondere l'implementazione, la strutturazione della classi affinché siano riutilizzazbili, il polimorfismo.
Si arriva poi ad un capitolo molto ben fatto, soprattutto nella sua prima parte, sulla gestione di oggetti omogenei tramite liste, insiemi e mappe. Questo argomento, che è centrale per la programmazione in qualsiasi linguaggio, è qui affrontato con i potenti strumenti di Java. Inoltre sono presentate alcune classi di un package fatto dall'autore e distribuito sul CD.
L'ottima spiegazione di questo capitolo fa sì che il lettore prenda piena confidenza con gli strumenti offerti da Java in proposito. Inoltre c'è anche un confronto tra le varie classi da un punto di vista delle performance. Si tratta, come scrive l'autore, dei tempi della macchina virtuale fornita con il Java Runtime Environment della SUN per piattaforma MS-Windows.
Seconda metà
La seconda metà non è evidenziata tipograficamente e neppure in altra maniera esplicita dall'autore, ma troviamo che gli argomenti trattati dal testo siano decisamente diversi da quelli, più generici, della prima parte. In particolare si ha che il lettore non è più trattato da "programmatore alle prime armi," ma da professionista del settore.
I capitoli dall'11 in poi seguono il tracciato dei principali package di Java: Input/Output, Riflessione, Grafica (UI), Thread, Networking.
Anche in questo caso la trattazione è molto leggibile e non si tramuta in un elenco di classi e metodi. Anzi viene spesso preposto alla trattazione tecnica un breve cappello storico che riporta la genesi del package in SUN. Spesso inoltre ci sono riferimenti alla personale opinione dell'autore. In particolare l'autore mostra una certa stizza, per altro condivisibile, per la struttura di tutta la parte di Input/Output; mentre invece fa tanto di cappello per la nuova libreria grafica Swing e dei Beans di Java2.
Questa seconda parte del libro è quella più interessante: l'autore si sbizzarrisce in brevi programmi che mostrano ciò che serve sapere e fanno capire che c'è anche dell'altro. Ci sono anche riferimenti ad approfondimenti su testi specifici. Questa seconda parte vale veramente il prezzo del libro.
Il modo di esporre gli argomenti cambia notevolmente: viene prima mostrato il codice e poi spiegato il significato del tutto, così il lettore è invitato a leggere la prima parte e può cercare di comprenderla, mettendosi alla prova, prima di arrivare alla spiegazione. Nella parte relativa alle interfacce grafiche si ha che alcune classi non siano neppure spiegate perché autoevidenti.
Conclusioni
Sicuramente il libro vale la pena d'essere letto. Non ci riuscirete in treno, o la sera a letto, a causa della sua mole; ma non avrete alcun problema se siete forniti di una salda scrivania sulla quale poggiare il tutto.
Vedi anche recensione a cura di Roger Cassatella
|