2.4.2. Lenguajes

Alexander resolvió el problema de la selección de un patrón organizando sus patrones en lo que denominó un lenguaje de patrones. Este lenguaje tiene un vocabulario, que son los patrones en sí, y una gramática, que son las relaciones existentes entre los patrones. Así se forma una red donde cada patrón depende de los patrones de menor escala que contiene y de los patrones de mayor escala donde está contenido. Por lo tanto, un lenguaje es una colección, que tiene una cohesión que revela las estructuras y las relaciones de sus componentes para cumplir un objetivo compartido, facilitando una solución detallada a un problema de diseño de gran escala cuyo propósito es el de guiar e informar al diseñador según atraviesa las relaciones de uso desde los patrones más generales a los más específicos (Coplien, 1998).

En la figura 2.4.2.a puede verse parte de un lenguaje de patrones para el diseño de aplicaciones hipermedia (Montero, 2005) donde los patrones son organizados de mayor a menor nivel de abstracción (lectura de los patrones de arriba abajo en la figura), siendo el patrón raíz y el más general [A] Hypermedia Application y cuyos enlaces representan tres tipos diferentes de relación estructural entre ellos: composición (X utiliza a Y para su solución), asociación (X sugiere un nuevo problema que es tratado por Y) y especialización (X trata con una especialización del problema que aborda Y).

Figura 2.4.2.a. Fragmento del mapa de un lenguaje para el diseño de aplicaciones hipermedia (Montero, 2005)

Ejemplo de lenguaje para el diseño de aplicaciones hipermedia donde se describen tres tipos de relaciones: la composición, la asociación y la especialización.

En la figura 2.4.2.b encontramos un mapa de los patrones que conforman un lenguaje para escribir patrones de diseño (Meszaros y Doble, 1996). Este lenguaje captura las mejores prácticas para la escritura de patrones. Sus patrones fueron obtenidos a partir de la experiencia de los revisores de la conferencia más importante de patrones, conocida como PLOP (Pattern Languages Of Programs). Por lo tanto, este lenguaje guía a los potenciales escritores de patrones sobre cómo capturar una experiencia en la resolución de un problema repetitivo de su dominio de diseño para compartirlo con otros.

Figura 2.4.2.b. Mapa de los patrones que conforman un lenguaje para escribir patrones de diseño (Meszaros y Doble, 1996)

Esquema de los diferentes patrones. Está organizado en dos secciones, patrones y lenguaje de patrones. En los patrones se encuentran las acciones correctas referentes a la estructura de patrones, nomenclatura y referencias y creación de patrones comprensibles. Por último las acciones referentes a la estructura correcta de un lenguaje de patrones.

Los patrones son agrupados en cinco secciones nombradas de la A a la E:

  • Sección A: Asignación del contexto, introduce el concepto de “Patrón” (una solución a un problema en un contexto) y de “Lenguaje de Patrones” (colecciones de patrones que están relacionados para resolver el mismo problema o parte de una solución más grande, fraccionando el problema) para que podamos decidir hacia qué parte del lenguaje nos queremos dirigir.
  • Sección B: Estructura del patrón, contiene patrones que describen el contenido y la estructura individual de los patrones, tanto si son individuales o forman parte de un lenguaje de patrones.
  • Sección C: Nombrar y referenciar, contiene patrones que describen técnicas sobre cómo dar un nombre a los patrones e incluir referencias a otros patrones dentro del propio patrón.
  • Sección D: Hacer los patrones entendibles, contiene patrones que capturan técnicas para hacer que los patrones y lenguajes de patrones sean más fácil de leer, entender y aplicar.
  • Sección E: Estructura del Lenguaje, contiene patrones que describen el contenido y estructura de los lenguajes de patrones.

A la hora de utilizar un lenguaje de patrones, en la terminología de Alexander et al. (1977), el diseñador tendría que atravesar el lenguaje de patrones para generar un diseño concreto. Para ello, propuso los siguientes pasos para llevar a cabo la selección del conjunto de patrones que resuelven un determinado problema :

  1. Elegir el patrón que mejor describe el alcance global del proyecto.
  2. Ir al final del patrón, donde se referencian los patrones de menor escala que soportan ese patrón, y hacer una lista con los que potencialmente se podrían aplicar al proyecto.
  3. Para cada patrón seleccionado en el paso 2, repetir el paso anterior y también examinar los patrones de mayor escala que aparecen al comienzo de cada patrón, añadiendo todos los que sean relevantes a la lista.
  4. Repetir los pasos 2 y 3 hasta conseguir una lista de patrones.
  5. Ajustar la lista de patrones añadiendo material propio, modificando los patrones existentes para que sean más relevantes a la situación actual o creando nuevos patrones.

Siguiendo con el lenguaje de Meszaros y Doble (1996), y siendo la primera vez que nos enfrentamos a la escritura de un patrón, nuestro punto de partida sería el patrón Pattern de la sección A. Este patrón nos propone que capturemos tanto el problema como la solución, así como las razones por las que esa solución es aplicable. Para lograrlo deberíamos aplicar el patrón Mandatory Elements Present.  Por lo tanto, nuestro siguiente paso es ir a ese patrón y leer el problema y las razones por las cuales deberíamos aplicarlo y, si se ajusta a nuestras necesidades, leer la solución. En este caso, el patrón nos presenta cuál es la información necesaria que tiene que cubrir un patrón. Para ello, nos sugiere una serie de campos que están explicados en los patrones: Evocative Pattern Name, Context-Free Problem, Solution Clearly Related to Forces, Visible Forces. De manera iterativa iríamos a estos patrones, leeríamos el problema que nos plantea y si nos proponen otros patrones, los añadiríamos. Este proceso termina cuando no hay más patrones que incluir para resolver nuestro problema inicial o los que nos aconsejan están fuera del alcance de nuestro problema. De esta forma, el diseñador navega por el lenguaje de patrones para solucionar un problema complejo aplicando soluciones de manera paulatina.

En general, la estructura de un lenguaje de patrones tendría la forma de un grafo dirigido, generalmente con pocos ciclos, donde los nodos representan patrones y los enlaces las relaciones entre patrones. Un patrón inicial en la raíz del grafo esboza la solución general que proporciona el lenguaje al problema de gran escala que está abordando. Este patrón está relacionado con otros patrones de menor escala, que a su vez proporcionan soluciones, exponiendo más subproblemas que usan patrones de menor escala para resolverlos, como puede verse en la figura en la figura 2.4.2.a. En la ingeniería del software todavía no se ha llegado a la riqueza lingüística expresada por el lenguaje de patrones de Alexander, hablando en términos de patrones, aunque ha habido varias aproximaciones en diferentes dominios.

Además, para ayudar a los usuarios a hacer frente a las dificultades de entender cuándo y cómo usar los patrones, actualmente se están proponiendo especificaciones más formales. Estas especificaciones aportan tanto una descripción semántica bien definida como un modelo de razonamiento, con el objetivo de complementar la descripción textual con la que son descritos los patrones y así permitir el desarrollo de herramientas software para incorporar sistemáticamente patrones en el diseño de sistemas (Lucrédio et al., 2003), verificar su presencia (Albin-Amiot y Guéhéneuc, 2001), o encontrar los más adecuados a un determinado problema (Gomes et al., 2002).


retroceder avanzar