Aula 9 – Padrão Decorator

Slides:



Advertisements
Apresentações semelhantes
Decorator POO - Avançado.
Advertisements

Jobson Ronan Padrões GoF Jobson Ronan
Aula 5 – Padrão Decorator
Padrões de Projeto Aula 9 – Padrão Adapter.
Aula 7 – Padrão Abstract Factory
Padrões de Projeto Aula 3 – Padrão Strategy.
Padrões de Projeto Aula 5 – Padrão Decorator 1. QuickReview: Observer Definição: Quando usar? Tipo de padrão? Como? 2.
Modelo de Caso de Uso Wedson Quintanilha da Silva
TÉCNICO EM INFORMÁTICA Linguagem e Técnica de Programação III PROF. MARCELO N. SANTOS
PROGRAMAÇÃO ORIENTADA A OBJETOS EM C++ Professor: Dilvan Moreira.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Lógica de Programação Aula 25 Prof. Auler Gomes. Introdução - subrotina Muitos problemas grandes ou nem tão grandes, mas de solução mais complexa podem.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
1 Aula 06 – Funções Prof. Filipe Mutz Colocar mais exemplos de funções simples no começo.
07/06/ João Paulo Pizani Flor ( Síntese comportamental de componentes de um Sistema Operacional em hardware João Paulo Pizani.
 Neste trabalho vamos falar sobre os perigos do Chat, os cuidados a ter, e o que é o Chat também vamos falar sobre os vírus na Internet e como preveni-los.
Modelagem Orientada a Objetos com UML Cursos para a CTI - IME/USP Dairton Bassi, Hugo Corbucci e Mariana Bravo Departamento de Ciência.
Programação em Java Threads Prof. Luiz Antonio Rodrigues Prof. Luiz Antonio Unioeste - Cascavel Jpanel e Diagramadores.
Padrões de Projeto Composite Observer Strategy Factory Method Mediator Façade.
Arquitetura de Sistemas de Software. ... continuação  Como vimos anteriormente, SOAP transporta e o WSDL descreve.  E o que faz a UDDI ?
Façade Definição: Quando usar? Tipo de padrão? Como? estrutural.
Strategy Definição: Quando usar? Tipo de padrão? Como?
Introdução à Programação
Padrões de Projeto Estruturais
Exercícios.
PEF3111 – EMPREENDEDORISMO E MODELAGEM DE NEGÓCIOS
O PLANO DE MARKETING.
Introdução OO.
UML : Unified Modeling Language
2º Ano – Prof. Ricardo Lima
Projeto com reuso – MVC – Model-View-Controller
QuickReview: Observer Definição:
SQLite SQLite é um banco de dados Open Source. Ele suporta recursos de banco de dados relacionais padrão, como sintaxe SQL, transações, etc. SQLite suporta.
Sistemas de Controle III N8SC3
Singleton Definição: Quando usar? Tipo de padrão? Como? estrutural.
3.1 Classes e Objetos Em um programa orientado a objetos normalmente existem vários objetos de um mesmo tipo. Por exemplo, um programa de controle de.
Tema 4 - Modelagem ER: Técnicas e Ferramentas
ORE POR MIM! Lição 12 Território Teen – Na Casa do Pai © EDITORA CULTURA CRISTÃ - Todos  os direitos são reservados 
Aula 6 – Padrão Factory Method
POO - Classes Dilvan Moreira.
Projeto de PLP (2006.1) Extensão da Linguagem OO1
Java: Interfaces Alcides Calsavara.
Diagrama de Atividade Prof. Thales Castro.
Professor Norival Carvalho Cunha
Criação e manipulação de objetos
Processos de Design de IHC
Resumo PARTE 1.
Elisabeth Suescún Leandra Mara da Silva
Favor alterar a imagem da capa. Queremos ver duas opções diferentes, uma com um destino mais conhecido e outra com alguma mais paradisíaco. As fotos devem.
Aula 5 Projeto Olimpíada.
4 CONCEITOS BÁSICOS EM POO
Soluções para universidades corporativas
Aula 22 Modularização 22/10/08.
COMO ELABORAR UMA PESQUISA DE MERCADO
Cálculo de Sub redes.
Elaborando as Interfaces dos trabalhos das aulas 25, 26 e 27.
MER – Modelo de Entidade Relacionamento
2 – PREVISÃO DE DEMANDA EXERCÍCIOS.
Rosemary Silveira Filgueiras Melo
DIAGRAMA DE CASOS DE USO
UML : Unified Modeling Language
Rosemary Silveira Filgueiras Melo
Programação Orientada a Objetos
Programação Orientada a Objetos
Logotipo da Instituição
Prof.: Bruno Rafael de Oliveira Rodrigues
Tipos Primitivos de Dados
Prof. Artur Exercício 1: Restaurante “a la carte”
ATRAINDO E MANTENDO A MULTIDÃO
Arquitetura e padrões de software
Transcrição da apresentação:

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

QuickReview: Observer Definição: Quando usar? Tipo de padrão? Como? 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.

Starbuzz Coffee 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.

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

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.

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?

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!

Solução II: variáveis para representar os adicionais Leite, espuma, creme, chocolate Baixíssima coesão! 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.

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. Quais são os demais princípios? Se não lembra, estude!

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 (real life). Ok, senhor! Só um minutinho, já digo quanto custa. ;-) Mais algum adicional, senhor? Com quais adicionais, senhor? Senhor, pode me falar o seu pedido... E com leite! Desejo um café tradicional... Com chocolate...

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!

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

Componentes aos quais adicionamos dinamicamente um novo comportamento. Os decoradores precisam ser da mesma interface dos componentes porque serão englobados do mesmo modo que a interface é. Componentes aos quais adicionamos dinamicamente um novo comportamento. Bebida bebida = new CafeTradicional(); bebida = new ChocolateDecorator(bebida); Os decoradores englobam um componente.

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

Bebida que estamos englobando. 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. (composição)

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.

Exercício Implementem a solução para o StarBuzz seguindo a UML abaixo. Para testar seu programa, crie as seguintes bebidas: Café tradicional + leite + chocolate Café Blend + leite + leite + espuma Café descafeinado + leite + chocolate + creme + espuma

Tarefa de Casa Ler capítulos 1, 2 e 3 do livro Use a Cabeça – Padrões de Projeto Faça os exercícios proposto pelo livro Faça um resumos dos princípios de projeto. Entenda e saiba explicar cada um deles. Reimplemente os exercícios da aula: Strategy: Mortal Kombat Observer: Editora de Revista + Assinantes Decorator: Starbuzz Coffee

Referências O caso Starbuzz é abordado no capítulo 3 do livro “Padrões de Projeto – Use a Cabeça!”