padrões de projeto aula 4 – padrão observer. padrÃo observer como manter objetos atualizados...

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

Upload: antonio-salazar-farias

Post on 07-Apr-2016

215 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: 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

Padrões de ProjetoAula 4 – Padrão Observer

Page 2: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

PADRÃO OBSERVER

Como manter objetos atualizados quando algo importante ocorre?

2

Como permitir que os objetos decidam se querem

ser informados das mudanças em tempo de

execução?

Page 3: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

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ê.

3Massss... 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

Page 4: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

Como o padrão Observer funciona?

4

Objeto Subject

Objetos de Observer

P1

P2

P3

P4

Page 5: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

Como o padrão Observer funciona?

5

Objeto Subject

Objetos de Observer

P1

P2

P3

P4

“Me registre, quero assinar”

Page 6: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

Como o padrão Observer funciona?

6

Objeto Subject

Objetos de Observer

P1

P2

P3

P4

Page 7: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

Como o padrão Observer funciona?

7

Objeto Subject

Objetos de Observer

P1

P2

P3

P4

“Cancele minha assinatura”

Page 8: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

Como o padrão Observer funciona?

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.

Page 9: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

O diagrama de classes do padrão Observer• Pensemos no exemplo da Revistas e Assinantes

9

Page 10: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

10

Page 11: 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

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 d

e Pr

ojet

o - O

bser

ver

11

Page 12: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

Editoras e Assinantes• Mostrar implementação

12

Page 13: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

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.

13

Page 14: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

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

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!

Page 15: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

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.

15

Page 16: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

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.

16

Page 17: 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

Padr

ões d

e Pr

ojet

o - O

bser

ver

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

17