1 Padrões: Composite (p. 163) Objetivo: compor objetos em estruturas de árvores para representar relações de parte/todo. “Composite” permite tratar objetos.

Slides:



Advertisements
Apresentações semelhantes
Carlos Roberto Marques Junior
Advertisements

Sistemas distribuídos Metas de Projeto Prof. Diovani Milhorim
PADRÕES DE PROJETO..
Diagrama de fluxo de dados (DFD)
Diagrama de Classes continuação.
Projeto de Sistemas de Software
Projeto de Sistemas de Software Kelly Leal Leandra Mara da Silva
Elizabeth Suescún Monsalve
Projeto de Sistemas de Software Hazel, Juliana e Luana
Projeto de Sistemas de Software Fernando de Freitas Silva
Projeto de Sistemas de Software
Carlos R. M. Junior Eduardo Motta
Strategy Projeto de Sistemas de Software
Chain of Responsibility
Projeto de Sistemas de Software
Padrão de Projeto Iterator
Padrão de Projeto Composite
Padrão Abstract Factory
RV: Objetos e Implementação Prof. Dr. Annibal Hetem Jr.
Modelo de Arquitetura Diagrama de Componentes
1 Introdução aos padrões de projeto (GoF) Conceitos preliminares –Mecanismos de herança –Princípio de Substituição de Liskov –Acoplamento concreto x Acoplamento.
Padrões GoF - Composite
Eduardo Bezerra Padrões GoF (State) Eduardo Bezerra
Análise Léxica Supondo o trecho de programa abaixo:
Padrões - introdução O que é um padrão?
RUP: Fluxo de Análise e Projeto
Geração de Código.
Projeto da Camada de Domínio
Análise e Projetos de Sistemas UML-Linguagem de Modelagem Unificada Modelo de Dados com UML Diagrama de Classes Professor: Armando Hage.
Análise de Sistemas Análise e Projeto Prof. Jeime Nunes Site:
Nazareno Andrade (baseado no material de Hyggo Almeida)
Padrão de Projeto Visitor
Projeto de Sistemas de Software
Sistemas Distribuídos
UML (Unified Modeling Language) Linguagem Unificada de Modelagem
Design Patterns Bridge
Estudo de Caso: um editor de documentos
 Adelino Moreira Marcial Neto  Alex A. Toniatto  Gabriela Santini.
Análise e Projeto de Sistemas
SISTEMAS DISTRIBUIDOS Aula 4
© Ricardo Pereira e Silva
Projeto Orientado aos Objetos Prof. Wolley W. Silva
Análise Orientado aos Objetos Prof. Wolley W. Silva
Campus de Caraguatatuba Aula 2: Introdução a Tecnologia de BD
Padrões de Projeto.
Introdução Padrões de Projeto
Laboratório de Programação
Padrões de Interação com o Usuário
Design Patterns (Padrões de Projeto)
Análise e Projeto de Sistemas
Padrões de Projeto Abstract Factory.
Engenharia de Software e Sistemas
Design Patterns A adoção dos padrões terá um efeito profundo e duradouro sobre a forma de escrevermos programas Ward Cunningham e Ralph Johnson.
1 Padrão: Iterador (Iterator) Tipo - “Object behavioral” Objetivo - acessar um agregado sem expor a representação Outros nomes - Cursor.
1 Padrões: Bridge (p. 151) Objetivo: separar uma abstração de sua implementação Sinônimos: Handle/Body.
1 Design Patterns Israel Rios. 2 Origens A idéia de padrões de projeto não teve origem na ciência da computação Christopher Alexander A Pattern Language:
Padrão Composite Definição
Jobson Ronan Padrões GoF Jobson Ronan
1 - Introdução a Padrões de Projeto
Projeto Supervisionado no Desenvolvimento de Aplicações Profissionais na Web Servidores.
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
Interações entre objetos
Fundamentos de Engenharia de SW Diagramas da UML Usados no Projeto de Software.
Padrões de Projeto. O que são?  Soluções provenientes de diversos projetos e utilizados por diversos programadores;  Documentados em catálogos como.
Diagrama de Classes Herança Dependências.
Design Patterns Mediator Projeto de Sistemas de Software Kelly Leal.
Padrões de Projeto de Criação Padrões de Projeto Orientados a Objetos Prof a. Danielle Martin Universidade de Mogi das Cruzes.
ALUNO: RONI FABIO BANASZEWSKI Model-View-Controller.
1 Introdução aos Padrões de Projetos Créditos: Prof. Fabio Kon - IME/USP Adaptações: Prof. Nécio de Lima Veras.
Padrões de Projeto Aula 12 – Padrão Adapter. PADRÃO ADAPTER Soluções simples para problemas reais! 2.
Transcrição da apresentação:

