Patrones de Diseño (Parte 1)

Todo desarrollador de software, hasta en sus niveles iniciales ha escuchado, ha leído, visto e incluso conversado acerca de los patrones de diseños.  En resumidas cuentas un patrón de diseño es un “boceto, base o esqueleto de soluciones a problemas comunes o recurrentes en desarrollo de software”. En otras palabras, es una solución probada que se ajusta a las necesidades de determinado tipo de sistema o aplicación. Sin embargo, surgen algunas interrogantes al respecto, como, Por qué es realmente necesario utilizar patrones de diseño? cuales son los diferentes tipos de patrones de diseño? Cuáles son sus ventajas? y cuando son aplicables.

A lo largo de este articulo estaremos respondiendo esta y otras interrogantes, pero primero que nada conozcamos un poco de la historia y evolución de estos.

 

HIstoria de patrones de diseño

 

Ya que conocemos un poco del contexto de los patrones de diseño podemos entrar en materia, Los patrones se dividen en distintos grupos según el tipo de problema que resuelven, a saber:

  1. Patrones Creacionales: Inicialización y configuración de objetos.
  2. Patrones Estructurales: Separan la interfaz de la implementación. Se ocupan de cómo las clases y objetos se agrupan, para formar estructuras más grandes.
  3. Patrones de Comportamiento: Más que describir objetos o clases, describen la comunicación entre ellos.

 

Los patrones creacionales

Los patrones creacionales facilitan la tarea de creación de nuevos objetos encapsulando el proceso. 

Los patrones creacionales más conocidos son:

  • Abstract Factory: Nos provee una interfaz que delega la creación de un conjunto de objetos relacionados sin necesidad de especificar en ningún momento cuáles son las implementaciones concretas.
  • Factory Method: Expone un método de creación,  delegando en las subclases la implementación de este método.
  • Builder: Separa la creación de un objeto complejo de su estructura, de tal forma que el mismo proceso de construcción nos puede servir para crear representaciones diferentes.
  • Singleton: limita a uno el número de instancias posibles de una clase en nuestro programa, y proporciona un acceso global al mismo.
  • Prototype: Permite la creación de objetos basados en “plantillas”. Un nuevo objeto se crea a partir de la clonación de otro objeto.

 

Patrones estructurales

Son patrones que nos facilitan la modelización de nuestros software especificando la forma en la que unas clases se relacionan con otras.

Los patrones estructurales especifican la forma en que unas clases se relacionan con otras. 

Estos son los patrones estructurales que definió la Gang of Four:

  • Adapter: Permite a dos clases con diferentes interfaces trabajar entre ellas, a través de un objeto intermedio con el que se comunican e interactúan.
  • Bridge: Desacopla una abstracción de su implementación, para que las dos puedan evolucionar de forma independiente.
  • Composite: Facilita la creación de estructuras de objetos en árbol, donde todos los elementos emplean una misma interfaz. Cada uno de ellos puede a su vez contener un listado de esos objetos, o ser el último de esa rama.
  • Decorator: Permite añadir funcionalidad extra a un objeto (de forma dinámica o estática) sin modificar el comportamiento del resto de objetos del mismo tipo.
  • Facade: Una facade (o fachada) es un objeto que crea una interfaz simplificada para tratar con otra parte del código más compleja, de tal forma que simplifica y aísla su uso. Un ejemplo podría ser crear una fachada para tratar con una clase de una librería externa.
  • Flyweight: Una gran cantidad de objetos comparte un mismo objeto con propiedades comunes con el fin de ahorrar memoria.
  • Proxy: Es una clase que funciona como interfaz hacia cualquier otra cosa: una conexión a Internet, un archivo en disco o cualquier otro recurso que sea costoso o imposible de duplicar.

 

Los patrones de comportamiento

En este último grupo se encuentran la mayoría de los patrones, y se usan para gestionar algoritmos, relaciones y responsabilidades entre objetos.

Los patrones de comportamiento gestionan algoritmos, relaciones y responsabilidades entre objetos. 

Los patrones de comportamiento son:

  • Command: Son objetos que encapsulan una acción y los parámetros que necesitan para ejecutarse.
  • Chain of responsibility: se evita acoplar al emisor y receptor de una petición dando la posibilidad a varios receptores de consumirlo. Cada receptor tiene la opción de consumir esa petición o pasárselo al siguiente dentro de la cadena.
  • Interpreter: Define una representación para una gramática así como el mecanismo para evaluarla. El árbol de sintaxis del lenguaje se suele modelar mediante el patrón Composite.
  • Iterator: Se utiliza para poder movernos por los elementos de un conjunto de forma secuencial sin necesidad de exponer su implementación específica.
  • Mediator: Objeto que encapsula cómo otro conjunto de objetos interactúan y se comunican entre sí.
  • Memento: Este patrón otorga la capacidad de restaurar un objeto a un estado anterior
  • Observer: Los objetos son capaces de suscribirse a una serie de eventos que otro objetivo va a emitir, y serán avisados cuando esto ocurra.

Conclusiones


En programación no tenemos que inventar la rueda ni descubrir el agua tibia, hay montón de soluciones  a problemáticas que han sido probadas y testeadas con éxito, por lo que, si tenemos duda sobre algún paradigma o problema en programación solo tenemos que consultar fuentes confiables, pues probablemente otros programadores más experimentados ya se han encontrado con la misma situación y posiblemente hayan escrito sobre el tema.

Sin embargo, aún quedan otras interrogantes que no hemos resuelto por completo en este articulo.


Qué sigue?

En el próximo articulo, estaremos hablando sobre las ventajas de implementar patrones de diseño, por qué son requeridos, y algunos principios fundamentales de desarrollo de software, que todo programador debe conocer.

Anuncios

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