alexandre

Page 1

Prof. Alexandre Bernardes


Introdução  Conhecimento e as lições aprendidas por outros desenvolvedores que tiveram o mesmo problema de design e sobreviveram.  Conhecer os padrões de projetos e depois avaliar os locais que possam ser aplicados.

 Em vez da reutilização de código, com os padrões você obtém a reutilização de experiência.

2


Exemplo:  Um jogo de simulação de lago com patos de grande sucesso SimUDuck.  O jogo pode mostrar uma grande variedade de espécies de pato nadando e produzindo sons.

3


A partir de técnicas OO padrão, criaram: Duck quack() swim() display() //outros métodos parecidos com duck…

MallardDuck display() { //parece um pato bravo }

RedheadDuck display() { //parece um cabeça-vermelha}

Mas agora precisamos dos patos para voar

4


Mas agora precisamos dos patos para VOAR: Duck quack() swim() display() fly() //outros métodos parecidos com duck…

MallardDuck display() { //parece um pato bravo }

RedheadDuck display() { //parece um cabeça-vermelha}

Problema… 5 Agora patos de borracha também podem voar….


Ao colocar fly() na superclasse, ele deu capacidade de voar a TODOS os patos, incluindo os que não deveriam voar. Duck quack() swim() display() fly() //outros métodos parecidos com duck…

MallardDuck display() { //parece um pato bravo }

RedheadDuck

RubberDuck

display() { //parece um cabeça-vermelha}

quack() { //substituído por Squeak } fly(){ //substituir para fazer nada} display() { //parece um pato de borracha}

Patos de borracha não grasnam, então quack() é substituído por Squeak (guincho).

6


7 Desvantagem do uso de heranรงa para produzir o comportamento do pato.


Mudanças vão ocorrer constantemente no projeto Outra solução

O que acharam? 8


 Péssima ideia.

 Duplicação de código.  Pois terá que fazer alteração no comportamento vôo de todas as 48 subclasses de vôo de Duck.

No desenvolvimento do Software haverá constantemente….

ALTERAÇÕES. 9


Quais motivos podem causar mudanรงas?

10


O que fazer agora?  Princípio de Projeto.

Identifique os aspectos de seu aplicativo que variam e separe-os do que permanece igual

 Então, pegue o que pode variar e “encapsule” para que isso não afete o resto de seu código.

11


Separar o que muda do que fica igual  Esse conceito simples forma a base de quase todos

os padrões de projetos.  Todos os padrões fornecem uma maneira de deixar

que alguma parte de um sistema varie independentemente de todas as outras partes.

12


Separando o que muda do que fica igual  Problemas de alteração estão nos métodos fly() e quack() que variam entre os patos.  Separar esses comportamentos da classe Duck e criar um novo conjunto de classes.

13


Separando o que muda do que fica igual

14


Separando o que muda do que fica igual  Os comportamentos de Duck ficarão em uma classe separada.  Assim, as classes de Duck não vão precisar conhecer nenhum detalhe de implementação para seus comportamentos.

15


Separando o que muda do que fica igual  Será criada uma interface para representar cada comportamento – por exemplo, Flybehavior e QuackBehavior.  E cada implementação de um comportamento irá implementar uma dessas interfaces.  Exemplo:

16


Separando o que muda do que fica igual  Dessa forma, as subclasses Duck irão usar um

comportamento representado por uma interface (FlyBehavior e QuackBehavior).  A implementação real do comportamento não fique

presa na subclasse Duck.

17


18


Exemplo simples – para melhor entendimento.

19


20


Com este Projeto:  Outros tipos de objetos podem reutilizar nossos

comportamentos de voar e grasnar porque esses comportamentos não são mais escondidos.  Pode-se adicionar novos comportamentos sem modificar nenhuma de nossas classes de comportamento existentes ou,  Ou trocar nenhuma classe Duck que utiliza comportamentos de vôo.

Então obtemos o benefício da reutilização sem toda a bagagem que vem com a herança. 21


Perguntas

P: Usando nosso projeto, o que voc锚 faria se precisasse adicionar um v么o de foguete ao aplicativo SimUPato? R: Criaria uma nova classe FlyRocketPowered que implementasse a interface FlyBehavior.

22



Integrando o comportamento de Duck 1º  Adicionar duas variáveis de instância à classe Duck chamadas flyBehavior e quackBehavior.

24


Integrando o comportamento de Duck 2º  Implementar o método performQuack():

Nessa parte do código, não importa com o tipo do objeto, só deseja-se saber se ele sabe grasnar (quack()). 25


Integrando o comportamento de Duck 3º  Especificar comos as variáveis de instância flyBehavior e quackBehavior são definidas:

26



Implementado o MiniDucksSimulator

28


Implementado o MiniDucksSimulator

29


Implementado o MiniDucksSimulator

30


Implementado o MiniDucksSimulator

31


Implementado o MiniDucksSimulator

32



Configurando o comportamento de forma dinâmica  1º  Adicionar dois métodos novos à classe:

34


Configurando o comportamento de forma dinâmica  2º  Criar um novo tipo Duck (ModelDuck.java).

35


Configurando o comportamento de forma dinâmica  3º  Criar um novo tipo FlyBehavior (FlyRocketPowered.java)

36


Configurando o comportamento de forma dinâmica  4º Alterar a classe de teste (principal e ativar o ModelDuck para foguete.

public class MiniDuckSimulator{ public static void main(String[] args) { Duck mallard = new MallardDuck(); mallard.performQuack(); mallard.performFly(); Duck model = new ModelDuck(); model.performFly(); model.setFlyBehavior(new FlyRocketPowered()); model.performFly();

} } 37


Vis達o Geral do Projeto

38


Últimas Observações  Cada pato tem um FlyBehavior e um QuackBehavior aos quais delega as capacidades de voar e de grasnar.

 Ao unir as composição.

duas

classes

assim,

está

usando

Princípio de projeto • Dar prioridade à composição

39


Princípio de Projeto  Usar composição dá muito mais flexibilidade.  Encapsula uma família de algoritmos em seu próprio conjunto de classes.  Além disso, permite alterar o comportamento no tempo de execução desde que o objeto com o qual você estiver compondo implemente a interface de comportamento.

40


Este foi o primeiro padrão de Projeto  Padrão STRATEGY. • Define uma família de Algoritmos, encapsula cada um dele e os torna intercambiáveis. • A estratégia deixa o algoritmo variar independentemente dos clientes que o utilizam.

41


Qual a diferenรงa dos dois pedidos?

Vocabulรกrio Compartilhado!

42


O poder de um vocabulário de padrão compartilhado.  Os vocabulários EFICAZES.

de

padrão

compartilhado

são

 Os padrões permitem dizer mais com menos.  Falar com padrões permite que você permaneça “no projeto” por mais tempo.

 Vocabulários compartilhados podem turbinar sua equipe de desenvolvimento.

43



Exercício

45


46



Exemplo: Estação Meteorológica baseada na Internet de próxima geração.  A estação meteorológica será baseada em nosso objeto

WeatherData, que monitora condições atuais do tempo (temperatura, umidade e pressão barométrica).  Deseja-se criar um aplicativo que fornecesse inicialmente três elementos de exibição: Condições atuais, estatísticas meteorológicas e uma simples previsão, todos atualizados em tempo real à medida que o objeto WeatherData adquirir as medições mais recentes.  Criar uma API para que outros desenvolvedores possam escrever seus próprios visores meteorológicos e os conectem. 48


Vis達o geral do aplicativo Weather Monitoring

49


Desempacotando a classe Weather Data

50


Tarefa a ser realizada

51


Tarefa a ser realizada

52


Primeira implementação – Será que é bom?

53


Com base em nossa primeira implementação, quais das seguintes opções se aplicam?

 

  54


55


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.


Padrão Observer Possui:  Subject (Sujeitos)  Observers (Observadores)  O sujeito e os observadores definem a relação um-para-muitos.  Os observadores dependem do sujeito de modo que quando o

estado sujeito for alterado os observadores são avisados.  Dependendo do estilo de notificação, o observador também pode ser atualizado com novos valores.

57


58


Conhecendo o Padr達o Observer

59


Conhecendo o Padr達o Observer

60


Conhecendo o Padr達o Observer

61


Conhecendo o Padr達o Observer

62


Conhecendo o Padr達o Observer

63


Conhecendo o Padr達o Observer

64


Conhecendo o Padr達o Observer

65



67


68



70


71


72


73


74


75


Bibliografia  SIERRA, K. et al. Use a Cabeça! Padrões de Projetos. 2 ed. Alta Books: Rio de Janeiro, 2009.

76


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.