You are on page 1of 2

1

Patrn Observer (Agosto 2011)


Manuel Tenorio, <091004>.
implementar la interfaz Observer y por lo tanto redefinir el mtodo update() III. EXPLICACIN. Este patrn tambin se conoce como el patrn de publicacin-inscripcin, el objeto de datos, llammoslo "Sujeto" a partir de ahora, contiene atributos mediante los cuales cualquier objeto observador o vista se puede suscribir a l pasndole una referencia a s mismo. El Sujeto mantiene as una lista de las referencias a sus observadores. Los observadores a su vez estn obligados a implementar unos mtodos determinados mediante los cuales el Sujeto es capaz de notificar a sus observadores "suscritos" los cambios que sufre para que todos ellos tengan la oportunidad de refrescar el contenido representado. De manera que cuando se produce un cambio en el Sujeto, ejecutado, por ejemplo, por alguno de los observadores, el objeto de datos puede recorrer la lista de observadores avisando a cada uno.

patrn Observador (en ingls: Observer) tambin conocido como "spider" define una dependencia del tipo uno-a-muchos entre objetos, de manera que cuando uno de los objetos cambia su estado, el observador se encarga de notificar este cambio a todos los otros dependientes. El objetivo de este patrn es desacoplar la clase de los objetos clientes del objeto, aumentando la modularidad del lenguaje, as como evitar bucles de actualizacin (espera activa o polling). El patrn Observador es un patrn fcil de entender, y fcil de ver cuando se necesita. Est clasificado como un patrn de comportamiento.
L

I. INTRODUCCIN.

Fig. 1. UML del patrn Observer.

II.CONTEXTO DE APLICACIN. El contexto de este patrn es cuando tenemos varios objetos observadores y un objeto observado por los observadores. Los observadores necesitan saber cundo se produce un cambio en el objeto observado. El primer planteamiento que se puede pensar, es que haya un proceso/thread/tarea/ que se encargara de que los observadores vayan haciendo peticiones peridicamente el estado del objeto observado, para as detectar cuando sucede el cambio. El problema surge cuando el intervalo entre peticin es muy corto, o hay demasiados objetos observadores haciendo peticiones al objeto observado, o es necesario que el observador sea notificado inmediatamente despus del cambio del objeto observado. Este patrn suele observarse en los frameworks de interfaces grficas orientados a objetos, en los que la forma de capturar los eventos es suscribir 'listeners' a los objetos que pueden disparar eventos. En Java se puede heredar la funcionalidad del patrn Observer de la clase Observable y los observadores pueden

Fig. 1 Diagrama de secuencia del patron Observer.

IV. PARTICIPANTES DEL PATRN. Sujeto: Conoce a sus observadores, Proporciona una Interfaz para que se suscriban los objetos Observador. Observador: Define una interfaz para actualizar los objetos que deben ser notificados de cambios en el objeto Sujeto. SujetoConcreto: Guarda el estado de inters para los objetos ConcreteObserver, enva una notificacin a sus observadores cuando cambia su estado. ObservadorConcreto: Mantiene una referencia a un objeto SujetoConcreto, Guarda el estado que debera permanecer sincronizado con el objeto observado, Implementa la interfaz Observador para mantener su estado consistente con el objeto observado. Java proporciona una clase java.util.Observable con el comportamiento de la clase Subject y una interface java.util.Observer que describe un mtodo update() con la logica a ejecutar ante un cambio de estado. Bajando al lenguaje de programacin, se puede conseguir esta relacin con una interface y una clase abstracta: A. Interface Observador: notificar(): los objetos observadores necesitan una funcin, que ser la ejecutada desde el objeto Observado cuando se produzca un cambio.

