Baixe o app para aproveitar ainda mais
Prévia do material em texto
08/06/2010 1 Padrões de Projeto Carga Horária 67hs Padrões de Operação Prof. Giuseppe Anthony N. Lima giuseppeanl@gmail.com Instituto Federal de Educação Tecnológica da Paraíba CST – Sistemas para Internet Padrões de Operação • Padrões de Operação – Objetos reproduzem seu comportamento a partir da chamada de serviços • Serviços são operações – Entenda-se aqui como método abstrato – Definidos através de uma assinatura • Método – É a implementação de um serviço (um método concreto) • Algoritmo – Seqüência de instruções que pode aceitar uma entrada e reproduzir uma saída. Pode ser um método, parte de um método ou consistir em vários métodos Padrão Template Method • Definição: “Definir o esqueleto de um algoritmo dentro de uma operação, deixando alguns passos a serem preenchidos pelas subclasses. Template Method permite que suas subclasses redefinam certos passos de um algoritmo sem mudar sua estrutura” [GoF] Template Method • O que é um Template? – Define uma maneira para que possamos incluir algo respeitando um modelo – Geralmente nos permite reaproveitar alguma coisa que já foi incluída Template Method • Exemplo de Template – Uma página web gerada dinamicamente possui áreas para inserção de informações • Topo, conteúdo e rodapé. • Podemos usar um template que permitirá reaproveitar a área de topo e rodapé na geração de outras páginas. • A página modelo contém uma entrada quer permite colocar o conteúdo na respectiva parte da página, se ele existir. Template Method • O que tem haver Template Method com isso? – É um padrão que irá permitir executar um algoritmo de um método, de forma dividida – Tal estrutura deverá fornecer um meio de incluir implementações de partes desse algoritmo • Por isso se diz que... – Template Method implementa um algoritmo em um método adiando a definição de alguns passos do algoritmo para que subclasses possam defini-los. 08/06/2010 2 Template Method • Problema Template Method • Estrutura Veja que o padrão permite colocar uma estrutura fixa de um algoritmo que concentra suas partes (operações primitivas)... ...e as subclasses contém as implementações de tais partes: dependendo da subclasse utilizada pelo cliente teremos um modo diferente de executar uma mesma operação! Template Method • Exemplo 1: – Criar uma operação que devolve links de acordo com o formato dos dados • Exemplo 2: Template Method public final preparar() { esquentarAgua(); colocarIngredientes(); filtrarCoar(); servirGarrafa(); } Atenção o método que reúne as partes do algoritmo não pode ser sobrescrito: preparar() é final! colocarIngredientes() -> pó café colocarIngredientes() -> pó chá colocarIngredientes() -> polpa Template Method • Veja que existem bebidas que podem ser preparadas – A quente: café e chá; – Temperatura ambiente: suco; • Então o método que reproduz a etapa esquentarAgua() deverá ficar desativado para Suco! – Adicionaremos um hook (gancho) que “enganchará” tal etapa ou não no template • Colocando um “gancho”: Template Method public final preparar() { //adicionando gancho if (aguaQuente()) esquentarAgua(); colocarIngredientes(); filtrarCoar(); servirGarrafa(); } aguaQuente() --> true colocarIngredientes() -> pó café aguaQuente --> true colocarIngredientes() -> pó chá aguaQuente --> false colocarIngredientes() -> polpa 08/06/2010 3 Template Method • Gerando um Template Method – Método final que reúne as partes de um algoritmo – Métodos abstratos que seriam a realização das partes de um algoritmo, a serem redefinidos por subclasses – Métodos abstratos “gancho” • Tomam a decisão sobre um método abstrato a ser chamado na classe abstrata (true ou false) • Podem fazer algo ou nada durante uma etapa Template Method • O método Collections.sort(List) é um Template Method! – Ele é o método que contém o algoritmo de ordenação Merge Sort – Uma das etapas de Merge Sort é comparar um elemento com outro – O elemento a ser comparado para participar do template deve implementar a interface Comparable • Obrigatoriedade de implementar o método compareTo(<o> obj) que retorna se o objeto cujo serviço foi invocado deve vir antes (-1), igual(0), depois(1) do objeto passado como parâmetro Template Method • Subclasses decidem o que deverá ser feito! – É uma característica comum entre FactoryMethod e Template Method, mas eles diferem! • Template Method (operacional): decide qual(is) algoritmo (s) será(ão) utilizado(s) • Factory Method (criação): decide qual classe concreta de um produto será usada na criação State • Definição – "Permitir a um objeto alterar o seu comportamento quanto o seu estado interno mudar. O objeto irá aparentar mudar de classe.“ [GoF] State • Problema Dependendo do estado do objeto ele executará um mesmo serviço de maneira diferente! State • Estrutura -Interface que interessa aos clientes (o cliente seta o estado) - Mantém uma instância de um estado concreto que define o estado atual - Define um interface que encapsula o comportamento associado com estado particular - Contém implementação de um comportamento associado ao estado 08/06/2010 4 State • Exemplo - Cliente seta o estado State • State – Às vezes, as classes que implementam um comportamento a partir de um estado mudam o estado do contexto • Nesse caso, cada classe State, deve manter uma referência para seu contexto • O contexto deve fornecer seus estados a partir de métodos • De posse dessa referência, um State pode mudar o estado usado por um contexto Strategy • Definição – "Definir uma família de algoritmos, encapsular cada um, e fazê-los intercambiáveis. Strategy permite que algoritmos mudem independentemente entre clientes que os utilizam.“ [GoF] Strategy • Problema Strategy • Estrutura - Repassa requisições de seus clientes para sua estratégia! Strategy • Exemplo - Parece com State só que a decisão aqui é interna: estratégias não podem ser reveladas ao cliente, veja o código de configuração da estratégia em definirEstrategia() 08/06/2010 5 Strategy • Strategy e State diferem quanto a intenção! – Um estado pode ser alterado pelo cliente – Uma estratégia é decidida internamente
Compartilhar