Strategy e Template Method. Professor: Hyggo Almeida

Documentos relacionados
Padrões de Projeto de Software

Singleton e Adapter. Professor: Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

As classes Formatador e ElementosAFormatar

Padrões de Projeto. Padrões de Projeto. Além dos 23 Padrões GoF. Os 23 Padrões de Projeto. Documentação de um Padrão. Classificação dos Padrões

Padrões GoF Strategy, Observer, Singleton, Abstract Factory e outros...

Interface vs. Implementação Herança vs. Composição

T ó p i c o s A v a n ç a d o s e m L i n g u a g e m d e P r o g r a m a ç ã o. Padrões de Projeto. Prof. Alexandre Vidal. DEINF-UFMA Janeiro de 2007

Introdução a Padrões, GRASP. Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

LEIC-A / MEIC-A 2007/2008 (1º

Creational Patterns Factory method

Tópicos da Aula. POO e Padrões de Projetos. Considere três classes... Reuso de Classes. Locadora de DVD. Sistema Acadêmico

Padrões de Projeto. Factory Method

Programação Orientada a Objetos. Vagner Luz do Carmo - Vluzrmos

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos 2 Prof. Fabiano Dorça. Padrões de Projeto.

PADRÕES DE PROJETO DE SOFTWARE

Modelo do Mundo Real. Abstração. Interpretação

ALGORITMOS. Professor: Diego Oliveira. Aula 06 - Tipos Primitivos de Dados

Programação Orientada a Objetos

Computação II Orientação a Objetos

LEIC-A / MEIC-A 2007/2008 (1º

Evolução de Software e Refatoração. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 21 1

LEIC-T LERC MEIC-T 2011/2012 1º Semestre Programação com Objetos 2012/01/07 11h00m 3/10

Linguagem de Programação III

Programação Java. Marco Fagundes. - Herança, Classes Abstratas e Interfaces Marco Fagundes -

Computação II Orientação a Objetos

Atribuições: Valores, Ponteiros e Referências

Programação com Objectos 2º Teste Tipo 1º Semestre (120 minutos)

Padrões de Design. Padrões de Design. Abstract Factory. Padrões de Design. Padrões de Design Abstract Factory. Abstract Factory.

Padrões Fábrica. Simple Factory Factory Method

Análise e Projeto Orientados por Objetos

Linguagem de programação Programação Orientada a objetos

Java para Desktop. Programação Orientada à Objetos 2 JSE

Frameworks - Introdução. Professor: Hyggo Almeida

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

JAVA. Tópicos Especiais de Programação Orientada a Objetos. sexta-feira, 26 de outubro de 12

Algoritmos II Aula 11 Funções e Procedimentos

Professor Leonardo Cabral da Rocha Soares Lattes:

Aula 08 Encapsulamento. Disciplina: Programação Estruturada e Orientada a Objetos Prof. Bruno Gomes

9 Classes Abstractas e Interfaces

Programação Orientada a Objectos - P. Prata, P. Fazendeiro

Vítor E. Silva Souza

Desenvolvendo aplicações Java

Introdução. Programação Orientada a Objetos (POO) João Paulo Q. dos Santos

Análise e Projeto Orientados por Objetos

Programação Orientada a Objetos. Padrões Comportamentais

Linguagem de Programação. Diagrama de classes

Linguagem de Programação Orientada a Objeto Polimorfismo, Classes Abstractas e Interfaces

Linguagem de Programação I. Aula 10 Funções

Objetivo: Aplicar a técnica de encapsulamento no sistema de gestão acadêmica

Java First-Tier: Aplicações. Sobrecarga. Orientação a Objetos em Java (II) Sobrecarga de Construtores: Exemplo de Declaração

Slide 01 16/03/2017. Estruturas de Dados. Prof. Cleziel Franzoni da /Cleziel.

Interfaces. Universidade Católica de Pernambuco Ciência da Computação. Prof. Márcio Bueno.

Iterator. Professor: Hyggo Almeida

Lição 11 Herança, polimorfismo e interfaces

CIÊNCIA DA COMPUTAÇÃO - LINGUAGEM DE PROGRAMAÇÃO II REVISÃO POO

Capítulo 3. Framework 28

Programação Orientada a Objetos

Strings e Arrays POO

Unidade: Classes Abstratas, Polimorfismo, Sobreposição e Interfaces

Polimorfismo. O que é polimorfismo?

Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Polimorfismo: aprendendo a prever o futuro. Polimorfismo: aprendendo a prever o futuro. Definições (2/5) Definições Tipos de Polimorfismo

Laboratório de programação II

Interfaces POO. Prof. Marcio Delamaro

Computação II - Java - Prova 1 Prof. Adriano Joaquim de Oliveira Cruz /05/13. Questão: Total Pontos: Gráu:

TÉCNICAS DE ORIENTAÇÃO A OBJETOS

Linguagem de Programação II Programação Orientada a Objetos. Orientação a Objetos

Computação II (MAB 225)

Introdução aos Padrões de Projeto. Sylvio Barbon Jr

10. Classes Abstratas e Concretas

O que é a modularização

Sumário. Prefácio 12. Capítulo 1 - Técnicas Simples Para um Código Limpo 23

Herança Sendo uma linguagem orientada a objetos Java oferece mecanismos para definir classes derivadas a partir de classes existentes; As classes deri

SEMINÁRIOS INTEGRADOS EM ADS PROGRAMAÇÃO ESTRUTURADA E ORIENTADA A OBJETOS

Fundamentos de Programação

Oportunidades de refatoração. Prof. André Luiz Peron Martins Lanna

Engenharia de Software

Lógica de Programação, Algoritmos e Estruturas de Dados

LINGUAGEM C: FUNÇÕES FUNÇÃO 04/07/2017. Funções são blocos de código que podem ser nomeados e chamados de dentro de um programa.

Introdução à Programação C

Segunda Parte (3 valores) Primeira Parte (7 valores) Nome: Número: PERGUNTA NOTA PERGUNTA RESPOSTA

INF011 Padrões de Projeto. 05 Factory Method

Herança (parte 2) Redefinição de métodos AULA 11

Conceitos de Programação Orientada a Objetos

Aula teórica 14. Tema 12. Subprogramas (cont)

Herança e Polimorfismo

Sabemos que a classe é responsável por definir a estrutura e o comportamento de seus objetos. Portanto, os objetos são instâncias das classes.

Aula 11: Modularização

Linguagem de Programação II Implementação

Sorting Client. Exemplos de questões da prova 2

Decorator e Composite. Nazareno Andrade (baseado no material de Hyggo Almeida)

Herança. Fátima L. S. Nunes Luciano A. Digiampietri Norton T. Roman SISTEMAS DE INFORMAÇÃO 1

Programação Estruturada

Programação Orientada a Objetos HERANÇA E COMPOSIÇÃO

Transcrição:

Professor: Hyggo Almeida

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 se o cliente tem carteira de estudante promoções-relâmpago... 2

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

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

Strategy Problemas??? 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... Solução??? Padrão Strategy 5

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

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

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. Aplicabilidade muitas classes relacionadas diferem apenas no seu comportamento; você necessita de variantes de um determinado algoritmo. 8

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

Outro exemplo: LayoutManager

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?

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

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

Como projetar??? Teste exibir(); <<interface>> RelatórioIF RelatorioVendas exibir(); RelatorioLucros exibir(); RelatorioCompras exibir(); 14

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

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

public void exibircabecalho(){ System.out.println( Cabecalho ); System.out.println(... );... } public void exibirrodape(){ System.out.println( Rodapé ); System.out.println(... );... } public void abstract exibirconteudo(); 17

Template Method Projeto com o Template Method (exibir()) Teste exibir(); <<abstract>> RelatorioAbstrato RelatorioVendas exibirconteudo(); RelatorioLucros exibirconteudo(); RelatorioCompras exibirconteudo(); 18

Template Method Intenção Definir o esqueleto de um algoritmo em uma operação, postergando alguns passos para as subclasses Aplicabilidade 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. 19

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

O que vimos hoje? Strategy Template Method 21

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

Dúvidas?? 23