Observer
     Padrão comportamental



                                   Programação Modular
                                  Professora: Anna Izabel
                        Grupo: Alisson, Gustavo, Joanna,
                                              Luiza, Túlio
“O padrão Observer define uma dependência um-
para-muitos entre objetos para que, quando um
objeto mudar de estado, todos os seus dependentes
sejam notificados e atualizados automaticamente”.
(ROCHA, 2003).

 • Padrão muito comum, recebendo ainda os
   nomes de Dependents e Publish-Subscribe.
• Padrão comportamental
• Está na camada Model da Arquitetura MVC
Pequeno parênteses: Padrão MVC
• Tem como objetivo separar a lógica de
  negócio da lógica de apresentação,
  permitindo que possam ser desenvolvidos e
  testados separadamente.

• É um dos chamados “padrões compostos”,
  pois é a junção de três outros padrões:
Strategy Pattern
Observer Pattern
Composite Pattern
Motivação
• Um objeto que possua agregações deve permitir
  que seus elementos sejam acessados sem que
  sua estrutura interna seja exposta.
Os objetos-chave neste padrão são:

• Subject (assunto)
• Observer (observador)

  Subject pode ter um número qualquer de
  observadores dependentes.
  É o publicador de notificações.
Aplicabilidade
1. Quando uma abstração apresenta dois aspectos,
   um dependente do outro. Encapsulando estes
   aspectos em objetos separados permite que você
   os varie e reutilize de forma independente;
2. Quando uma modificação em um objeto requer
   modificação em outros, e você não sabe (em tempo
   de programação) quantos objetos precisam ser
   modificados;
3. Quando um objeto deve ser apto a notificar outros
   objetos sem saber quem são estes objetos. Em
   outras palavras, quando você os quer fracamente
   acoplados.
Exemplo
   Uma contrução onde existem vários operários;
   Uma sirene toca informando uma mudança de estado…
   O alarme da sirene é uma mensagem enviada aos observadores
    (Funcionários), que pode ser um intervalo, término do expediente, etc.
Como implementar?
• 1) Identificar os objetos que desejam ser
  notificados – OBSERVADORES
• 2) Todos devem obedecer à mesma interface
• 3) O observador deve saber o que observar. O
  observado não precisa saber quem observa.

Para isso, os observadores registram-se no
observado.
                                      Notificar varre
                                        a lista de
• -Adicionar();                       observadores
• -Remover();
• -Notificar();

• -Atualizar();
Vantagens
• Tanto observadores quando sujeitos observados
  podem ser reutilizados e ter sua interface e
  implementação alteradas sem afetar o sistema.


• O acoplamento forte é reduzido com o uso
  de interfaces e classes abstratas.
Desvantagens
• O abuso pode causar sério impacto na
  performance.    Sistemas  onde  todos
  notificam todos a cada mudança ficam
  inundados de requisições.
Referências Bibliográficas
• http://www.slideshare.net/jucindra/padres-de-
  projeto-observer

• http://www.gfsolucoes.net/trabalhos/padroes_
  de_projetos.pdf

Padrão de Projeto Observer

  • 1.
    Observer Padrão comportamental Programação Modular Professora: Anna Izabel Grupo: Alisson, Gustavo, Joanna, Luiza, Túlio
  • 2.
    “O padrão Observerdefine uma dependência um- para-muitos entre objetos para que, quando um objeto mudar de estado, todos os seus dependentes sejam notificados e atualizados automaticamente”. (ROCHA, 2003). • Padrão muito comum, recebendo ainda os nomes de Dependents e Publish-Subscribe.
  • 3.
    • Padrão comportamental •Está na camada Model da Arquitetura MVC
  • 4.
    Pequeno parênteses: PadrãoMVC • Tem como objetivo separar a lógica de negócio da lógica de apresentação, permitindo que possam ser desenvolvidos e testados separadamente. • É um dos chamados “padrões compostos”, pois é a junção de três outros padrões: Strategy Pattern Observer Pattern Composite Pattern
  • 5.
    Motivação • Um objetoque possua agregações deve permitir que seus elementos sejam acessados sem que sua estrutura interna seja exposta.
  • 6.
    Os objetos-chave nestepadrão são: • Subject (assunto) • Observer (observador) Subject pode ter um número qualquer de observadores dependentes. É o publicador de notificações.
  • 7.
    Aplicabilidade 1. Quando umaabstração apresenta dois aspectos, um dependente do outro. Encapsulando estes aspectos em objetos separados permite que você os varie e reutilize de forma independente; 2. Quando uma modificação em um objeto requer modificação em outros, e você não sabe (em tempo de programação) quantos objetos precisam ser modificados; 3. Quando um objeto deve ser apto a notificar outros objetos sem saber quem são estes objetos. Em outras palavras, quando você os quer fracamente acoplados.
  • 9.
    Exemplo  Uma contrução onde existem vários operários;  Uma sirene toca informando uma mudança de estado…  O alarme da sirene é uma mensagem enviada aos observadores (Funcionários), que pode ser um intervalo, término do expediente, etc.
  • 10.
    Como implementar? • 1)Identificar os objetos que desejam ser notificados – OBSERVADORES • 2) Todos devem obedecer à mesma interface
  • 11.
    • 3) Oobservador deve saber o que observar. O observado não precisa saber quem observa. Para isso, os observadores registram-se no observado. Notificar varre a lista de • -Adicionar(); observadores • -Remover(); • -Notificar(); • -Atualizar();
  • 16.
    Vantagens • Tanto observadoresquando sujeitos observados podem ser reutilizados e ter sua interface e implementação alteradas sem afetar o sistema. • O acoplamento forte é reduzido com o uso de interfaces e classes abstratas.
  • 17.
    Desvantagens • O abusopode causar sério impacto na performance. Sistemas onde todos notificam todos a cada mudança ficam inundados de requisições.
  • 18.
    Referências Bibliográficas • http://www.slideshare.net/jucindra/padres-de- projeto-observer • http://www.gfsolucoes.net/trabalhos/padroes_ de_projetos.pdf