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

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

Como pôde verificar, a criação de um objecto do tipo File não cria o ficheiro em disco.

Composite. Padrões de Projeto. Composite. Prof. MSc Manfrine Santos. Anderson Fernandes Esteves. Manaus, Outubro de / 19

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

Reader e Writer para streams de caracteres (texto).

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

Prof. A. G. Silva. 13 de novembro de Prof. A. G. Silva INE5603 Introdução à POO 13 de novembro de / 1

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

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

Apêndice A. Alguns construtores e métodos importantes e úteis da classe Vector são:

Composite. Pronunciação americana: compósit Pronunciação canadense (Britânica): cómposit

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

LÓGICA DE PROGRAMAÇÃO (JAVA) HERANÇA. Professor Carlos Muniz

Análise e Projeto Orientados por Objetos

Para entender o conceito de objetos em programação devemos fazer uma analogia com o mundo real:

Iterator. Professor: Hyggo Almeida

InputStream e OutputStream para ler/ escrever bytes e das classes abstractas Reader e Writer para ler /escrever caracteres (texto).

Análise e Projeto Orientados por Objetos

INF011 Padrões de Projeto. 11 Composite

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

Hierarquia de classes. Veja as diversas classes do pacote

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

Padrão de projeto de software

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

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

PADRÕES DE PROJETO DE SOFTWARE

Refinamento da Modelagem

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

Análise e Projeto Orientados por Objetos

Entrada e Saída Exercício. Linguagem Java. Adenilso da Silva Simão 01/09/05

Análise e Projeto Orientados por Objetos

Programação Orientada a Objetos SANTOS, Rafael

Computação II Orientação a Objetos

Herança. Prof. Fernando V. Paulovich 23 de agosto de 2010

