Pròlogo:
“Cada patrón describe un problema que ocurre una y otra vez en nuestro entorno, para describir después el núcleo de la solución a ese problema, de tal manera que esa solución pueda ser usada más de un millón de veces sin hacerlo siquiera dos veces de la misma forma”.
Christopher Alexander – Arquitecto - The Tímeless Way of Building (1979)
En una sociedad donde los cambios se suceden tan deprisa y ya no queda tiempo para saborear un éxito porque un nuevo reto espera tras la esquina, la optimización del tiempo resulta fundamental. Si a ello le añadimos que el sector de las nuevas tecnologías es posiblemente el impulsor, o cuanto menos, el motor que permite la asimilación de todos estos cambios, nos encontramos en una situación donde el dinamismo marca la diferencia.
Un viejo amigo un día me dijo: “Un desarrollo que dure más de un año es un desarrollo obsoleto.” y seguramente, en los tiempos que corren, tiene toda la razón.
Pero, ¿cómo puedo ser dinámico y a la vez pulido y efectivo? Y ¿cómo puedo ser dinámico sin perder organización en mis procesos? La solución está en el uso de Patrones de Diseño.
En el desarrollo de Software, al igual que en cualquier otro proceso de ingeniería, es vivamente aconsejable el uso de patrones de diseño. No obstante, no fue hasta principios de los 90 cuando tuvieron un gran éxito en el mundo de la informática a partir de la publicación del libro Design Patterns escrito por el GoF (Gang of Four) en el que se recogían 23 Patrones de Diseño comunes.
La definición aceptada de Patrones de Diseño es que “son la base para la búsqueda de soluciones a problemas comunes en el desarrollo de software y otros ámbitos referentes al diseño de interacción o interfaces”.
De hecho, los Patrones de Diseño pretenden proporcionar catálogos de elementos reutilizables en el diseño de sistemas de software y evitar así la reiteración en la búsqueda de soluciones a problemas ya conocidos y solucionados anteriormente.
A su vez, permiten la creación de un vocabulario común entre consultores y ayudan a estandarizar la forma en que se realiza el diseño.
Todo ello redunda en un aprendizaje más rápido de las nuevas generaciones de consultores y en la consolidación del conocimiento ya existente.
Por el contrario, los patrones no pretenden imponer ciertas alternativas de diseño frente a otras y mucho menos, eliminar la creatividad inherente al proceso de diseño.
Podemos diferenciar entre 3 tipos conocidos de patrones: de Arquitectura, de Diseño y de Lenguaje y cada uno de ellos pertenece a un nivel de abstracción distinto.
Para describir un patrón se utiliza una plantilla compuesta por una serie de apartados que lo definen de forma explicita. La plantilla más común es la utilizada precisamente por el GoF y consta de los siguientes apartados:
-
Nombre del patrón: nombre estándar del patrón por el cual será reconocido en la comunidad (normalmente se expresan en inglés). Clasificación del patrón: Creacional, Estructural o de Comportamiento.
-
Intención: ¿Qué problema resuelve el patrón? También conocido como: Otros nombres de uso común para el patrón.
-
Motivación: Escenario de ejemplo para la aplicación del patrón.
-
Aplicabilidad: Criterios de aplicabilidad del patrón.
-
Estructura: Diagramas de clases oportunos para describir las clases que intervienen en el patrón.
-
Participantes: Enumeración y descripción de las entidades abstractas (y sus roles) que participan en el patrón.
-
Colaboraciones: Explicación de las interrelaciones que se dan entre los participantes.
-
Consecuencias: Consecuencias positivas y negativas en el diseño derivadas de la aplicación del patrón.
-
Implementación: Técnicas o comentarios oportunos de cara a la implementación del patrón.
-
Código de ejemplo: Código fuente ejemplo de implementación del patrón.
-
Usos conocidos: Ejemplos de sistemas reales que usan el patrón.
-
Patrones relacionados: Referencias cruzadas con otros patrones.
Los consultores más expertos aplican, de forma mayormente intuitiva y automática, soluciones de modelado elegantes y efectivas, y los patrones son el resultado de experiencias en distintos escenarios y una herramienta de transmisión hacía los consultores menos experto. Si el “nivel” de un consultor se mide por su acierto en diagnosticar problemas y la rapidez en proporcionar soluciones a cualquier escala, el mejor consultor es el que reutiliza la misma solución abstracta para resolver situaciones similares.
El uso de Patrones de Diseño es, en definitiva, un camino óptimo para compartir conocimientos y experiencias, y podemos concluir afirmando que es un sintoma inequivoco de madurez.