Aula 5 – Padrão Decorator

Slides:



Advertisements
Apresentações semelhantes
Soluções elegantes para problemas recorrentes
Advertisements

ECONOMIA I - MICROECONOMIA Unidade 3: OFERTA E DEMANDA Introdução
PADRÕES DE PROJETO..
(Unified Modeling Language)
Identificando requisitos
H ERANÇA E P OLIMORFISMO Prof. Thiago Pereira Rique
Projeto de Sistemas de Software(PSS) Baldoino F. dos S. Neto
Refatorações Experiência é aquela coisa maravilhosa que permite que você reconheça um erro tão logo o cometa novamente F.P. Jones.
Adapter.
Eduardo Bezerra Padrões GoF (State) Eduardo Bezerra
Padrões GoF - Strategy.
Template Method Intenção: definir o esqueleto de um algoritmo em uma operação, postergando (delegando) a definição de alguns passos desse algoritmo para.
Padrões GoF – Factory Method
Observer Mantendo seus objetos atualizados Daniel Roloff Carlos Machado Enzo Zuccolotto Luiz Felipe Trevisan Rafael Holtz.
Observer Mantendo seus objetos atualizados
Strategy e Template Method
Aula prática 13 Orientação a Objetos – C++ Parte 1
Nazareno Andrade (baseado no material de Hyggo Almeida)
Singleton e Adapter Professor: Nazareno Andrade
Treinamento do Microsoft® Access® 2010
Diogo Vilela nºUSP: Lucas Wiechmann nºUSP: Thales Andrade nºUSP:
Treinamento: Atendimento, vendas e fechamento.
SELECIONANDO CLIENTES
Estudo de Caso: um editor de documentos
Programação Orientada à Objetos
Curso de Aprendizado Industrial Desenvolvedor WEB Disciplina: Programação Orientada a Objetos I Professora: Cheli Mendes Costa Classes e Objetos em Java.
Filter Design Pattern.
Programação Orientada à Objetos
© Ricardo Pereira e Silva
Projeto Orientado aos Objetos Prof. Wolley W. Silva
Análise Orientado aos Objetos Prof. Wolley W. Silva
Aula Prática 4 Monitoria IP/CC (~if669).
Inteligência Artificial
Decorator POO - Avançado.
Laboratório de Programação
Análise e Projeto de Sistemas
Padrões de Projeto Abstract Factory.
Abstract Factory Pattern Algumas aplicações precisam criar objetos de classes que podem mudar ex: elementos de um sistema GUI. –Diferentes padrões precisam.
1 Padrões: Bridge (p. 151) Objetivo: separar uma abstração de sua implementação Sinônimos: Handle/Body.
Padrão Composite Definição
Jobson Ronan Padrões GoF Jobson Ronan
Backlog Lílian.
DEVOLUÇÃO DE MERCADORIAS
Classes abstratas São classes das quais não se pode instanciar objetos. São classes das quais não se pode instanciar objetos. Seu objetivo é ser herdada.
2 – Revisão de Programação Orientada a Objetos
2 – Revisão de Programação Orientada a Objetos
Padrões de Projeto Aula 3 – Padrão Strategy.
20/04/2017 Orientação a Objetos 1 1.
Microsoft Excel.
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA TOCANTINS Campus Araguaína Continuação Modelagem Orientada a Objetos Técnico Subsequente.
Padrões de Projeto Aula 4 – Padrão Observer. PADRÃO OBSERVER Como manter objetos atualizados quando algo importante ocorre? Padrões de Projeto - Observer.
Aula 6 – Padrão Factory Method
Padrões de Projeto Aula 9 – Padrão Adapter.
Aula 7 – Padrão Abstract Factory
Como fazer um cadastro de cliente. Para iniciar a consulta de atendimento clique em ATENDIMENTO > ATENDIMENTO.
Aula 8 – Padrão Singleton
Padrões de Projeto Aula 3 – Padrão Strategy.
Padrões de Projeto Aula 10 – Padrão Façade.
Padrões de Projeto 2 – Revisão de Programação Orientada a Objetos.
GRASP: Projeto de Objetos com Responsabilidade – Parte 2.
Questionário (Básico) Autor: Skyup Informática. Atividade - Questionário O módulo permite criar uma série de questões, que deverão ser respondida pelos.
Princípios de design SOLID Padrões de Projeto Orientados a Objetos Profa. Danielle Martin Universidade de Mogi das Cruzes.
Herança em Java Curso: Informática Disciplina: Programação Orientada a Objetos Prof. Abrahão Lopes
Testes de Unidade. 2 Pauta Testes de Unidade; Testes de Unidade; Desenvolvimento orientado a testes; Desenvolvimento orientado a testes; Testes unitários.
Padrões de Projeto Aula 5 – Padrão Decorator 1. QuickReview: Observer Definição: Quando usar? Tipo de padrão? Como? 2.
Padrões de Projeto Aula 12 – Padrão Adapter. PADRÃO ADAPTER Soluções simples para problemas reais! 2.
Linguagem de Programação – Aula 04 Prof. Me. Ronnison Reges Vidal.
QuickReview: Observer Definição:
Aula 9 – Padrão Decorator
Transcrição da apresentação:

