Baixe o app para aproveitar ainda mais
Prévia do material em texto
Análise e Projeto de Sistemas II Material das Aulas disponível no AVA Aula 3 MSc. Karen Figueiredo – karen@ic.ufmt.br Exemplos de Padrões -Strategy- Padrões de Projeto 2 Categorias dos Padrões: Padrões Comportamentais Caracterizam a forma como classes ou objetos interagem Distribuem responsabilidade Cenário 3 Cenário 4 Cenário 5 Cenário 6 Cenário 7 Cenário 8 Cenário 9 Desvantagens ao utilizar herança para reproduzir o comportamento de Duck: O código é duplicado entre as subclasses As alterações de comportamento são difíceis em tempo de execução É difícil conhecer o comportamento de todos os patos As alterações podem afetar sem querer outros patos Cenário 10 Cenário 11 Cenário 12 Alerta de código duplicado!!! Interfaces tem métodos abstratos Ex.: Toda vez que precisar alterar fly, terá que alterar em todos Cenário 13 Cenário 14 Cenário 15 Cenário 16 Cenário 17 Cenário 18 Cenário 19 Cenário 20 Agora podemos ter vários patos com comportamentos diferentes, mudando apenas o tipo =) Dúvidas? 21 Cenário 22 O que aconteceria se o código fosse modificado dessa forma? Cenário 23 Alteração de comportamento dinâmico ;) public class MiniDuckSimulator { public static main (String[] args) { Duck mallard = new MallardDuck(); mallard.performQuack(); mallard.performFly(); mallard.setFlyBehavior(new FlyNoWay()); mallard.performFly(); } } Dúvidas? 24 Cenário 25 Strategy 26 Propósito: Definir uma família de algoritmos, encapsular cada uma delas e torná-las intercambiáveis Strategy permite que o algoritmo varie independente dos clientes que o utilizam Também conhecido como: Policy Strategy 27 Motivação: Diferentes algoritmos são apropriados em diferentes situações Tornar mais fácil adicionar novos algoritmos e variar os existentes Facilitar a manutenção e entendimento Strategy 28 Aplicabilidade: Muitas classes relacionadas variam no seu comportamento Você precisa de variantes de um algoritmo Um algoritmo usa dados dos quais os clientes não devem obter conhecimento Strategy 29 Participantes do Padrão: ... ... Strategy 30 Participantes do Padrão: • Context: Uma interface que pode definir propriedades e operações abstratas que serão realizadas pelas suas ContextVariants • ContextVariants: Classes que realizam (implementam) as propriedades e operações de Context das mais diversas formas de acordo com as necessidades do projeto ... Strategy 31 Participantes do Padrão: ... • Strategy: Define uma classe abstrata com uma composição de Context que não é modificada em todas as suas ConcreteStrategy Deve possuir pelo menos uma variável para cada Context utilizado e uma variável e operação para cada variável e operação a mais utilizada de Context Strategy 32 Participantes do Padrão: ... • ConcreteStrategy: Estende Strategy aplicando as variações de contexto que são adequadas a sua estratégia de comportamento, além de outros comportamento que são diferentes de Strategy Strategy 33 Benefícios: Famílias de algoritmos relacionados Uma alternativa ao uso de subclasses Eliminam comandos condicionais da linguagem Strategy 34 Desvantagens: Aumento do número de objetos Custo de comunicação Exercício 35 1) SimUDuck: Criar o código da Classe Duck e de todas as classes para os seguintes patos: Tradicional (MallardDuck), CabeçaVermelha (RedHeadDuck), Borracha (RubberDuck) e Madeira (DecoyDuck), utilizando as famílias FlyBehavior e QuackBehavior do slide 23. Depois criar uma classe principal que instancie cada um dos tipos de pássaro e faça-os voar e grasnar. - Lembre-se: todos os patos tem uma aparência (display) diferentes e todos podem nadar (swim) da mesma maneira Mallard RedHead Rubber Decoy FlyBehavior FlyWithWings FlyWithWings FlyNoWay FlyNoWay QuackBehavior Quack Quack Squeak MuteQuack Exercício 36 2) Dadas as classes abaixo, faça o que é pedido: a) Identifique 1 interface, 1 classe abstrata e 8 classes comuns b) Organize as classes e crie o diagrama utilizando os relacionamentos corretos de generalização, realização e associação Exercício 37 2) Dadas as classes abaixo, faça o que é pedido: c) Coloque o método setArma na classe correta setArma (ComportamentoDeArma x) { this.arma = x; } Exercício 38 2) Dadas as classes abaixo, faça o que é pedido: d) Crie o código de uma classe principal que simule a luta entre um cavaleiro e um monstro. O cavaleiro dá o primeiro golpe com uma espada, o monstro golpeia em seguida com um machado e por fim o cavaleiro utiliza um arco e flecha. Exercício 3) Escreva um programa OO que implemente a ordenação de um vetor, dando para o usuário a liberdade de escolher a estratégia de ordenação (bubble sort, merge sort e quick sort) com o Padrão Strategy. Exercício 40 4) Faça a modelagem de um sistema que permita diferentes estratégias de viagem, sabendo que a escolha das estratégias se dará pela duração da viagem e objetivo, segundo as tabelas abaixo. Duração Objetivo Curta Trabalho Média Lazer Longa Trabalho e Lazer Transporte Cruzeiro Aéreo (Avião) Aéreo (Balão) Terrestre (Ônibus) Terrestre (Trem) Duração Longa Curta Curta Média Longa Objetivo Lazer Trabalho e Lazer Lazer Trabalho e Lazer Trabalho
Compartilhar