Lista 05 Herança. public class PessoaFisica extends Pessoa { private String RG; public PessoaFisica(){ super(); } public String getrg(){ return RG; }

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

9 Classes Abstractas e Interfaces

Tratamento de Exceções

Java e sua Sintaxe. Estrutura mínima de um programa em Java: public class Exemplo { }

Programação Java (nível intermediário) 4. Polimorfismo

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

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

Programação Procedimental GBC /1 Prof. Renan Cattelan Prática 10. Estruturas e alocação dinâmica

Programação com Objectos. 2º Teste 2015/2016 1º Semestre

UNIVERSIDADE FEDERAL DE MATO GROSSO DO SUL SISTEMAS DE INFORMAÇÃO - CÂMPUS DE COXIM FUNDAMENTOS EM ORIENTAÇÃO A OBJETOS

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

Curso - Padrões de Projeto Módulo 3: Padrões de Estrutura

Programação com Objectos Teste Teórico 18 de Dezembro de 2008, 19:00 (120 minutos)

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

Java 2 Standard Edition Classes internas

Programação Orientada a Objetos. SANTOS, Rafael (PLT) e Guia de Estudo SCJP. SIERRA, Kathy e BATES, Bert

Interfaces POO. Prof. Marcio Delamaro

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

Linguagem de Programação. Diagrama de classes

Versão: Escreva já o seu número em todas as folhas da prova.

Orientação a Objetos AULA 09

Recapitulando. Construtores: (Overload assinatura) public Circle() {...} public Circle(double x, double y, double r) {... }

6 - Padrões de Extensão

Introdução a classes e objetos. Prof. Marcelo Roberto Zorzan

Fundamentos da programação Parte - 1

Gravação de objetos em arquivos

Java Standard Edition (JSE)

Linguagem de Programação Orientada a Objeto Abstração - Encapsulamento

Computação II Orientação a Objetos

Visitor. Um problema a resolver. Temos uma hierarquia de classes, provavelmente um Composite Exemplo: Numa rede elétrica, temos a seguinte hierarquia:

Métodos em Java. Prof. Esp. André Aparecido da Silva (Aulas 31 a 33) Disponível em:

Manipulação de arquivos. João Paulo Q. dos Santos

Herança e Propriedades

Motivação. Java First-Tier: Aplicações. Entrada & Saída. Stream de Entrada. Stream de Saída. Pacote java.io. Leitura e Escrita de Streams

Polimorfismo. O que é polimorfismo?

ALOCAÇÃO DINÂMICA DE MEMÓRIA

4 Conceito de Herança

Variáveis Compostas. Vanessa Braganholo

Programação Java. Entrada & Saída

Fundamentos de programação

Usando o Eclipse - Fundamentos. Professor Vicente Paulo de Camargo

Ex: carro_desportivo poderá ser uma subclasse de automóvel (carro_desportivo é_um automóvel)

PROGRAMAÇÃO ORIENTADA A OBJETOS: OCULTAR INFORMAÇÕES E ENCAPSULAMENTO

Programação Orientada a Objetos II

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

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

Classes e Objetos. Sintaxe de classe em Java

Classe Abstrata e Interface

Iteradores. Iteradores. Isabel Harb Manssour. Roteiro. Coleções

Java Variáveis e Controle Fluxo

Vetores Unimensionais

Tratamento de Exceção. Programação Orientada a Objetos Java (Rone Ilídio)

Lição 4 Fundamentos da programação

Universidade Federal de Uberlândia Faculdade de Computação Programação Orientada a Objetos II Prof. Fabiano Dorça. Padrão Observer (Observador)

Seleção Múltipla Laços (while, do-while, for) AULA 05

Vejamos o seguinte exemplo public class Exemplo private int testada = 20; public void testapalavra(int testada) JOptionPane.showMessageDialog(null,"Pa

Programação por Objectos. Java

Programação com Objectos Teste Teórico (repescagem) 24 de Janeiro de 2009, 09:00 (120 minutos)

Repositórios JPA no Projeto ecafeteria

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

PROGRAMAÇÃO ORIENTADA A OBJETOS II -TÉCNICAS DE OO. Prof. Angelo Augusto Frozza, M.Sc.

CONCEITOS BÁSICOS DE ORIENTAÇÃO A OBJETOS PROF. ME. HÉLIO ESPERIDIÃO

Transcrição:

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

Decorator Vocês sabem como ler um arquivo texto em Java??? Pode-se usar a classe java.io.fileinputstream Vamos fazer um teste public class Leitor { public static void main(string[] args) throws Throwable{ FileInputStream arq = new FileInputStream("c:/a.txt"); byte[] conteudoembytes = new byte[arq.available()]; arq.read(conteudoembytes); arq.close(); System.out.println(new String(conteudoEmBytes)); } } Decorator e Iterator 2

Decorator A classe FileInputStream porém, não utiliza bufferização... Como utilizar um buffer para armazenar os caracteres durante a leitura? E se quisermos também ter a opção de ler dados compactados com zip? Criar uma subclasse de FileInputStream??? Pode ser... mas vamos poluir a hierarquia quando adicionarmos novos comportamentos ZipInputStream BufferedInputStream Decorator e Iterator 3

Decorator Usando herança FileInputStream ZipInputStream BufferedInputStream ZipBufferedInputStream Poluição da hierarquia!!! Decorator e Iterator 4

Decorator Alternativa: delegação!!! Decorando o comportamento de cada Stream Cliente FileInputStream Cliente BufferedInputStream FileInputStream Cliente ZipInputStream BufferedInputStream FileInputStream Decorator e Iterator 5

Decorator Estrutura <<abstract>> InputStream 1 FileInputStream FilterInputStream 1 BufferedInputStream ZipInputStream Decorator e Iterator 6

Decorator Código com buffer (muda apenas uma linha) BufferedInputStream arq = new BufferedInputStream(new FileInputStream("c:/ a.txt")); BufferedInputStream contém um FileInputStream Quando a requisição de leitura é feita... BufferedInputStream decora a leitura armazenando caracteres no buffer...... e delega o read() para FileInputStream Decorator e Iterator 7

Decorator Intenção agregar responsabilidades adicionais a um objeto dinamicamente. Fornece uma alternativa flexível ao uso de subclasses para extensão de funcionalidades. Aplicabilidade para acrescentar responsabilidades a objetos individuais sem afetar outros objetos para responsabilidades que podem ser opcionais quando a extensão através de subclasses é impraticável devido ao estouro na quantidade de subclasses Decorator e Iterator 8

Decorator Conseqüências maior flexibilidade do que a herança estática evita superclasses sobrecarregadas de características grande quantidade de pequenos objetos Decorator e Iterator 9

Decorator Vamos Implementar a leitura do arquivo usando BufferedInputStream Criando um novo tipo de decorador para InputStream chamado DedoDuroStream Sempre que a stream do arquivo é lida, imprime-se o dado lido. Crie um leitor de stream com dedo duro, bufferizado, com suporte à leitura de dados String, boolean, etc... DataInputStream d = new DataInputStream( new DedoDuroInputStream( new BufferedInputStream( new FileInputStream("c:/teste.txt") ) ) ); Decorator e Iterator 11

Importante: Tenha certeza que você entendeu a diferença do Adapter para o Decorator!

Composite Considere o projeto de um editor de documentos Quais entidades estariam presentes na modelagem do documento??? Página Figura Nota Coluna Documento Comentário Linha Caracter Tabela Composite 13

Composite Agora vamos relacioná-las... Documento * Página * Coluna * Linha Nota Caracter Figura Tabela Composite 14

Composite Problemas??? Muitos... olha só o Word!!! Documento E Sabia claro... que Texto você na pode inserir Nota. Texto em Figura? * Página * Em uma tabela... pode-se adicionar Figura, Coluna,... Coluna Spaghetti CAOS E acreditem!!! Quase Software em Crise!!! Quase tudo tudo pode ser ser * colocado comentado!!! dentro de um Linha comentário!!! Nota Caracter Figura Tabela Comentário Composite 15

Composite Solução Composite Intenção compor objetos em estruturas de árvores para representarem hierarquias partestodo. Permite aos clientes tratarem de maneira uniforme objetos individuais e composição de objetos. Composite 16

Composite Aplicabilidade para representar hierarquias parte-todo de objetos os clientes devem ser capazes de ignorar a diferença entre composições de objetos e objetos individuais Composite 17

Composite Solução Definir estruturas que podem ser compostas Definir estruturas que não podem ser compostas Definir uma interface única Fazer composição recursiva Composite 18

Composite Documento * Página * <<interface>> Desenhavel NaoComposto Composto Caracter Coluna Nota Não é composto Linha Figura Tabela É composto Composite 19

Composite Conseqüências define hierarquias de classes que consistem de objetos primitivos e objetos compostos torna o cliente simples, tratando uniformemente as estruturas primitivas e compostas torna mais fácil o acréscimo de novos componentes primitivos ou compostos pode tornar o projeto genérico demais Composite 20

Padrões semelhantes Decorator usa composição para estender funcionalidade Façade usa composição para esconder complexidade

Dúvidas?? Decorator e Iterator 22