Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 21-01-2006
adpa adpa is offline
Miembro
 
Registrado: dic 2005
Posts: 22
Poder: 0
adpa Va por buen camino
Patrón observador, attach, notify,update ...

Hola:

Estoy realizando un programa y me han dado el Diagrama de Colaboraciones del patrón observador. Me he encontrado con una serie de llamadas attach,dettach,notify y update que no se como implementar ni se lo que deben hacer exactamente.

Alguien me lo puede explicar

Gracias
Responder Con Cita
  #2  
Antiguo 21-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
El patrón del observador consiste de un sujeto a observar (subject) y varios objetos que lo observan (observers). La idea es que cada cambio en el sujeto se notifica a los observadores que tenga conectados. Un ejemplo lo da un DataSet. Cada cambio en algún registro, se notifica a todos los controles dbaware conectados a él através de un DataSource

Como en todo patrón de diseño, puede haber muchas formas de implementarlo, pero la idea básica sería así:

Código Delphi [-]
type
  TObserver = class;

  TSubject = class
  public
    procedure Attach(Observer: TObserver); virtual; abstract;
    procedure Detach(Observer: TObserver); virtual; abstract;

    procedure Notify; virtual; abstract;
  end;

  TObserver = class
  public
    procedure Update(Subject: TSubject); virtual; abstract;
  end;

La idea es que ante algún cambio en SUBJECT que haya que informar, el método Notify recorre todos los OBSERVER conectados llamando a su método Update. Los métodos Attach y Detach están pensados para conecar un observador o desconectarlo.

En la implementación específica que hagas, TSubject debe mantener una lista interna de sus observadores, por ejemplo con un TObjectList, de manera que el método Notify se vería así:

Código Delphi [-]
procedure TSubject.Notify;
var
  I: Integer;

begin
  for I := 0 to FObservers.Count - 1 do
    TObserver(FObservers[i]).Update(Self);
end;

Puede haber muchos tipos de observadores, el único requisito sería que desciendan de TObserver e implementen el método Update. En este método, cada descendiente específico de TObsrver, hará lo que deba hacer usando la información proveniente del parámetro SUBJECT que se le pasa.

Todo esto es muy parecido a la forma en que Delphi maneja los eventos. Un Form, por ejemplo, es un observador de un TEdit que tenga dentro mediante el evento OnChange del TEdit. Cuando hay un cambio en el TEdit, se llama al evento OnChange, en caso de haber uno asignado.

La diferencia es que en el caso de eventos sólo puede haber un observador mientras que en el patrón general puede haber varios observadores, cada uno reaccionando de distinta manera.

// Saludos
Responder Con Cita
  #3  
Antiguo 21-01-2006
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Por cierto, si buscas en Google por "observer pattern" encontrarás no pocas referencias que explican el objetivo y delinean la implementación. Y si buscas "delphi observer pattern" encontrarás referencias del patrón específicas para Delphi.

// Saludos
Responder Con Cita
  #4  
Antiguo 21-01-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por Román
Por cierto, si buscas en Google por "observer pattern" encontrarás no pocas [más] referencias que explican el objetivo y delinean la implementación. Y si buscas "delphi observer pattern" encontrarás [también más] referencias del patrón específicas para Delphi.
Creo que es lo suyo, porque te explicaste muy bien Román.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #5  
Antiguo 21-01-2006
adpa adpa is offline
Miembro
 
Registrado: dic 2005
Posts: 22
Poder: 0
adpa Va por buen camino
Hola,

Gracias por vuestras respuestas, la verdad es que tengo algún problemilla para entender en inglés asi que os agradeceria que me pusierais un ejemplo de como declarar e impletar 3 clases con este patrón. Yo lo tengo que realizar con la clase supermercado, tienda y consumidor.

Muchas Gracias
Responder Con Cita
  #6  
Antiguo 22-01-2006
adpa adpa is offline
Miembro
 
Registrado: dic 2005
Posts: 22
Poder: 0
adpa Va por buen camino
Hola:
Adjunto el diagrama de colaboraciones para que me digais como tengo que enfocar esto. Os agradecia si me dijerais las cabeceras de las funciones.

Un Saludo, y muchas Gracias
Archivos Adjuntos
Tipo de Archivo: zip Diagrama de colaboraciones.zip (7,1 KB, 42 visitas)
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Patrón de los Informáticos. obiwuan Varios 20 10-09-2003 14:44:54


La franja horaria es GMT +2. Ahora son las 20:45:05.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi