A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Padrões de Projeto Aula 4 – Padrão Observer. PADRÃO OBSERVER Como manter objetos atualizados quando algo importante ocorre? Padrões de Projeto - Observer.

Apresentações semelhantes


Apresentação em tema: "Padrões de Projeto Aula 4 – Padrão Observer. PADRÃO OBSERVER Como manter objetos atualizados quando algo importante ocorre? Padrões de Projeto - Observer."— Transcrição da apresentação:

1 Padrões de Projeto Aula 4 – Padrão Observer

2 PADRÃO OBSERVER Como manter objetos atualizados quando algo importante ocorre? Padrões de Projeto - Observer 2 Como permitir que os objetos decidam se querem ser informados das mudanças em tempo de execução?

3 Como assinaturas de jornais e revistas funcionam? 1.Uma editora começa a publicar jornais; 2.Você assina o jornal de uma editora; 3.Até aqui tudo bem... você ainda é um assinante, então você continua recebendo os jornais diariamente; 4.Você recebe a seguinte notícia: 5.Você cancela a assinatura; 6.Os jornais param de ser entregues a você. Padrões de Projeto - Observer 3 Massss... Note que o fato de você ter deixado de assinar não implica que o jornal deixa de existir... Os outros assinantes continuam recebendo seus exemplares

4 Como o padrão Observer funciona? Padrões de Projeto - Observer 4 Objeto Subject Objetos de Observer P1 P2 P3 P4

5 Como o padrão Observer funciona? Padrões de Projeto - Observer 5 Objeto Subject Objetos de Observer P1 P2 P3 P4 “Me registre, quero assinar”

6 Como o padrão Observer funciona? Padrões de Projeto - Observer 6 Objeto Subject Objetos de Observer P1 P2 P3 P4

7 Como o padrão Observer funciona? Padrões de Projeto - Observer 7 Objeto Subject Objetos de Observer P1 P2 P3 P4 “Cancele minha assinatura”

8 Como o padrão Observer funciona? Padrões de Projeto - Observer 8 Objeto Subject Objetos de Observer P2 P3 P4 P1 O padrão OBSERVER define a dependência um-para-muitos entre objetos para que quando um objeto mude de estado todos os seus dependentes sejam avisados e atualizados automaticamente.

9 O diagrama de classes do padrão Observer Pensemos no exemplo da Revistas e Assinantes Padrões de Projeto - Observer 9

10 10

11 Exercício (15 min) Agora que nós temos uma ideia inicial de como funciona o padrão Observer, que tal criar um primeiro programa que utiliza este padrão? Vamos utilizar o exemplo anterior. No nosso programa nós teremos uma classe Magazine e uma classe Person. Obviamente, Magazine é o nosso subject e Person o nosso observer. Crie um programa que permita uma Magazine publicar revistas para seus assinantes. Como testar? Crie quatro objetos do tipo Pessoa, mas inicialmente apenas três deles assinarão a Editora. Faça a editora publicar um exemplar (revista). Faça a pessoa que não era assinante se tornar assinante. Publique outra revista. Cancele a assinatura de qualquer pessoa e publique a ultima revista. Padrões de Projeto - Observer 11

12 Editoras e Assinantes Mostrar implementação Padrões de Projeto - Observer 12

13 Fraco acoplamento Quando dois objetos estão levemente ligados eles interagem sem saber muita coisa um do outro. Esse fraco acoplamento torna o programa flexível para receber novas alterações. 1.A única coisa que um Subject sabe sobre um observador é que ele implementa uma certa interface; 2.Podemos adicionar novos Observers a qualquer momento; 3.Nunca precisamos modificar o Subject para adicionar novos tipos de Observers; 4.Alterações no Subject e no Observer não irão afetar um ao outro já que eles implementam interfaces. Ninguém pode quebrar o contrato. Padrões de Projeto - Observer 13

14 Modelos de notificação Push model: O Subject envia informações detalhadas das atualizações, e.g. através de argumentos Pull model: O Observer é notificado de que alguma mudança ocorreu e pega o que precisa do Subject através de getters Padrões de Projeto - Observer 14 subject observer Hey, observer, variables a, b, c and d just changed! Take all of them! subject observer Hey, observer, something just changed! Hmm.. This moment I‘m just interested in variable a! Gimme that!

15 Prática Agora nós vamos implementar o sistema de exibição de vôos que é utilizado nos tótens do aeroporto de João Pessoa. Uma das classes do sistema, fornecida pelo aeroporto Castro Pinto, é a classe FlightDataCollection e FlightData. FlightData tem os seguintes atributos: nº do vôo, empresa, horário, e um atributo que indique se o vôo está partindo ou chegando no aeroporto. FlightDataCollection tem um conjunto de FlightData. Todos os tótens devem ser atualizados em tempo real na medida em que FlightDataCollection seja atualizado com novos vôos, ou quando algum vôo tiver suas informações atualizadas. A solução deve ser expansível, isto é, outros desenvolvedores podem implementar novas configurações de display para outros tótens. Inicialmente o aeroporto precisa de dois tótens: 1.O primeiro tóten deve ficar na sala de embarque, e deve conter os horários de vôos que irão decolar, assim os passageiros se mantém atualizados de possíveis atrasos; 2.O segundo tóten deve ficar na sala de espera do desembarque, e deve conter os horários de vôos que irão aterrissar, assim as pessoas que forem buscar alguém no aeroporto também possa saber de possíveis atrasos. Pra que o resultado fique mais interessante seria legal que os painéis fossem mostrados em uma GUI. Padrões de Projeto - Observer 15

16 Prática A solução deve ser expansível, isto é, outros desenvolvedores podem implementar novas configurações de display para outros tótens. Será que sua implementação ficou expansível? Agora implemente um terceiro tipo de tóten que contém horários de embarque e desembarque. Padrões de Projeto - Observer 16

17 Referências O capítulo 2 do livro “Padrões de Projeto – Use a Cabeça!” Padrões de Projeto - Observer 17


Carregar ppt "Padrões de Projeto Aula 4 – Padrão Observer. PADRÃO OBSERVER Como manter objetos atualizados quando algo importante ocorre? Padrões de Projeto - Observer."

Apresentações semelhantes


Anúncios Google