Nazareno Andrade (baseado no material de Hyggo Almeida)

Slides:



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

Programação em Java Prof. Maurício Braga
I/O Carlos Bazilio Depto de Ciência e Tecnologia
Carlos Roberto Marques Junior
Construção de Algoritmos 2
Programação em Java Prof. Maurício Braga
Estruturas de Repetição
Sockets Marco Antonio – marcoreis.net Arquiteto de Software Dezembro/2007.
Collections Marco Antonio, Arquiteto de Software – TJDF Atualizado Dezembro/2008.
Entrada e Saída Marco Antonio Arquiteto de Software Dezembro/2007.
Projeto de Sistemas de Software
Padrão de Projeto Interpreter
Projeto de Sistemas de Software Kelly Leal Leandra Mara da Silva
Projeto de Sistemas de Software Hazel, Juliana e Luana
Padrão de Projeto Composite
PRDS - Programa de Residência em Desenvolvimento de Software Laboratório de Engenharia de Software (LES) da PUC-Rio Carlos Lucena
Persistência de objetos em arquivo texto usando Java
De 17 1 Linguagens de Programação Orientadas a Objetos Pós-Gradução(Lato-Sensu) em Sistemas de Banco de Dados - UFPa Marco Fagundes Aula.
Iniciação ao Java – Márcio F. Campos
Streams Java.
Adapter.
Padrões GoF - Composite
Introdução ao paradigma de programação: Orientado a Objetos
Classes e objetos Arrays e Sobrecarga
Classes e objetos P. O. O. Prof. Grace.
Introdução a Programação JAVA
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Threads: Introdução e Implementação
Strategy e Template Method
Programação Orientada a Objetos com Java
Professor: Hyggo Almeida
Fundamentos da Engenharia de Software
Visão crítica sobre padrões: Over Engineering
Padrões de projeto detalhados Factory Method, Abstract Factory
Singleton e Adapter Professor: Nazareno Andrade
PROGRAMAÇÃO ESTRUTURADA II
Conteúdos do tutorial O que é um Slide Mestre?
JAVA Linguagem Ambiente de Desenvolvimento
METODOLOGIA PARA DESENVOLVIMENTO DE SISTEMAS Prof. Dr. rer. nat. Daniel D. Abdala 1.
Streams –input e output
Entendendo as definições de classe
OPERADORESOPERADORES SCJP – Otimize-TI. Operadores Java Resultado: Maioria das operações é um booleano ou numérico. Não podem ser sobrecarregados (Existem.
Linguagem de Programação JAVA
Estudo de Caso: um editor de documentos
Arquivos if669 - Introdução à Programação Monitoria de IP Igor Ebrahim (ies) Nicole Sultanum (nbs2) Paulo Borba (phmb)
Professora Lucélia Oliveira
Acoplamento e Coesão Modelagem e Programação Orientada a Objetos
BC-0502 Metodologia e Algoritmos Computacionais Santo André, Abril de Arquivos em Java.
Capítulo 10. Stream – Fluxo I/O  Acessando o sistema de arquivos java.io.File  Gravação em arquivos texto java.io.FileWriter java.io.BufferedWriter.
1 JAVA I/O (Entrada e Saída em JAVA) Prof. Alexandre Monteiro Recife.
Programação Orientada a Objetos - Java
Programação Orientada a Objetos - Java
UTFPR – Campus Curitiba - DAELN Cursos de Eng. Eletrônica/Eng
Polimorfismo.
Decorator POO - Avançado.
Linguagem I Strings.
JAVA Sintaxe.
Aula Prática 1 Monitoria IP/CC (~if669) (A partir do slide elaborado por Luís Gabriel)
Herança Modelagem e Programação Orientada a Objetos
Socket em Java.
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ões: Composite (p. 163) Objetivo: compor objetos em estruturas de árvores para representar relações de parte/todo. “Composite” permite tratar objetos.
Programação Distribuída em Java Aula Na aula passada vimos: Introdução –O que podemos fazer na rede Conceito de Rede –Máquinas conectadas Protocolos.
Padrão Composite Definição
Jobson Ronan Padrões GoF Jobson Ronan
Padrões de Projetos Orientados a Objetos I Wolley W. Silva.
Padrões de Projeto Aula 9 – Padrão Adapter.
Análise e Projeto de Sistemas Análise & modelagem conceitual Prof. Edjandir Corrêa Costa
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.
Transcrição da apresentação:

Nazareno Andrade (baseado no material de Hyggo Almeida) 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

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

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

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

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

Decorator Código com buffer (muda apenas uma linha) 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 BufferedInputStream arq = new BufferedInputStream(new FileInputStream("c:/a.txt")); Decorator e Iterator

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

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

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

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??? Coluna Nota Figura Página Comentário Linha Documento Caracter Tabela Composite

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

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

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

Composite para representar hierarquias parte-todo de objetos 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

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

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

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

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

Dúvidas? ? Decorator e Iterator