Patrones de Diseño


A lo largo de las próximas semanas intentaré, dentro de mis posibilidades, realizar un acercamiento a uno de los conceptos que todo ingeniero de software que se precie debe saber manejar con soltura: los patrones de diseño.

Un patrón de diseño no es más que una “receta” que trata de proporcionar una solución genérica a un problema concreto que se repite con frecuencia durante el desarrollo de software.

Para que un patrón de diseño sea considerado como tal debe cumplir una serie de requisitos, como el haber demostrado su efectividad a la hora de resolver el problema que afirma solventar y ser adaptable a cualquier entorno y tecnología, es decir, ser lo suficientemente genérico para asegurar su reutilización.

Por tanto, un patrón de diseño es un artefacto, por definición, abstracto. Sé que existe multitud de documentación al respecto, pero muchas de las explicaciones que se ofrecen se componen de un montón de terminología que, si bien es perfectamente familiar para un ingeniero experimentado, resulta terriblemente difícil de digerir para un recién iniciado en el mundo de la arquitectura y el diseño. Dicen que Einstein dijo en una ocasión que “no entiendes realmente algo a menos que seas capaz de explicárselo a tu abuela”. Pues bien, abuela, esta serie de artículos va por ti.

GoF

El concepto de “patrón de diseño” va ligado siempre a estas tres letras: GoF. Puede que muchos hayamos oido en alguna ocasión algo como “Este patrón es GoF“. “El modelo MVVM no es GoF“. ¿Qué narices es un “patrón GoF“? GoF no es más que el acrónimo de “Gang of Four” (en español sería algo así como “la banda de los cuatro”), en referencia a los cuatro autores del libro “Design Patterns: Elements of Reusable Object-Oriented Software“: Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides. Este libro se remonta a los años noventa, y está considerado como la biblia de los patrones de diseño dentro del paradigma de la programación orientada a objetos. Se trata, pues, de un libro digno de compartir estantería junto a “The C Programming Language” de Kernighan y Ritchie.

Los patrones definidos en este manual siguen perfectamente vigentes en la actualidad (pese a que se han diseñado nuevos patrones, algunos de ellos relativos a los nuevos paradigmas de desarrollo). La sabiduría y los conceptos contenidos en este manual son amplios y profundos, pero por desgracia, reservados en su mayoría para aquella “élite” dentro del campo de la ingeniería que es capaz de manejar abstracciones como quien moja bizcochos en el café con leche. En resumen, se trata de una información muy valiosa, sí, pero muy concentrada y difícil de digerir para un estudiante.

Por lo tanto, los patrones de diseño son una pieza clave a la hora de diseñar una arquitectura software. Si no aprendes a manejarlos, nunca serás un buen ingeniero de software.

Antipatrones de diseño

Puede que ahora mismo estés pensando: ¡eh! ¡yo soy un buen ingeniero y no uso esos patrones de diseño! ¡diseño los míos! Bien, al igual que existen patrones de diseño, existe también su antítesis, los “antipatrones de diseño“, es decir, aquello que nunca, bajo ninguna circunstancia, hay que realizar a la hora de diseñar un software. Y (casualidades de la vida), uno de esos antipatrones recibe el nombre de “Reinventar la rueda“: no pierdas el tiempo en investigar algo que ya ha sido descubierto. Puedes intentar mejorar o adaptar una solución existente, especialmente si un elemento no se adapta bien a tu proyecto, pero comenzar el trabajo desde cero es perder el tiempo: hay gente que ha invertido muchísimo tiempo en estos patrones. Funcionan. No le des más vueltas.

Categorías de patrones de diseño

El Gang of Four estableció una serie de categorías para definir la función que realizaba un patrón de diseño. A grandes rasgos, los patrones se dividen en tres grupos:

  • Creacionales: se trata de un conjunto de patrones cuyo objetivo es el de instanciar objeto, en lugar de recurrir a la instanciación directa.
  • Estructurales: definen una composición de objetos que, a través de especialización, proporcionan una funcionalidad determinada.
  • De comportamiento: se centran en cómo interactúan e intercambian información unos objetos con otros de una manera definida.

Con el paso del tiempo han surgido nuevos patrones de diseño, algunos de los cuales no son más que una combinación o versión de los patrones “de toda la vida”. Realizaré, por tanto, una introducción a los patrones más importantes utilizando la clasificación original del GoF. Comenzaremos por los patrones creacionales, en los que nos serán útiles los conceptos de inyección de dependencias que vimos en anteriores artículos.

Entretanto, recomiendo las siguientes fuentes:

One comment

Deja un comentario

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