1 Padrões: Composite (p. 163) Objetivo: compor objetos em estruturas de árvores para representar relações de parte/todo. “Composite” permite tratar objetos individuais e composições de maneira uniforme

2 Motivação aplicações gráficas como editores de figuras permitem ao usuário criar diagramas complexos a partir de componentes simples –implementação simplista pode definir classes para primitivas gráficas como texto e linhas e outras classes para conterem estas classes básicas –problema: o código que usa estas classes precisa tratar diferentemente as classes básicas e classes que as contem. “composite” descreve como usar composição recursiva para evitar esta distinção

3 Motivação (2): figura

4 Aplicabilidade quando se quer hierarquias de objetos que se relacionam como parte/todo quando se quer que “clientes” ignorem a diferença entre composição de objetos e objetos individuais.

5 Estrutura (fig.)

6 Participantes Componente: –define a interface para os objetos da composição –implementa comportamento “default” para interface comum das classes –declara interface para acessar e manipular seus componentes subordinados –(opcional) define uma interface para acessar o componente “pai” na estrutura recursiva Folha: –representa objetos atômicos –define o comportamento dos objetos básicos do sistema

7 Participantes (cont.) Composite –define o comportamento dos componentes que tem subordinados –guarda referências para os subordinados –implementa operações associadas aos elementos base na classe Componente Cliente –manipula objetos do sistema utilizando a interface de Component

8 Colaborações clientes utilizam interface de Component para interagir com estrutura se recipiente de uma mensagem é Leaf a requisição é tratada diretamente se recipiente é Composite então geralmente ele retransmite mensagens para seus componentes

9 Conseqüências define hierarquia de classes que consistem de objetos primitivos (Leaf) e objetos compostos (Composite). Composição de objetos em objetos mais complexos é recursiva simplifica a estrutura do cliente facilita a adição de novos componentes no sistema pode fazer a arquitetura do sistema geral demais –facilitar adição de componentes dificulta impor restrições aos elementos de um Composite. Com composite não se pode impor a restrição com estrutura de tipos, mas apenas com verificações em tempo de execução

10 Implementação referências explícitas a “pais” –simplifica percorrer hierarquia e simplifica manutenção da estrutura (movimentação vertical e eliminação) –simplifica manutenção do padrão Cadeia de Responsabilidades (“Chain of Responsibility) –lugar usual: classe Componente –necessário manter consistência: mudar referência a “pai” só através das operações add e remove de Composite compartilhando componentes –possibilidade é múltiplos “pais” mas introduz ambigüidades na medida que requisições são propagadas na estrutura –utilizar padrão Flyweight (p. 195)

11 Implementação (2) maximizando a interface de Component –para permitir que clientes não precisem se concientizar da estrutura de componentes –providenciar implementações “default” –conflito com princípio que cada classe deve definir apenas operações que fazem sentido para ela (e.g. op. em Component não faz sentido em Leaf) usar criatividade: Leaf é como um Component sem filhos (default é não voltar filhos, Composite modifica)

12 Implementação (3) declaração das operações de manutenção de descendentes –Composite implementa add e remove –quem delclara? em Component ganha-se transparência perde-se segurança (clientes podem pedir operações sem sentido com adicionar dependentes em Leaf) em Composite ganha-se segurança: operações ilegais podem ser detectadas durante compilação, perde-se transparência –Transparência em C++ –GetComposite (default é nil pointer) –Add, Remove (default em Component)

13 Implementação (4) Component deve implementar uma lista de Components? - custa espaço Ordenação de descendentes diretos –padrão Iterator (pg. 257) Caches: Composite pode manter caches para aumentar eficiência (e.g. “bounding box”) –mudanças no componente invalidam as caches de seus ascendentes (melhor quando componentes conhecem ascendente direto) Quem deve remover componentes? –sem coleta de lixo: Composite –exceção: quando Leafs são imutáveis e compartilhados Qual a melhor estrutura para guardar componentes? –depende....

14 Utilizações Interfaces de usuário –View em Smalltalk MVC –quase todas os sistemas para desenvolver interfaces de usuário (ET++, InterViews) Compiladores: –“RTL Smalltalk compiler framework” RTLExpression RegisterTranfer Finanças: portfolio agrega “assets” Padrão Command (pg. 233)

15 Padrões Relacionados Chain of Responsibility –utiliza a ligação pai-filho Decorator –usado em conjunto Flyweight –permite o compartilhamento de componentes Iterator –pode ser usado para enumeração de Composite Visitor –concentra operações e comportamento que de outra maneira seriam distribuídas entre as classes Composite e Leaf