2 B. Clase abstracta Observado: observadores: lista de los objetos Observadores aadidos. registrarObservador(Observador): aade el objeto Observador a la lista de objetos a notificar cuando se produzca el cambio. borrarObservador(Observador): elimina el objeto Observador de la lista. notificarObservadores(): recorre los objetos Observadores de la lista, para llamarles a su funcin notificar(). El resultado final, es que los objetos observadores no hacen ninguna peticin mientras nada cambie. Cuando se produce un cambio, son notificados de que se ha producido el cambio. V. IMPLEMENTACIN DEL PATRN OBSERVER. La solucin que se aplicara usando el patrn Observador, trata de que los objetos observadores se aadan a una lista de objetos, y el objeto observado notificar el cambio a todos los objetos de esta lista cuando se produzca el cambio. De esta manera, se produce un cambio de papeles: el observador que tena la tarea de estar pendiente del cambio, ahora esta a la espera de que el observador le avise. Vamos a intentar detallarlo: 1. el objeto observador necesita ser notificado de los cambios de un objeto observado. 2. el objeto observador se aade a la lista de objetos a notificar, de ese objeto observado. 3. en el objeto observado se produce un cambio. 4. el objeto observado recorre la lista de objetos observadores apuntados, y les va notificando el cambio. VI. CASOS DE USO DEL PATRN OBSERVER. A. Manejo de bolsa de valores. Constantemente los valores de las acciones estn cambiando, por lo cual los corredores de bolsa necesitan estar al tanto de que es lo que sucede, por lo tanto el patrn Observer nos da la facilidad de poder estar enterados de que es lo que sucede constantemente con el transcurrir del da. B. Reloj El tiempo pasa y pasa, pero como podemos saber qu hora es exactamente; si poseemos un reloj digital estamos en contacto con el patrn observer, ya que un segundero constantemente est notificando a una pantalla en donde podemos ver la informacin, luego de que el segundero cuenta los 60 segundos, le informa al minutero que tiene que cambiar, y a su vez el minutero informa a los 59 minutos, que hay que cambiar de hora. C. Control del clima. El da a da nos presenta retos, ya sea lluvia, tormentas o un agradable da caluroso, los medidores de temperatura envan seales a servidores los cuales estn atentos a cualquier seal que los medidores enven, una vez los servidores son notificados, envan la informacin a cuanto observador est conectado a l, ya sea un dispositivo mvil o una gran pancarta en un terminal areo. VII. CONCLUSIN En lo visto en clase, hemos descubierto 2 tipos de patrones, uno de creacin y uno de comportamiento. El patrn Singleton nos da la pauta para poder crear instancias nicas de un objeto determinado y restringir la creacin de objetos pertenecientes a una clase, es decir, nos garantiza en una correcta implementacin que una clase tenga una sola instancia y poder acceder a ella desde un punto conocido. Por otro lado tenemos el patrn Observer, el cual nos permite saber el cambio de estado de un objeto, el cual nos puede ser muy til para la aplicacin en ciertos casos, por ejemplo el mas mencionado en la web, es el caso de un reloj, el cual un objeto llamado segundero cambia de estado constantemente y nos vamos a poder dar cuenta del estado ya sea en una GUI o segn la aplicacin que necesitemos. Para el lenguaje de programacin que estamos manejando, encontramos unas libreras que ya vienen incluidas, las cuales contienen mtodos de Observer y Listener. REFERENCIAS [1] [2] [3] [4] [6] [7]
http://patronesdediseno.blogspot.com/2009/05/patron-observer.html. http://www.proactiva-calidad.com/java/patrones/observador.html. http://otroblogmas.com/patrones-de-diseno-patron-observador/. http://www-lsi.die.upm.es/~carreras/ISSE/patrones_diseno.x2.pdf. [5] http://mit.ocw.universia.net/6.170/6.170/f01/pdf/lecture-13.pdf. http://msdn.microsoft.com/es-es/library/bb972192.aspx. http://siul02.si.ehu.es/~alfredo/iso/06Patrones.pdf. [8] http://es.scribd.com/doc/17767790/Patrones-de-DisenoRecopilacion. [9] http://includeblogh.blogspot.com/2010/09/ejemplo-de-uso-delpatron-observer.html.

Primer autor (Manuel Francisco Tenorio Snchez 091004) Fundamentos de Construccin de Software II.

You might also like