Libro Interface Oriented Design

Copertina libro Interface Oriented Design

Dopo una serie di letture una più gustosa dell’altra, doveva arrivare prima o poi il momento di un libro che non suscitasse quell’interesse che mi sarei aspettato.

Devo dire che, fin dall’inizio, l’incontro con Interface Oriented Design: With Patterns (Pragmatic Programmers) non è stato tra i più felici. Lo acquistai a dicembre, in un ordine con altri classici come Learn to Program e Ship It!. Per una serie di motivi lo scambiai per un libro legato alla progettazione di interfacce utente e solo dopo mi accorsi che riguardava invece il componente interfaccia in termini di sviluppo del software.

Potete immaginare il mio disappunto! Non che non conosca le interfacce, non che mi manchino le competenze per comprendere l’argomento… ma considerato che ad oggi Ruby è il linguaggio di programmazione che uso quotidianamente, un libro sulle interfacce è utile quanto spiegare ad un beduino come si guida una motoslitta.

Passato l’amaro in bocca e messo in testa il Java-cappello, ho deciso di intraprendere ugualmente la lettura.

Struttura del libro

Interface Oriented Design è organizzato in 3 parti:

  1. All about Interfaces
  2. Developing Interfaces
  3. Interfaces in the Real World

All about Intefaces è un’introduzione alle interfacce. Ken Pugh apre il libro subito con un esempio, dimostrando come in realtà un servizio di pizza a domicilio possa essere descritto con una o più interfacce.

Il secondo capitolo elenca e descrive le tre leggi delle interfacce utilizzando, ancora una volta, l’esempio Pizza Delivery per dimostrare un’applicazione pratica dell’argomento.

La prima parte prosegue poi trattando gli elementi di un’interfaccia, le sue caratteristiche come l’ereditarietà ed il polimorfismo per dedicare infine un capitolo alle interfacce remote.

La seconda parte, Developing Interfaces, contiene un solo capitolo ed analizza come orientare lo sviluppo di un software utilizzando le interfacce sia in fase di design, sia in fase di scrittura effettiva del codice sorgente.

Interfaces in the Real World, l’ultima parte, contiene 3 esempi d’utilizzo di interfacce nella vita reale per lo sviluppo di software. L’ultimo capitolo di questa sezione, Patters, accenna infine ai principali Design Patter basati su interfacce.

Mi aspettavo qualcosa di diverso…

E’ possibile che il mio giudizio sia stato in qualche modo influenzato fin dall’inizio, dai motivi anticipati in apertura di questo post. Ad ogni modo, l’interesse per questo libro è andato via via scemando durante la lettura.

Abbastanza interessante la prima parte. L’introduzione è chiara, significativa ed i concetti affrontati possono essere molto utili nella progettazione di un software, indipendentemente dal fatto che il linguaggio scelto supporti o meno l’uso di interfacce.

In alcuni frangenti non ho apprezzato la volontà dell’autore di dimostrare come “praticamente tutto può essere ricondotto ad un’interfaccia”, anche in situazioni dove una classe astratta o altri elementi avrebbero rappresentato una scelta più adeguata.

In generale, il libro è molto ricco di informazioni ma buona parte degli argomenti è trattata in modo superficiale.

Lo sviluppo con le interfacce è limitato ad un solo capitolo, il capitolo 11 Patterns è poco più che un elenco di nomi e non trasmette in alcun modo le reali potenzialità dei design pattern analizzati.

Gli esempi forniti coprono quasi esclusivamente l’aspetto di design ed analizi delle interfacce e quasi mai offrono un’effettiva dimostrazione dell’implementazione di un’interfaccia da parte di diversi elementi di un software.

Lo stesso terzo capitolo, offre tre esempi reali ma in tutti e tre ci si limita ad offrire porzioni di codice saltellando da una prospettiva all’altra. Probabilmente, un solo reale esempio con a corredo un prototipo di applicazione funzionante avrebbe offerto una prospettiva più diretta.

In conclusione

Come buona parte degli altri libri editi dalla Pragmatic Programmers, anche Interface Oriented Design è una lettura relativamente rapida e non troppo impegnativa. Tuttavia, rispetto alla qualità generale delle altre pubblicazioni, questa volta non sono rimasto soddisfatto dell’acquisto e probabilmente non l’avrei inserito nel carrello se (1) non mi fossi confuso di argomento (2) ed avessi potuto sfogliare il libro curiosandone il contenuto.

A chi desidera approfondire il tema di interfacce e design patterns consiglio in alternativa la lettura di un libro dedicato ai design pattern. A chi sta cercando una trattazione specifica sull’applicazione delle interfacce in Java, consiglio l’acquisto di una pubblicazione specifica per Java. In alternativa, se siete alla ricerca di un’introduzione teorica alle interfacce, Interface Oriented Design potrebbe essere una soluzione adeguata per tragettarvi in seguito verso l’acquisto di una lettura più specifica.