5. Motivación

Hay una leve diferencia entre una descripción y una motivación.

Si lo observamos desde el punto de vista de un periodista real, el periodista debería limitarse a describir aquellos hechos diarios que suceden a su alrededor.  Solo ocurren, y él, como testigo, escoge las partes importantes del entorno para que los demás puedan verlo tal y como él cree que lo esta observando.  Es solo observar y describir, procurando no interpretar.

La motivación es algo intencional.  El mismo periodista podría ver algún detalle que le llame la atención, y entonces comenzaría a investigar, apartándose de la esfera de la simple observación.  Ya no es tan solo mirar y escoger aspectos clave, ahora es enfrentarse con algunos de estos aspectos clave y orientar el esfuerzo de la descripción.  De este momento en adelante, el resultado no puede ser imparcial.

La motivación es una descripción totalmente parcializada del mundo.

Y esto es lógico, porque para que estemos escribiendo la especificación de un patrón, necesitamos haber abandonado la etapa de la observación, y hemos tenido que orientar nuestro enfoque hacia un área particular del entorno.  Estamos buscando hacia una sola dirección para obtener un resultado específico.

Los patrones requieren de un apartado de motivación, el cual permitirá que un lector distinto que el autor comprenda el porqué de haber creado el patrón.  Este apartado ofrece muchos detalles sobre el problema, y será de gran ayuda en el momento en que se busque aplicar el patrón a una solución particular; es el complemento ideal del título y la clasificación.

Tiene que utilizarse cualquier soporte mnemónico, sean dibujos, gráficos, fotografías, etc., para que la idea completa del patrón, de lo que es, de lo que motivó su creación, sean entendibles y no den pie a malentendidos.

El patrón, debe tener una identidad suficientemente fuerte para sobrevivir.  Muchas veces, en el momento de crear la motivación, se determina que el patrón no tiene su razón de ser, o que estamos describiendo un patrón que ya existe; en este último caso, podría ser necesario tan solo ajustar el patrón existente para que cumpla también nuestros propósitos actuales.


Veamos la motivación del patrón Observador según Gamma97 (en traducción libre).

Un efecto secundario de particionar un sistema en una colección de clases cooperantes es la necesidad de mantener consistencia entre los objetos relaciones.  No se pretende ofrecer consistencia haciendo las clases altamente acopladas, ya que esto reduce su reusabilidad.

Por ejemplo, muchos ambientes de desarrollo para crear interfaces de usuario, separan los aspectos de presentación de la interfaz de usuario, de los datos de aplicación subyacentes.  Las clases que definen los datos de la aplicación y las presentaciones pueden ser reutilizadas de manera independiente.  Ellas pueden funcionar juntas, también.  Tanto un objeto hoja electrónica como un objeto diagrama de barras pueden representar información en el mismo objeto de aplicación de datos utilizando representaciones distintas.  La hoja electrónica y el diagrama de barras no conocen nada uno del otro, permitiendo reutilizar tan solo el que se necesita.  Pero se comportan como lo necesitan.  Cuando el usuario cambia la información en la hoja electrónica, el diagrama de barras refleja los cambios de manera inmediata, y viceversa.

[ aquí va un dibujito donde varias ventanas, una con una hoja electrónica, otra con un diagrama de barras y otra con un diagrama de pie, ven los datos numéricos de tres valores porcentuales]
Este comportamiento implica que la hoja electrónica y el diagrama de barras son dependientes del objeto de datos, y que por lo tanto deben ser notificados de cualquier cambio en su estado.  Y no existe una razón para limitar la cantidad de objetos dependientes a dos; puede existir cualquier cantidad de interfaces de usuario distintos hacia los mismos datos.

El patrón Observador describe como establecer esas relaciones.  Los objetos clave en este patrón son sujeto y observador.  Un sujeto puede tener cualquier cantidad de observadores dependientes.  Todos los observadores son notificados cuando un sujeto relacionado cambia su estado.  En respuesta, cada observador puede consultar al sujeto para sincronizar su estado con el estado del sujeto.

Este tipo de interacción se conoce también como publicar-subscribir.  El sujeto es quien publica las notificaciones.  Él envía esas notificaciones sin conocer quienes son sus observadores.  Cualquier cantidad de observadores pueden subscribirse para recibir notificaciones.


1