martes, 16 de junio de 2015

Patrones de diseño 1: Concepto e introducción

¡Hola de nuevo internauta!,

     Hace tiempo que no hablamos sobre ingeniería del software así que debemos de subsanar esto. En esta entrada hablaremos sobre lo qué es un patrón de diseño e introduciremos algunos conceptos dejando los patrones propiamente dichos, para futuras entradas.

¡Así que al meollo!.

1. ¿Qué es un patrón de diseño?

Curiosamente, y aunque hablemos de patrones de diseño en el software, debemos hablar un poco de arquitectura. ¿Cómo que arquitectura?, ¡pero esto es un blog de informática y...!. Sí, sí, un poco de clama por favor, no os desesperéis que es la entrada del artículo.

A ver por donde iba, a sí, la arquitectura...

Un poco de historia (te la puedes saltar si queires, pero luego no te quejes si comentes el mismo error dos veces)

Nota: Esta parte está sacada de la wikipedia.

Allá por el 1979, creo, un arquitecto llamado Cristopher Alexander , escribió el libro The Timeless Way of Building donde proponía una serie de patrones para la construcción de edificios con una calidad superior, que digo superior, ¡suprema!, ¡una en la cual los antiguos dioses griegos bajarían de su olimpo para llorar lágrimas de alegría y festejarlo con una barra libre de ambrosía!. Así que dicho arquitecto y sus colegas de profesión se pusieron manos a la obra, creando un volumen llamado A Pattern Language donde se define un patrón como una solución correcta para un problema dado dentro de un contexto. ¿Y esto que tiene que ver con el mundo computacional?, pu es areglón seguido lo veremos, ¡o debería de decir a párrafo seguido!.

Allá por el 1987 Ward Cunningham y Kent Beck un poco hartos de la mala transmisión de conocimientos que se daba en el orientación a objetos, y por haber leído o que leyeron más adelante a nuestro conocidísimo Alexander (el arquitecto), se dieron cuenta que las propuestas de patrones para conseguir una buena arquitectura podían aplicarse a la arquitectura de orientación a objetos (salvando diferencias, claro). Así que sin más, se pusieron manos a la obra, literalmente. Su esfuerzo se condensó en el libro publicando un artículo en OOPSLA-87 titulado  Using Pattern Languages for OO Programs , aunque no fué hasta la década de 1990 cuando empezaron a utilizarse realmente gracias al libro Design Patrons escrito por el Gang of Four.

2. Finalidad de los patrones de diseño

Un patrón de diseño es una especie de esqueleto común que cada diseñador adapta a su aplicación. Posee varias finalidades:

  • Proporcionar catálogos reutilizables de soluciones ya probadas y que sean buenas: Por eso los patrones están siempre evolucionando o creándose, lo que hoy se usa puede que en el futuro no sirva bien sea por la tecnología a aplicar, bien porque se ha encontrado un método mejor. De esta manera evitamos la búsqueda de soluciones a problemas ya resueltos con anterioridad.
  • Formalizar un vocabulario común: Así todo el mundo sabe de lo que habla y el conocimiento puede transmitirse de manera global. Esto también se aplica al nombre de los patrones, así si hablo del patrón MVC, todo el mundo sabe a que me refiero.
  • Estandarizar el diseño: Permite que si Pepe coge un patrón de Federico, Pepe pueda entender dicho patrón, pues está desarrollado de manera estándar. Aunque en el patrón de Federico haya cosas de cosecha propia seguirá una estandarización.
Como parte negativa podemos indicar que no favorece la creatividad pero hay que tener en cuenta que lo que se busca no es ser creativo, sino solucionar problemas de manera rápida y eficaz.

3. Tipos de patrones

Los patrones en la actualidad se dividen en:

  • Arquitecturales: Expresan un paradigma fundamental para estructurar un sistema de software. Poseen un conjunto de subsistemas predefinidos para organizar las reglas entre ellos. Ejemplos:
    • Jerarquía de capas.
    • Cliente/Servidor.
  • De diseño: Expresan esquemas básicos para definir estructuras de diseños con las que construir subsistemas y componentes que darán lugar a los sistemas de software. Ejemplos:
    • Proxies.
    • Factorías.
  • Elementales o dialectos: Son aquellos creados para un lenguaje de programación o entorno específico. Para ello describen cómo implementar componentes particulares de un patrón. Ejemplos:
    • Modularidad
    • Encapsulación.
    • Acciones y eventos.

Y hasta aquí la entrada de hoy, espero no haberos aburrido. ¡Gracias por leerme!.

No hay comentarios:

Publicar un comentario