Decorator Pattern. SISMO - Sistemas e Mobilidade http://www.sismo.deinf.ufma.br. Junho de 2008. Departamento de Informática / UFMA



Documentos relacionados
Padrão Básico de Projeto: Herança versus Composição

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

Abstract Factory Pattern

PADRÕES DE SOFTWARE. Jerffeson Teixeira de Souza, Ph.D. Tarciane de Castro Andrade. Grupo de Padrões de Software da UECE (GPS.

Programação Orientada a Objetos Herança Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

PROGRAMAÇÃO AVANÇADA -CONCEITOS DE ORIENTAÇÃO A OBJETOS. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

2 Diagrama de Caso de Uso

Modelagem OO com UML. Vítor E. Silva Souza ~ vitorsouza

ATRIBUTOS PRIVADOS 6. ENCAPSULAMENTO MÉTODOS PRIVADOS MÉTODOS PRIVADOS

Orientação a Objetos

Prototype, um Design Patterns de Criação

Programação Orientada a Objetos. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br

Engenharia de Software III

Modelos de Sistema by Pearson Education. Ian Sommerville 2006 Engenharia de Software, 8ª. edição. Capítulo 8 Slide 1.

UNIVERSIDADE FEDERAL DO PARANÁ UFPR Bacharelado em Ciência da Computação

Orientação a Objetos

Sumário. Uma visão mais clara da UML

Especialização em web com interfaces ricas. Padrões de Projeto - Estruturais

Unidade 8: Padrão MVC e DAO Prof. Daniel Caetano

INF011 Padrões de Projeto. 02 Creational Patterns

Unisant Anna Gestão Empresarial com ERP 2014 Modelagem de Sistemas - UML e MER

Padrões de projeto 1

Felipe Denis M. de Oliveira. Fonte: Alice e Carlos Rodrigo (Internet)

Programação Orientada a Objetos Classes Abstratas Técnico em Informática. Prof. Marcos André Pisching, M.Sc.

Orientação a Objetos com Java

Gerenciamento de Projetos Modulo VIII Riscos

EXERCÍCIOS SOBRE ORIENTAÇÃO A OBJETOS

Modelagemde Software Orientadaa Objetos com UML

Modelagem de Software Prof. Flávio de Oliveira Silva, Ph.D.

ISO/IEC 12207: Gerência de Configuração

Java 2 Standard Edition Como criar classes e objetos

Resolução da lista de exercícios de casos de uso

Orientação à Objetos. Aécio Costa

Curso de Java. Orientação a objetos e a Linguagem JAVA. TodososdireitosreservadosKlais

UML Aspectos de projetos em Diagramas de classes

Herança. Alberto Costa Neto DComp - UFS

Teste de Software. Ricardo Argenton Ramos Engenharia de Software I

Reuso com Herança a e Composiçã

Computação II Orientação a Objetos

Guia de Especificação de Caso de Uso Metodologia CELEPAR

Padrões GoF. Leonardo Gresta Paulino Murta

Especificação do 3º Trabalho

Slide 1 Deitel/Deitel, 8e. Java Como programar Copyright 2010 Pearson Education

DESENVOLVENDO APLICAÇÃO UTILIZANDO JAVA SERVER FACES

MÓDULO 7 Modelo OSI. 7.1 Serviços Versus Protocolos

Lista de Contas: Assinatura. Lista de Contas. Listas de Contas: Descrição. Listas de Contas: Descrição. Listas de Contas: Descrição

Introdução ao Modelos de Duas Camadas Cliente Servidor

2 Engenharia de Software

FUNDAMENTOS DA ORIENTAÇÃO A OBJETOS- REVISÃO

Esta dissertação apresentou duas abordagens para integração entre a linguagem Lua e o Common Language Runtime. O objetivo principal da integração foi

Sistemas de Gestão Ambiental O QUE MUDOU COM A NOVA ISO 14001:2004

1 Inicie um novo. Guia de Referência Rápida de Gerenciamento de Projeto para o Project projeto

Padrões de Projeto. Singleton

Tecnologias Web. Padrões de Projeto - Camada de Apresentação

Behavioral Patterns - Command

Conteúdo. Disciplina: INF Engenharia de Software. Monalessa Perini Barcellos

Introdução a Java. Hélder Nunes

SISTEMA TYR DIAGRAMAS DE CLASSE E SEQUÊNCIA Empresa: Academia Universitária

UML & Padrões Aula 7. UML & Padrões - Profª Kelly C C Silva

Programação Orientada a Objetos. Padrões de Criação

Orientação a Objetos

Factory Method. Edeyson Andrade Gomes

Engenharia de software para desenvolvimento com LabVIEW: Validação

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

5 Framework para coordenação e mediação de Web Services para ambientes de aprendizado à distância

Curso de PHP. FATEC - Jundiaí. A programação orientada a objetos (object-oriented oriented programming

NOVIDADES DO JAVA PARA PROGRAMADORES C

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini prof.andre.luis.belini@gmail.com /

Programação Avançada. Padrões de Projeto de Software. Fonte: Oswaldo B. Peres e K19 Treinamentos

Implantação. Prof. Eduardo H. S. Oliveira

Programação Orientada a Objetos e Java - Introdução. Carlos Lopes

Aspectos técnicos do desenvolvimento baseado em componentes

UML - Unified Modeling Language

UM CONCEITO FUNDAMENTAL: PATRIMÔNIO LÍQUIDO FINANCEIRO. Prof. Alvaro Guimarães de Oliveira Rio, 07/09/2014.

Tópicos em Engenharia de Computação

Análise e Projeto Orientados por Objetos

Guia de utilização da notação BPMN

Sistemas Distribuídos. Professora: Ana Paula Couto DCC 064

ARCO - Associação Recreativa dos Correios. Sistema para Gerenciamento de Associações Recreativas Plano de Desenvolvimento de Software Versão <1.

Manual de Integração E-Commerce CiaShop x SIGALOJA

Curso - Padrões de Projeto Módulo 1: Introdução

Eduardo Bezerra. Editora Campus/Elsevier

PROGRAMAÇÃO ORIENTADA A OBJETOS -TRATAMENTO DE EXCEÇÕES. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

Engenharia de Software II

On Scalability of Software-Defined Networking

Análise e Projeto de Sistemas

Análise de Ponto de Função

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DE ALAGOAS CURSO TECNICO EM INFORMATICA DISCIPLINA:

3 Um Framework Orientado a Aspectos para Monitoramento e Análise de Processos de Negócio

3.1 Definições Uma classe é a descrição de um tipo de objeto.

Diagrama de Classes. Um diagrama de classes descreve a visão estática do sistema em termos de classes e relacionamentos entre as classes.

INF 2125 PROJETO DE SISTEMAS DE SOFTWARE Prof. Carlos J. P. de Lucena

TRABALHO DE DIPLOMAÇÃO Regime Modular ORIENTAÇÕES SOBRE O ROTEIRO DO PROJETO FINAL DE SISTEMAS DE INFORMAÇÕES

Roteamento e Comutação

Pós-Graduação em Gerenciamento de Projetos práticas do PMI

A apresentação através de fluxos lógicos consegue mostrar mal entendidos e pontos que são controversos.

Funções de Posicionamento para Controle de Eixos

Transcrição:

Decorator Pattern SISMO - Sistemas e Mobilidade http://www.sismo.deinf.ufma.br Departamento de Informática / UFMA Junho de 2008

Revisando os conceitos Herança é poderosa mas não é flexível Comportamento herdado nas subclasses é fixado na compilação Todas as subclasses herdam o mesmo comportamento Composição e Delegação permitem reúso flexível de comportamento Composição permite estender o comportamento do objeto dinamicamente na execução Isso é possível porque não é necesário modificar o código existente Pelo mesmo motivo, as chances de introdução de erros são reduzidas

Princípio O.O: Estender sem Modificar Classes devem ser abertas para extensão e fechadas para modificação A meta é permitir que classes sejam facilmente estendidas para incorporar novos comportamentos sem modificar o código existente Desejamos obter projetos resilientes a mudanças, suficientemente flexíveis para atender novas funcionalidades e requisitos Como atender essa meta um tanto contraditória? Uso de técnicas O.O provadas e aprovadas (padrões) O princípio não deve ser aplicado de forma generalizada, mas sobretudo em pontos do projeto mais suscetíveis a mudanças Identificar esses pontos depende da experiência do projetista sobre o domínio e em problemas semelhantes

O Problema do Ressaca s Bar O Ressaca s é o bar de maior sucesso da região. A razão é a variada oferta de drinks a disposição dos clientes. Por outro lado, o sistema de pedidos do bar se tornou mais complexo e está difícil mantê-lo por conta da grande variedade de drinks Vamos ver como o problema começou...

Diagrama de Classes dos Drinks Figura: Diagrama Original

Onde está o busílis? O problema é que a pedido dos clientes, novos drinks foram criados pela adição de diferentes aditivos aos drinks existentes Os projetistas criaram novas classes para representar os novos drinks e calcular os preços de cada um deles levando em conta os diferentes ingredientes em decorrência houve uma verdadeira explosão de classes para representar os diferentes tipos de drinks Um pesaselo de manutenção... além de violar dois princípios O.O. Quais?

Princípios O.O violados Encapsule os aspectos mais sujeitos a mudanças Prefira Composição/Delegação em vez de Herança

Experimentando uma solução Figura: Solução baseada em variáveis de instância

Experimentando uma solução II Figura: Calculando preços dos drinks

Solução baseada em variáveis de instância O método price na classe Drink calcula os preços associados aos ingredientes Nas subclasses, o método price calcula o preço básico do drink e chama o método price da classe Drink para calcular os preços dos condimentos que são parte do drink Quais os problemas com essa solução?

Fatores que podem mudar afetando o design A adição de novos ingredientes obriga a adicionar novos métodos e a alterar o método price na superclasse Nem todos os ingredientes são adequados para todos os drinks; no entanto, os métodos associados a esses ingredientes são herdados por todas as subclasses E se alguém quiser uma dose dupla de apenas alguns dos ingredientes?

A abordagem Decorator I Figura: Tome um objeto BaseCaipirinha

A abordagem Decorator II Figura: Decore-o com um objeto Cachaca

A abordagem Decorator III Figura: Decore-o com um objeto Adocante Chame o método price e use delegação para calcular os preços dos ingredientes adicionais

Características da Abordagem Decoradores empacotam os objetos decorados Decoradores têm o mesmo supertipo dos objetos que eles decoram Objetos são decorados em camadas O decorador pode adicionar o seu próprio comportamento antes ou depois de delegar ao objeto que decora a responsabilidade de continuar o trabalho Objetos podem ser decorados dinamicamente em tempo de execução

Padrão Decorator Classificação: Propósito: Estrutural Escopo: Objetos Intenção: agregar, dinamicamente, responsabilidades adicionais a a objetos individuais, e não a toda uma classe. São uma alternativa flexível ao uso de subclasses para extensão de funcionalidades a.k.a.: Wrapper

Aplicabilidade Quando se deseja crescentar responsabilidades a objetos individuais de forma dinâmica e transparente Para permitir a remoção de responsabilidades também dinamicamente Quando a extensão através de subclasses não é prática Por exemplo, quando há possibilidade de explosão do número de subclasses

Estrutura do Decorator Figura: Estrutura Motivação: Adicionar responsabilidades a objetos individuais, e não a toda uma classe

Participantes Component: define a interface para objetos que podem ter responsabilidades acrescentadas dinamicamente ConcreteComponent: define um objeto para o qual responsabilidades adicionais podem ser atribuídas Decorator: define uma interface que segue a de Component e mantém uma referência para um objeto Component ConcreteDecorator: acrescenta responsabilidades ao component

Colaborações no Decorator Decorator repassa solicitações para seus objeto Component e pode, opcionalmente, executar operações adicionais antes e depois de repassar a solicitação

Ressaca s Decorator Figura: Diagrama de Classes

Codificando o sistema - Classe Raiz e Decorador Figura: Classes Drink e AditivoDecorator

Codificando o sistema - Classes Concretas Figura: Classe BaseCaipirinha

Codificando o sistema - Classes Concretas Figura: Classe Cocktail

Codificando o sistema - Um Decorador Concreto Figura: Classe Cachaca

Sistema Ressaca s Figura: Implementando o sistema

Exemplo com Widgets Figura: Decorando widgets Adicionando propriedades, como bordas, ou comportamentos, como rolamento, a componentes de uma interface de usuário, apenas quando for necessário

Decorador para Widgets Figura: Diagrama de Classes

Exemplo de código Figura: Classes Component e Decorator

Exemplo de código II Decorator decora o VisualComponent referenciado por component, que é inicializado no construtor Para cada operação na interface de VisualComponent, Decorator define uma implementação que passa a solicitação para component: Figura: Métodos de Decorator

Exemplo de código III Figura: Classe BorderDecorator

Exemplo de código IV Figura: Inserindo a Classe TextView

Exemplo de código V Figura: Código cliente

Consequências do uso do Decorator Maior flexibilidade que a herança (estática) Evita classes sobrecarregadas de características na parte superior da hierarquia Grande quantidade de pequenos objetos. Padrões de criação como Builder e Factory ajudam a criar objetos no padrão Decorator O uso do Decorator é mais apropriado se não for necessário conhecer os tipos concretos dos objetos encapsulados