h1

Head First: Design Patterns

10/07/2008

Wizbook [Icon By Buuf]  Libros: Software Engineering.

Ok, ¿Qué es lo único con lo que siempre podemos contar en el desarrollo de software?

Sin importar dónde trabajes, qué estés construyendo, o en qué lenguaje estés programando, ¿cuál es la única verdadera constante que estará contigo todo el tiempo?

E L   C A M B I O

Sin importar qué tan bien diseñes una aplicación, eventualmente ésta debe crecer y cambiar o morirá.

— Elisabeth Freeman, et al. Head First: Design Patterns, O’Reilly Media, 2004.

Recientemente terminé de leer el libro Head First: Design Patterns, de Eric y Elisabeth Freeman, Kathy Sierra y Bert Bates. Aunque ya he manejado los patrones de diseño del Gang of Four desde hace rato, es la primera vez que veo una manera de presentarlos tan original: ejemplos basados en aplicaciones divertidas y fáciles de recordar (como una de patitos voladores al estilo del memorable El-Fish o esos salvapantallas que parecen un acuario) o ejercicios escritos como crucigramas, verdadero/falso y de adición de código que ayudan al lector a reafirmar los conceptos aprendidos. Sin embargo, lo más novedoso es la presentación tan visual de la información:

El origen de los patrones de diseño: partiendo de la programación orientada a objetos, surgen ciertas buenas prácticas o principios y de éstos nacen los patrones de diseño.

[Click en imagen para ver a mayor escala]

Por cierto, que para aquellos no familiarizados con estos conceptos, el uso de patrones de diseño tiene mucho que ver con la implementación y uso de interfaces y clases abstractas.

A lo largo del libro nos presentan los patrones de diseño más comúnmente utilizados, como el Singleton (cuyo objetivo es tener una sola instancia de una clase por JVM) o la Fábrica Abstracta o Abstract Factory (cuya misión es la creación de familias de objetos sin conocer su clase concreta). Lo interesante de esto es que utilizan conceptos muy familiares para describir la problemática a partir de la cual surge un patrón de diseño, y eso es justamente lo que hace de este título una lectura indispensable para cualquier sistemólogo que se respete. Por ejemplo, con respecto al patrón Decorator es mucho más fácil seguir la analogía de que tenemos tipos de café a los que les vamos agregando características en su constructor…


Beverage beverage = new Espresso();
System.out.println(beverage.getDescription() + ": $" + beverage.getCost());

Beverage beverage2 = new DarkRoast();
beverage2 = new Mocha(beverage2);
beverage2 = new Whip(beverage2);
System.out.println(beverage2.getDescription() + ": $" + beverage2.getCost());


%java StarbuzzCoffe
Espresso: $1.99
Dark Roast Coffee, Mocha, Whip: $2.33
%

… que tener que explicar que Decorator sirve para añadir funcionalidad a un objeto de manera dinámica utilizando algo más abstracto como los streams de datos de Java:


InputStream inputStream = new FileInputStream("/tmp/archivos/archivo.txt");
inputStream = new BufferedInputStream(inputStream, data.length);

Más tarde, una vez descritos los patrones principales, el libro realiza un wrap-up de los temas vistos al integrar lo que ellos llaman patrones de patrones: estrategias de implementación que dan la pauta a conceptos más complejos como el MVC (Model-View-Control). Aunque no van más allá, vale la pena mencionar que esos "patrones de patrones" son conocidos como los Core J2EE Patterns: patrones de diseño de aplicaciones empresariales que salen del dominio de Java puro y tienen que ver más con tecnologías J2EE/JEE, como el Business Delegate o el Service Locator.

Finalmente, sólo tengo una queja con respecto al libro: sólo detallan los 14 patrones más utilizados en la industria, despachándose en algo así como 2 páginas por patrón aquellos menos comunes y que son el pan nuestro de cada día cuando de exámenes de certificación se trata: los términos Bridge, Builder, Chain of Responsibility, Flyweight, Interpreter, Mediator, Memento, Prototype y Visit son dejados como "patrones de sobra". Eso por supuesto, significa que es necesario estudiarlos por separado y buscar ejemplos que en la mayoría de los casos son muy abstractos, viejos o difíciles de recordar.

Conclusiones

Si necesitamos aprender los patrones de diseño más importantes del Gang of Four, o darles una repasada para no oxidarnos, es una buena idea adquirir este libro que presenta de forma interesante algunos conceptos que podrían parecer tediosos, aburridos o demasiado complejos para aprender a la primera. Por otro lado, si buscamos algo más serio y no estamos interesados en aprender estos patrones en Java, o simplemente no nos gustan los "monitos" con diálogos, podemos ir directo a la fuente: Design Patterns: Elements of Reusable Object-oriented Software. Sin embargo, aquél libro tiene dos defectos: es extraordinariamente abstracto y casi todos sus ejemplos están escritos en C/C++

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: