- ¿Qué es una base de datos? - noviembre 7, 2020
- ¿Es la programación una profesión para ti? - septiembre 3, 2020
- Temporada 2020-2021 - julio 15, 2020
Introducción
Una de las palabras que más me gustan del Inglés es «Smart», agrupa en una sola palabra un conjunto de significados en castellano que resume como deberíamos de comportarnos en la vida y también la forma que deberíamos de tener a la hora de hacer las cosas. Elegante, Inteligente, Astuto, Ingenioso…
El momento en el que se convirtió en la palabra que más me gusta fue cuando mi profesor particular de Inglés, quedándome atascado por no encontrar la palabra exacta para describir un hecho, me miró, hizo como si se colocara la corbata y dijo: Smart. En ese momento, supe que esa palabra guiaría la forma en la que quiero que otras personas vean el trabajo que hago todos los días y que piensen que «soy smart» cuando me vean.
¿Por qué los patrones?
La experiencia en cualquier profesión es un rango, y un profesional experimentado sabe que lo que nunca hay que hacer es empezar a resolver un problema desde cero, sino que reutilizará soluciones que le fueron útiles en el pasado.
Chistopher Alexander, arquitecto y escritor, define un patrón como un problema que ocurre una y otra vez en nuestro entorno, así como la solución a ese problema, de tal modo que se pueda aplicar esta solución un millón de veces, sin hacer lo mismo dos veces. Te recomiendo leer sobre su teoría del lenguaje de patrón, aunque hable sobre términos de la construcción, es aplicable a cualquier campo sobre el que se desee aplicar, ya que, donde habla de paredes y tabiques nosotros hablaremos de clases, interfaces…
Por lo tanto, puedes responderte a la pregunta de por qué los patrones diciendo que existen muchos problemas parecidos que se resuelven de forma parecida todos ellos, de ahí que se necesiten patrones, para no empezar desde cero cada uno de ellos.
Patrones de diseño Software
Seguro que te estás preguntando que a qué viene lo que te he comentado de la palabra Smart en un blog sobre desarrollo de software… es sencillo: Todos tenemos que ser elegantes a la hora de escribir código fuente y a la hora de realizar el diseño de los sistemas software con los que trabajamos. Es importantísimo que el legado de codigo que dejamos sea lo suficientemente claro y esté bien diseñado y estructurado para que otras personas puedan trabajar con él sin ningún tipo de problema.
Cuando empiezas a trabajar en un proyecto software y lees los documentos de requisitos funcionales y no funcionales, estoy completamente seguro que eres capaz de detectar ciertos patrones de funcionamiento que han aparecido en proyectos anteriores. Si nunca te has parado a pensar esto, te propongo que el siguiente proyecto en el que trabajes te pares 5 minutos a intentar detectar patrones funcionales y no funcionales con proyectos anteriores. Ese es el momento, cuando detectas patrones que se repiten, es el momento de usar patrones de diseño, es el momento de resolver el problema utilizando técnicas ya utilizadas y probadas anteriormente, y que no fallan.
Los patrones de diseño tienen cuatro elementos esenciales:
- Nombrel del patrón: Permite describir en una o dos palabras un problema de diseño y su solución.
- Problema: Indica cuando hay que aplicar el patrón de diseño, explicando el problema y su contexto.
- Solución: Describe la plantilla que puede aplicarse para la resolución del problema.
- Consecuencias: Son las ventajas e inconvenientes que tiene el uso del patrón.
Tipos de patrones de diseño
Existen multitud de patrones de diseño, personalmente, la clasificación que más acertada me parece es la basada en el propósito del patrón, ya que con ella tienes el objetivo funcional principal del patrón sabiendo a qué categoría pertenece.
Según el propósito vas a diferenciar entre tres tipos:
- Patrones de creación: Tienen que ver con el proceso de creación de los objetos.
- Patrones estructurales: Tienen que ver con la composición de clases u objetos.
- Patrones de comportamento: Tienen que ver con el modo en el que las clases y objetos interactúan y se reparten la responsabilidad.
Como puedes observar, la clasificación según el propósito recoge todas las posibles variantes entre los diferentes patrones, empezando por como se crean los objetos, siguiendo por como se componen y terminando por su funcionamiento.
¿Qué necesitas saber de cada patrón de diseño?
Existe una plantilla de información que se necesita saber de cada uno de los patrones para que puedan ser aplicados correctamente:
- Nombre del patrón y clasificación.
- Propósito: Frase breve que indique qué hace, en qué se basa y problema concreto que resuelve.
- También conocido como: Otros nombres por los que es conocido.
- Motivación: Escenario que ilustra como se resuelve el problema.
- Aplicabilidad: Indica cuando se puede aplicar el patrón.
- Estructura: Representación gráfica de las clases que lo componen.
- Participantes: Clases y objetos participantes, junto con sus responsabilidades.
- Colaboraciones: Indica la forma en la que colaboran los participantes.
- Consecuencias: Ventajas e inconvenientes del uso del patrón.
- Implementación: Técnicas a usar, detallando trucos y dificultades.
- Código de ejemplo: Fragmento de código.
- Usos conocidos: Ejemplos de utilización en sistemas reales.
- Patrones relacionados: Indica los patrones con los que está relacionado.
Resumen y conclusiones
Existen problemas repetitivos que se pueden solucionar utilizando la misma técnica, pero de forma diferente en cada caso. Mi objetivo es que entiendas que existen patrones de diseño a la hora de desarrollar software, estos patrones facilitan la lectura y entendimiento del código fuente y nos proporcionan una serie de herramientas que ya han sido probadas en otros escenarios parecidos.
Ahora llega el momento de que unas los patrones de diseño y el término «Smart»… ¡estoy seguro de que has captado el concepto!
En próximos posts te hablaré sobre como elegir un patrón de diseño y como aplicarlo. Iré enseñándote diferentes patrones de diseño que existen, para que vayas ampliando tus conocimientos, y además… ¡podrás descargarte la plantilla de cada uno de los patrones que vayamos viendo!