Aula 5 – Padrão Decorator Padrões de Projeto Aula 5 – Padrão Decorator

QuickReview: Observer Definição: Quando usar? Tipo de padrão? Como? Padrões de Projeto - Decorator Def: padrão usado quando existe uma relação um-para-muitos entre os objetos, de modo que sempre que o objeto principal (subject) for modificado seus objetos dependentes (observers) sejam notificados automaticamente. Quando usar? Quando existir uma relação de dependência um-para-muitos. Tipo de padrão? Comportamental (padrões comportamentais são basicamente padrões de comunicações entre os objetos) Como? Interfaces Subject e Observer Lembrar de programar para superclasses! Assim podemos ter uma maior gama de observadores. ;-)

Padrão decorator Anexa responsabilidades adicionais a um objeto de maneira dinâmica. Padrões de Projeto - Decorator

Starbuzz Coffee [1] Cenário Starbuzz Coffee ficou conhecido como o café com o crescimento mais rápido da região. Se você já viu um na sua esquina, olhe para o outro lado da rua: você verá outro. Como eles cresceram muito rápido, estão tendo dificuldades em atualizar seus sistemas de pedidos para corresponder a suas ofertas de bebidas. Padrões de Projeto - Decorator

Quando eles entraram no negócio, projetaram suas classes assim: calcularPreco() é abstrato, para que as subclasses defi-nam sua implementação. Padrões de Projeto - Decorator

Os adicionais são o atrativo desse lugar! Além do seu café, você pode pedir vários adicionais. Dê uma olhadinha no cardápio. Os adicionais são o atrativo desse lugar! Cada adicional tem um preço, e portanto devemos incluí-los no sistema. Padrões de Projeto - Decorator

Temos o café e os adicionais Temos o café e os adicionais... Como o café deve ser montado dinamicamente? Como esse preço deve ser calculado dinamicamente? Padrões de Projeto - Decorator

Solução I: uma classe para cada combinação Tradicional + Leite; Tradicional + Espuma; Tradicional + Leite + Espuma, ... Isso nos daria uma combinação de quantas classes? E quando o leite aumentar? E quando um novo adicional entrar? Cada classe calcula o preço do café com o seu adicional. CANCELADA! Padrões de Projeto - Decorator

Solução II: variáveis para representar os adicionais Leite, espuma, creme, chocolate E se o preço dos adicionais mudarem? E se surgirem novos condimentos? E se chá gelado entrar no cardápio? E se um cliente quiser 2x creme? Calcula o custo total dos adicionais. E se o preço dos adicionais mudarem? Será preciso alterar o código existente. E se surgirem novos condimentos? Será preciso adicionar novos métodos. E se chá gelado entrar no cardápio? Ele vai herdar métodos que tira a semântica e coesão do sistema. Faz sentido tomar chá gelado com creme? E se um cliente quiser um moca (chocolate) duplo? O nosso sistema simplesmente não suporta. Retorna o preço de cada bebida + adicionais.

