Come nella letteratura, anche nell’editoria informatica esistono dei testi (pochi in verità) che, resistendo al passare del tempo, diventando degli “evergreen”, una sorta di Bibbia su cui si formano generazioni di sviluppatori (o informatici in generale) e su cui si basano altri libri pubblicati negli anni successivi.
I quattro autori di questo libro, per le loro riconosciute qualità e competenze, sono stati addirittura soprannominati i “Fab 4” (“Fabulous four, favolosi quattro), proprio come i Beatles (tra l’altro l’ultimo, John Vlissides, è scomparso un paio di anni fa). L’argomento è di alto livello, i “Design Patterns”, ovvero soluzioni eleganti e riusabili per problemi ricorrenti di design nella programmazione ad oggetti. Gli autori illustrano, con esempi, ben 23 pattern, in modo da coprire praticamente tutta la casistica cui ci si può imbattere nel proprio lavoro di analista/programmatore. Il libro, in sostanza, lo si può definire come un catalogo di pattern, e costituisce la tesi di dottorato di uno degli autori, Erich Gamma, all’università di Zurigo nel 1991 (niente male come tesi quindi).
Il lettore di riferimento per questo libro conosce già bene la programmazione ad oggetti, meglio se con solide basi di modellazione UML o di una simile notazione visuale di progettazione ad oggetti. Non è quindi un testo introduttivo, o per lettori che si stanno approcciando all’argomento. Non insegna nemmeno a programmare, né tantomeno la programmazione ad oggetti stessa.
Purtroppo gli esempi di codice sono stati realizzati in SmallTalk (e alcuni in C++), quindi risulteranno poco leggibili per la maggior parte dei lettori. La loro sintassi comunque rispecchia abbastanza da vicino linguaggi ad oggetti moderni come Java e C#. Ricordo infatti che la primissima edizione risale addirittura al 1994, e a quei tempi non esisteva ancora Java (men che meno C#).
Anche i diagrammi delle classi non sono realizzati in puro UML (non ancora standardizzato ai tempi), ma utilizzando l’OMT (Object Modeling Technique), i cui dettagli, uniti ad una breve introduzione sulle notazioni grafiche usate, sono spiegati nell’appendice B (5 pagine in tutto). Nel capitolo 1 (Introduzione) viene comunque spiegato dettagliatamente come leggere questi diagrammi (e si scoprirà che sono piuttosto simili a UML, e molto intuitivi).
Questo lungo capitolo di introduzione (35 pagine) è oltretutto molto importante perché prepara il terreno (e il lettore) per affrontare il catalogo dei pattern. Consiglio assolutamente di non saltarlo; gran parte dell’utilità di tutto il libro, infatti, è racchiusa in esso.
Sparsi durante la trattazione ci sono molti riferimenti ad una ricchissima bibliografia (tipicamente in stile universitario).
Questa sottostante è la lista dei 23 pattern analizzati, suddivisi nelle tre macro aree (Creazionali, Strutturali e Comportamentali), con a fianco tra parentesi il numero di pagina di cui è composto il paragrafo che li tratta.
Quelli in rosso sono quelli ritenuti dagli autori come i più utilizzati, in quanto più semplici e comuni.
Pattern Creazionali
· Abstract Factory (10 pp)
· Builder (10 pp)
· Factory Method (10 pp)
· Prototype (10 pp)
· Singleton (10 pp)
Pattern Strutturali
· Adapter (12 pp)
· Bridge (11 pp)
· Composite (12 pp)
· Decorator (10 pp)
· Facade (9 pp)
· Flyweight (12 pp)
· Proxy (11 pp)
Pattern Comportamentali
· Chain of Responsibility (10 pp)
· Command (11 pp)
· Interpreter (13 pp)
· Iterator (15 pp)
· Mediator (10 pp)
· Memento (9 pp)
· Observer (11 pp)
· State (9 pp)
· Strategy (10 pp)
· Template Method (5 pp)
· Visitor (14 pp)
Ognuno di questi paragrafi ha una struttura comune, composto rispettivamente dalle sezioni:
Scopo – Motivazione – Applicabilità – Struttura – Partecipanti – Collaborazioni – Conseguenze – Implementazione – Codice d’esempio – Utilizzi noti – Pattern correlati.
Tutti e 3 questi capitoli iniziano con dei commenti introduttivi sui pattern e terminano con un paragrafo che li confronta e li compara criticamente.
Data la particolarità del libro, la lettura sequenziale dei vari capitoli del catalogo dei pattern potrebbe risultare a prima vista poca proficua. Credo che inizialmente sarebbe meglio avere una visione di insieme dell’esistenza dei vari pattern, sfogliando e leggendo rapidamente le loro introduzioni, per poi approfondire quello che si ritiene essere maggiormente adatto alla propria situazione. Solo in seguito poi, grazie alla necessaria esperienza acquisita, ci si potrà “avventurare” alla scoperta degli altri.
Dato inoltre che ogni capitolo sui pattern utilizza diversi diagrammi di classe utilizzando la notazione OMT, meglio sarebbe leggersi prima la breve appendice B che ne riassume le caratteristiche.
Oltre all’appendice B (già citata), l’appendice A è in sostanza un glossario (4 pagine) della terminologia dei pattern, e infine l’appendice C riporta il codice in C++ della classi base utilizzate in parecchi esempi.
Ottima l’impaginazione della (ex) Addison-Wesley, ora confluita nella Pearson.
La pagina del sito relativa a questo libro è questa. Purtroppo non è presente nessun materiale scaricabile, nemmeno il sommario.
Per concludere riporto, in quanto molto significativo ed esemplare per sintesi e chiarezza quanto scritto da Luciano Baresi (professore del Politecnico e revisore tecnico del libro) nella sua prefazione alla traduzione italiana del testo:
“Design Patterns è un must: un libro che deve essere parte della cultura di qualsiasi esperto di progettazione di software ad oggetti. Non insegna una notazione particolare, e neppure l’ultimo linguaggio di programmazione, ma spiega come risolvere in modo elegante, efficiente e sintetico alcuni problemi che ricorrono spesso nella progettazione di software ad oggetti.”
PRO
Malgrado siano passati oltre 10 anni dalla sua pubblicazione, questo libro continua ad essere letto ed acquistato, segno inequivocabile di una qualità non trascurabile e del fatto che i concetti spiegati sono così generali da resistere all’evolversi del mondo informatico. Gli autori sono delle vere istituzioni sulla materia, e leggere ciò che pensano sui design pattern non può che fare bene a chi è interessato all’argomento.
Eccellente la traduzione ed ottima la qualità della carta utilizzata.
CONTRO
I contro sono da ricondursi all’epoca in cui il libro è stato scritto. Come linguaggi per gli esempi sono stati scelti SmallTalk e C++, meno conosciuti (soprattutto il primo) rispetto ad altri linguaggi ad oggetti moderni come Java e C#. Anche l’utilizzo di un formalismo di modellazione non esattamente uguale ad UML, non aiuta la comprensione generale. Decisamente rigida la rilegatura della Pearson, che non consente, neppure per un libro di non eccessive dimensioni, di tenerlo aperto sulla scrivania.
Voto complessivo: 8/10
Lettore: Intermedio
Sommario
Prefazione all’edizione italiana
Prefazione
Premessa
Guida per il lettore
1 – Cap. 1: Introduzione
33 – Cap. 2: Progettazione di un editor di documenti
79 – Catalogo dei design pattern
81 – Cap. 3: Pattern creazionali
137 – Cap. 4: Pattern strutturali
147 – Cap. 5: Pattern comportamentali
353 – Cap. 6: Conclusioni
361 – Glossario
365 – Guida alla notazione
371 – Classi base
377 – Bibliografia
385 – Indice analitico
Titolo: Design Patterns
Autori: E. Gamma, R. Helm, R. Johnson, J. Vlissides
Editore: Pearson – Addison Wesley
ISBN: 9788871921501
Pagine: 414
Prezzo: 39 €
Data di uscita: 2002