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

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

Strategy e Template Method Professor: Hyggo Almeida.

Apresentações semelhantes


Apresentação em tema: "Strategy e Template Method Professor: Hyggo Almeida."— Transcrição da apresentação:

1 Strategy e Template Method Professor: Hyggo Almeida

2 Sistema de venda de ingressos Existe uma classe Ingresso que possui um método getPreco(); O preço muda de acordo com a idade da pessoa... e outras coisas mais... quando o ingresso foi comprado quando o ingresso foi comprado se o cliente tem carteira de estudante se o cliente tem carteira de estudante promoções-relâmpago promoções-relâmpago

3 Possíveis soluções Colocar a lógica que decide qual cálculo deve ser feito na classe Ingresso Hierarquia de classes para Ingresso Que mais? 3

4 Strategy E define o algoritmo para retornar o preço de acordo com o tipo do ingresso... 4 public double getPreço(){ switch(tipoIngresso){ case 0: return TAXA_ADICIONAL; case 1: return TAXA_DESCONTO; case 2: return TAXA_ADICIONAL; case 3: return 1.00; } return 5.00; //Preço normal }

5 Strategy Problemas??? Sempre que um cálculo de preço for alterado... a classe ingresso terá que ser alterada. Sempre que um cálculo de preço for alterado... a classe ingresso terá que ser alterada. Se uma nova promoção surgir... um novo case terá que ser adicionado!!! Alterando novamente a classe ingresso... Se uma nova promoção surgir... um novo case terá que ser adicionado!!! Alterando novamente a classe ingresso...Solução??? Padrão Strategy Padrão Strategy 5

6 Encapsular algoritmos em objetos denominados estratégias!!! 6 Ingresso > Calculavel CalcNormal CalcCrianca CalcIdoso CalcVale getPreco();

7 A limpeza: É possível adicionar facilmente novas estratégias A alteração de estratégias existentes não afeta a clase Ingresso 7 public double getPreço(){ return this.calculador.getPreco(); }

8 Strategy Intenção definir uma família de algoritmos, encapsular cada uma delas e torná-las intercambiáveis. Permite que o algoritmo varie independente dos clientes que o utilizam. definir uma família de algoritmos, encapsular cada uma delas e torná-las intercambiáveis. Permite que o algoritmo varie independente dos clientes que o utilizam.Aplicabilidade muitas classes relacionadas diferem apenas no seu comportamento; muitas classes relacionadas diferem apenas no seu comportamento; você necessita de variantes de um determinado algoritmo. você necessita de variantes de um determinado algoritmo. 8

9 Strategy Conseqüências famílias de algoritmos relacionados famílias de algoritmos relacionados uma alternativa ao uso de subclasses uma alternativa ao uso de subclasses estratégias eliminam comandos condicionais da linguagem de programação estratégias eliminam comandos condicionais da linguagem de programação possibilita escolher dinamicamente uma implementação possibilita escolher dinamicamente uma implementação os clientes precisam conhecer várias estratégias os clientes precisam conhecer várias estratégias aumento do número de objetos aumento do número de objetos 9

10 Outro exemplo: LayoutManager

11 Exemplo com Ingresso Repare que a estratégia precisa de informação do contexto E se a estratégia fosse escolher a melhor forma de cálculo dentre várias disponíveis?

12 Template Method Imaginem o projeto de um gerador de relatório... Exemplo muito simples... porém eficaz! Uma classe Relatório possui um método exibir() Este método exibe o relatório na tela O texto do relatório depende do seu tipo Mas o cabeçalho e o rodapé são sempre os mesmos Strategy e Template Method

13 Template Method 13 Strategy e Template Method RELATÓRIO TÉCNICO SóBug Softwares Empresa de Software SóBug Av. ABC, , Campina Grande, PB Tel.: ISSO MUDA!!! Vendas Compras Fornecedores Lucros Despesas... FIXO MUTÁVEL

14 Como projetar??? 14 Strategy e Template Method > RelatórioIF RelatorioVendas RelatorioCompras RelatorioLucros Teste exibir();

15 Problemas??? O cabeçalho e rodapé são iguais... não estou compartilhando código...e ainda estou duplicando O cabeçalho e rodapé são iguais... não estou compartilhando código...e ainda estou duplicando 15 Strategy e Template Method > RelatórioIF RelatorioVendas RelatorioCompras RelatorioLucros Teste exibir(); Código duplicado

16 Template Method Solução??? Template Method Template Method Define-se um esqueleto do método exibir... Define-se um esqueleto do método exibir... E define o comportamento MUTÁVEL como um método abstrato... E define o comportamento MUTÁVEL como um método abstrato Strategy e Template Method public void exibir(){ exibirCabecalho(); exibirConteudo(); exibirRodape(); }

17 17 Strategy e Template Method public void exibirCabecalho(){ System.out.println(Cabecalho); System.out.println(...);... } public void exibirRodape(){ System.out.println(Rodapé); System.out.println(...);... } public void abstract exibirConteudo();

18 Template Method Projeto com o Template Method (exibir()) 18 Strategy e Template Method > RelatorioAbstrato RelatorioVendas RelatorioCompras RelatorioLucros Teste exibir(); exibirConteudo ();

19 Template Method Intenção Definir o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses Definir o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclassesAplicabilidade para implementar as partes invariantes de um algoritmo uma só vez e deixar para as subclasses a implementação do comportamento que pode variar para implementar as partes invariantes de um algoritmo uma só vez e deixar para as subclasses a implementação do comportamento que pode variar para controlar extensões de subclasses utilizando ganchos. para controlar extensões de subclasses utilizando ganchos. 19 Strategy e Template Method

20 Template Method Conseqüências maximiza a reutilização de código maximiza a reutilização de código definição de ganchos para as subclasses definição de ganchos para as subclasses princípio de Hollywood: não nos chame... nós chamamos vocês princípio de Hollywood: não nos chame... nós chamamos vocês Alternativa ao Strategy Alternativa ao Strategy Uso freqüente... Application Frameworks Application Frameworks 20 Strategy e Template Method

21 O que vimos hoje? Strategy Template Method 21 Strategy e Template Method

22 O que veremos na próxima aula? Visão crítica sobre padrões: over-engineering 22 Strategy e Template Method

23 Dúvidas? ? 23 Strategy e Template Method


Carregar ppt "Strategy e Template Method Professor: Hyggo Almeida."

Apresentações semelhantes


Anúncios Google