Padrões de Projeto - Decorator Pág 62 do livro use a cabeça ou 81 do PDF use a cabeça.

O princípio Aberto-Fechado As classes devem estar abertas para extensão mas fechadas para modificação. Herança nem sempre leva a designs flexíveis e fáceis de manter. Um meio mais interessante de “herdar” comportamento é via composição. (Um dos princípios é: prefira composição à herança) Compondo objetos de formas dinâmicas é possível adicionar novas funcionalidades através da criação de um código novo, ao invés de alterar o já existente. Padrões de Projeto - Decorator

Ok... Então, qual é a melhor solução para StarBuzz?

PADRÃO DECORATOR! Solução 3 (a melhor entre elas): Considera os princípio de herança/composição e aberto/fechado.

Solução III: padrão Decorator O cliente primeiro escolhe o tipo de bebida, e depois escolhe os adicionais em tempo de execução. Ok, senhor! Só um minutinho, já digo quanto custa. ;-) Com quais adicionais, senhor? Senhor, pode me falar o seu pedido... Mais algum adicional, senhor? E com leite! Desejo um café tradicional... Com chocolate... Padrões de Projeto - Decorator

Solução III: padrão Decorator Vamos lá: Café tradicional: R$1.50 Adicional de chocolate: R$1.00 Adicional de leite: R$0.50 Custa 3 reais, senhor! Padrões de Projeto - Decorator

Em termos de implementação, como é possível decorar os objetos? Começamos com o objeto Cafe-Tradicional. Criamos um objeto Chocolate e englobamos CafeTradicional nele. Criamos um decorador Leite e colocamos Chocolate dentro. calcularPreco() CafeTradicional calcularPreco() CafeTradicional Padrões de Projeto - Decorator calcularPreco() Chocolate calcularPreco() CafeTradicional calcularPreco() Leite calcularPreco() Chocolate

E como é calculado o preço desse café e seus adicionais? calcularPreco() CafeTradicional 4. CafeTradicional re-torna seu valor. 3. Chocolate chama calcular-Preco() de CafeTradicional. 5. Chocolate retorna seu valor + CafeTradicional Padrões de Projeto - Decorator calcularPreco() Chocolate 2. Leite chama calcularPreco() de Chocolate. calcularPreco() Leite 6. Leite retorna seu valor + Chocolate, que é o valor total. 1. Chamamos calcularPreco() do decorador externo, Leite.

Terminologia e estrutura também pode ser classe abstrata, dependendo do contexto Padrões de Projeto - Decorator

Componentes aos quais adicionamos dinamicamente um novo comportamento. Os decoradores precisam da mesma interface dos componentes, porque ficam no lugar deles. Componentes aos quais adicionamos dinamicamente um novo comportamento. Padrões de Projeto - Decorator Os decoradores englobam um componente.

Bebida, a nossa superclasse. Onde calculamos o preço de um CafeTradicional.

Os decoradores precisam ser do mesmo tipo que as bebidas. Bebida que estamos englobando. Onde calculamos o preço do Chocolate + CafeTradicional.

Pedido: Um café tradicional, com chocolate, com leite. Resultado...

Categoria: padrão do tipo estrutural O padrão funciona como um wrapper para classes existentes Este padrão cria uma classe decoradora que empacota a classe original para prover novas funcionalidades. Tudo isto é feito sem que haja alteração na estrutura da classe. Ao contrário da herança, que aplica funcionalidade a todos os objetos dela, ele permite adicionar funcionalidades a um objeto específico sem alterar a estrutura da classe.

Os decoradores têm o mesmo supertipo que os objetos que eles decoram; É permitido usar 1/+ decoradores para englobar um objeto; Os objetos podem ser decorados dinamicamente em tempo de execução.

Referências [1] O caso Starbuzz é abordado no capítulo 3 do livro “Padrões de Projeto – Use a Cabeça!” Padrão de Projeto Decorator. Slides de Juliane Silva. Online em: http://pt.slideshare.net/jlsansil/padro-de-projeto-decorator Padrões de Projeto - Decorator