Patrones de diseño. Introducción

¿Qué es un patrón de software?

En software un patrón de diseño se refiere a una determinada forma de crear software, una forma de fabricarlo, por decirlo de alguna forma para crearlo de forma correcta.

En determinados marcos de trabajo, cuando nos enfrentamos a determinados problemas en el diseño de software hay formas determinadas de enfocalos que permiten adaptar mejor los posibles cambios de dichos problemas y las distintas evoluciones que pueda sufrir el software en un futuro.

Un buen dominio de los patrones más comunes nos puede servir para no tener que reinventar la rueda a cada paso que damos sino que podemos hacer uso de lo que otros pensaron por nosotros (y que descubriremos en multiples situaciones).

¿Cuándo aplicar los patrones de software?

En mi experiencia el uso de patrones de diseño es beneficioso en la mayoría de situaciones que se dan en cualquier proyecto medio complejo. Aún cuando en un principio el uso de determinados patrones de software pueda suponer una carga de trabajo adicional (cosa especialmente incomoda en los proyectos que van contrareloj) la ganancia en mantenibilidad del software merece la pena.

En muchos casos el uso de un patrón de software choca contra el principio de no añadir complejidad antes de que sea necesario, es decir, en ocasiones usar un patrón nos supondrá un trabajo extra del que quizá no saquemos un beneficio. En este caso, como en todo, tan solo hay un factor a tener en cuenta: sentido común. En general determinadas situaciones sugieren o se adaptan mejor a un patrón de software y, especialmente, hay determinadas situaciones en las que mirando la evolución del proyecto al futuro nuestra intuición o experiencia nos dice que el software va a necesitar ser ampliado más allá de la situación actual, o bien cuando estemos refactorizando un segmento de código para adaptarnos a uno de esos cambios que no habíamos previsto.

En la mayor parte de los casos implementar las cosas bien, pensando en adoptar un patrón adaptable que permita expandir el programa más adelante nos va a quitar muchos quebraderos en el futuro cuando el cliente quiera que cambiemos o ampliemos cosas (no creas que no va a pasar, el cliente siempre quiere cambiar algo, siempre).

La mayoría de los patrones de software que vamos a presentar consisten en acercarse a un problema concreto de una forma genérica de forma que tratamos de absorber los cambios en el problema (o las posible ampliaciones de este) de una forma genérica, lo que nos permitirá adaptarnos y mantener mejor el software durante la vida del producto.

GoF (Gang of Four)

Quizá hayas visto por ahí referirse a ciertos patrones de diseño de software como patrones GOF. Esta denominación viene dada por la publicación del patrón en un libro llamado Design Patterns: Elements of Reusable Object-Oriented Software (Patrones de diseño: Elementos reusables en software orientado a objetos) que contenía varios modelos de diseño de software y cuyos autores eran Erich Gamma, Richard Helm, Ralph Johnson y John Vlissides, conocidos como "The Gang of Four" (la banda de los cuatro).

Tipos de patrones

Generalmente los patrones de software suelen subdividirse en varias clases:

  • Patrones creacionales: Engloban aquellos patrones de software que se centran en la forma de crear las clases y sus instancias, así como el uso que recibirán una vez creadas. Ejemplos de patrones de este tipo son el patrón Singleton o el patron Abstract Factory.
  • Patrones estructurales: Engloban aquellos patrones de software que se centran en la composición y estructura de las clases y en la herencia entre ellas. Ejemplos de patrones de este tipo son el patrón Adapter o el patron Facade.
  • Patrones de comportamiento: Engloban aquellos patrones de sofware que se centran en la comunicación entre las distintas clases y objetos. Ejemplos de patrones de este tipo son el patrón Observer o el patrón Strategy.

Nombres de patrones

Para toda esta serie de artículos voy a utilizar (como de costumbre) los nombres ingleses para los patrones. Esta es una costumbre común en informática por varias razones entre las que destacan el hecho de que gran parte de la bibliografía esté en ingles así como el hecho de que los nombres ingleses sean bastante universales (todo el mundo usa el mismo nombre) mientras que las traducciones pueden diferir dependiendo de quien las haga.

Así durante toda la serie se utilizarán nombres como patrón Abstract Factory en lugar de patrón de fábrica abstracta.

Fuentes adicionales

Aunque hay varios recursos en español en la red, hasta ahora los mejores ejemplos y artículos que yo he encontrado han venido dados en ingles. Un excelente recurso es el topic Design Pattern de la wikipedia inglesa, con descripciones de muchos de los patrones de diseño (GOF y otros).

Notas finales

Para el desarrollo de los distintos patrones de software intentaré ceñirme al esquema GOF (a una parte al menos) que distingue las distintas secciones que deben explicar un patrón y que fundamentalmente son:

  • Nombre y clasificación: El nombre único del patrón y el tipo al que pertenece.
  • Proposito (o problema): Describe el proposito del patrón o el problema que soluciona.
  • Motivación: Proporciona un ejemplo de un contexto en que el patrón puede ser usado para resolver un problema.
  • Aplicabilidad: Describe las sitaciones en las que el patrón puede usarse para resolver un problema.
  • Estructura: Un diagrama que explique el funcionamiento del patrón.
  • Código de ejemplo: Un listado de código que ejemplifique una implementación del patrón.
  • Ejemplos reales: Descripción de ejemplos reales. 
6.42857
Average: 6.4 (7 votes)
Your rating: None