Padrões de Projeto de Software

Documentos relacionados
Structural Patterns - Flyweight

INF011 Padrões de Projeto. 04 Builder

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

INF011 Padrões de Projeto. 05 Factory Method

Linguagem de Maquina II. Visão Geral

Exercícios de Sistemas Operacionais 3 B (1) Gerência de Dispositivos de Entrada e Saída

Gerência do Sistema de Arquivos. Adão de Melo Neto

INF011 Padrões de Projeto. 15 Proxy

Matrizes esparsas: definição

Modelagem de Dados MODELAGEM DE DADOS. Sistemas de Banco de Dados. Profa. Rosemary Melo

Padrão de projeto de software

Banco de Dados 30/04/2012 1

Programação Orientada a Objetos

Arquitetura e Organização de Computadores

SSC510 Arquitetura de Computadores 1ª AULA

Sistemas Operacionais

Bancos de dados. Sistemas de bancos de dados. Professor Emiliano S. Monteiro

Capítulo 11 Sistemas de Arquivos

Conceitos relativos a Banco de Dados & Modelos de Informação de Banco de Dados. Introdução

Gerência do Sistema de Arquivos. Adão de Melo Neto

FundamentosemInformática

ORGANIZANDO DADOS E INFORMAÇÕES: Bancos de Dados

Revisando Banco de Dados. Modelo Relacional

LINGUAGEM C: ARQUIVOS

Orientação a objetos. Objetos ou Instâncias I

5 Arrays. 5.1 Criando um array. 5.2 Inicializando arrays. c:\>java Array Janeiro tem 31 dias.

Arquitetura e Organização de Computadores

Introdução a Sistemas Operacionais. Adão de Melo Neto

MATRIZES E DETERMINANTES

Curso: Banco de Dados I. Conceitos Iniciais

Gerência de Dispositivos. Adão de Melo Neto

Tema da aula Introdução ao paradigma de programação: Orientado a Objetos

Paradigmas de Linguagens

ÁRVORES E ÁRVORE BINÁRIA DE BUSCA

Subsistemas de E/S Device Driver Controlador de E/S Dispositivos de E/S Discos Magnéticos Desempenho, redundância, proteção de dados

Universidade Federal do Espírito Santo Departamento de Informática 1 o Trabalho de Algoritmos Numéricos I - 14/2 Sistemas Lineares

Faculdade Ieducare 4º Semestre Sistemas de Informação Professor: Rhyan Ximenes

Curso teórico: Orientação a Objetos. Matemática computacional Marcos Aurelio Wozhiak Jr webzhiak.com.br

Agenda. O que é um array. Declaração de um array. Instanciação de um array. Acessando os elementos de um array. O tamanho de um array (length)

O que faz? De tudo um pouco.

Representação de Arranjos

Programação Orientada a Objetos

Sistemas de arquivos

Computação I: Linguagem de Programação Python

LINGUAGEM C: ALOCAÇÃO DINÂMICA

Aula 3 Conceitos de memória, variáveis e constantes Cleverton Hentz

Introdução a Padrões, GRASP. Nazareno Andrade (baseado no material de Hyggo Almeida e Jacques Sauvé)

BCC202 - Estrutura de Dados I

Programação de Computadores - I. Profª Beatriz Profº Israel

UML (Linguagem Modelagem Unificada) João Paulo Q. dos Santos

Gerência de Dispositivos. Adão de Melo Neto

Programação Estruturada e Orientada a Objetos. Objetos e Métodos

Análise e Projeto de Software

Compressão de Textos. Introdução. Introdução. Introdução. O volume de informação textual disponível on-line é imenso:

Curso de PHP. - Início 22 de agosto - Término 20 de outubro. -Aulas: segunda e quinta-feira -Horário:18h às 20h. -Carga horária do curso: 40h

Padrões de Projeto. Abstract Factory

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

Conjunto de Instruções

Organização e Arquitetura de Computadores I

Análise e Projeto Orientados a Objetos: Visibilidade Diagrama de Classe de Projeto

18/10/2010. Unidade de Controle Controle. UC Microprogramada

UNIVERSIDADE FEDERAL RURAL DO SEMI-ÁRIDO CURSO: CIÊNCIA DA COMPUTAÇÃO. Prof.ª Danielle Casillo

Modelagem Orientada a Objeto

Factory Pattern. SISMO - Sistemas e Mobilidade Junho de Departamento de Informática / UFMA

Processador: Conceitos Básicos e Componentes

Programação Concorrente. 2º Semestre 2010

Programação de Computadores I Dados, Operadores e Expressões PROFESSORA CINTIA CAETANO

Informática básica. Professor: Francisco Ary

Padrões de Design. Padrões de Design. Abstract Factory. Padrões de Design. Padrões de Design Abstract Factory. Abstract Factory.

Universidade Estadual de Mato Grosso do Sul Bacharelado em Ciência da Computação Algoritmos e Estruturas de Dados II Prof. Fabrício Sérgio de Paula

Memória Virtual. Prof. M.Sc. Bruno R. Silva CEFET-MG Campus VII

Aula 12: Memória: Barramentos e Registradores

Recursividade UFOP 1/48

Seqüências de Caracteres

Programação Estruturada Orientada a Objetos

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

Organização de Computadores

Programação Paralela e Distribuída Lista de Exercícios P2 2008/1

Manipulação de Arquivos. Técnicas de Programação

25/8/2010. Praticamente todas as arquiteturas de computadores fornecem mais de um modo de

Hashing: conceitos. Hashing

Aplicação de Tags em Objetos de Sistemas de Visualização em Tempo Real

Sistemas Operacionais. Capítulo 5 Processos

Programação: Vetores

SISTEMA DE ARQUIVOS DO SISTEMA OPERACIONAL

Prof. Adriano Maranhão COMPILADORES

Aula 2 BD Introdução. Profa. Elaine Faria UFU

Alocação Dinâmica em C

Introdução. descrever os tipos de interfaces e linguagens oferecidas por um SGBD. mostrar o ambiente de programas dos SGBD s

ELETRÔNICA DIGITAL II. AUTOR: ENG. ANTONIO CARLOS LEMOS JÚNIOR

MANUTENÇÃO DE COMPUTADORES SISTEMAS NUMÉRICOS

Fundamentos de Banco de Dados Aula II

Engenharia de Software

Sistema de entrada e saída (E/S)- Módulos de E/S; tipos de operações de E/S

Teoria dos Grafos. Valeriano A. de Oliveira Socorro Rangel Departamento de Matemática Aplicada.

Alguns Exercícios Resolvidos

Classes o Objetos. Classes, objetos, métodos e variáveis de instância

MATA60 BANCO DE DADOS Aula 3- Modelo de Entidades e Relacionamentos. Prof. Daniela Barreiro Claro

INF1337 LINGUAGEM DE PROGRAMAÇÃO ORIENTADA A OBJETOS

Transcrição:

Padrões de Projeto de Software Flyweight Paulo Gomide Departamento de Ciência da Computação Universidade de Itaúna

Sumary

Flyweight Definição Usa compartilhamento para suportar uma grande quantidade de objetos de baixa granularidade de forma eficiente; Um objeto compartilhado, como o próprio padrão, é conhecido por Flyweight;

Motivação Abstrair até o último nível pode ser muito custoso, especialmente em aplicações que utilizam grande número de objetos. Problema Específico Um exemplo real onde o isso acontece é no desenvolvimento de um editor de texto; Se cada caracter é representado por um objeto diferente, pode não haver recursos (memória) sufientes para textos muito grandes.

Motivação

Motivação Solução Flyweight: monta-se um pool de objetos compartilhados ou pool de Flyweights; Dessa forma, cada caracter tem um objeto nesse pool; Com 100 objetos (tabela ASCII) poderíamos montar textos de qualquer tamanho.

Motivação Logicamente existe um objeto para cada ocorrência de um dado caracter no documento.

Motivação Entretanto, fisicamente existe um objeto flyweight para cada caracter e ele aparece em diferentes contextos do documento. Cada ocorrência de um dado caracter referencia a mesma instância daquele caracter no pool de flyweights.

Motivação

Estrutura do Problema Específico

Observações Intuito do Flyweight O padrão procura fatorar as informações comuns a diversos objetos; Desassocia o que é intrínseco do que é extrínseco ao objeto: Intrínseco: inerente, próprio do objeto. Informações independentes de contexto, podendo, por isso, ser compartilhadas. Essas informações são armazenadas no Flyweight; Extrínseco: depende e varia com o contexto, não podendo, por isso, ser compartilhado. Tal estado é armazenado no cliente.

Aplicabilidade Requisitos para se Aplicar o Padrão O uso do padrão Flyweight é indicado quando: Aplicação utiliza grande número de objetos; Custos de armazenamento altos; A maior parte dos estados dos objetos pode ser tornada intrínseca (estados internalizados); Muitos objetos podem ser substituídos por poucos compartilhados; Aplicação não depende da identidade dos objetos. testes de identidade produzirão o valor verdadeiro para objetos conceitualmente distintos.

Estrutura do Problema Geral

Estrutura do Problema Geral

Participantes do Padrão Client Mantém uma referência ao flyweight; Armazena o estado extrínseco do flyweight. Flyweight Define a interface através da qual os objetos flyweight recebem e agem em relação ao estado extrínseco. FlyweightFactory Cria e gerencia os objetos no pool de flyweight; Garante que o compartilhamento está correto.

Participantes do Padrão ConcreteFlyweight São compartilhadas. Implementa a interface flyweight e adiciona características intrínsecas. Ex.: Character. UnsharedConcreteFlyweight Não são compartilhadas; A interface permite o compartilhamento, mas não obriga a utilizá-lo; Ex.: Row, Column.

Colaborações Colaborações do Padrão Clientes devem obter Flyweights exclusivamente da Factory, sem instanciar o ConcreteFlyweight diretamente; O estado intrínseco é armazenado no ConcreteFlyweight; O estado extrínseco é armazenado no Client, que o passa ao Flyweight quando chamam suas operações.

Conseqüências Vantagens 1. Redução de consumo de memória como função de vários fatores: Redução do total de instâncias resultantes do compartilhamento; Quantidade de estado intrínseco armazenado por objeto; Se o estado extrínseco é armazenado ou computado. 2. Quanto mais objetos Flyweights, mais economia de memória. Desvantagens 1. Aumento do custos de run-time associados com transferência, busca e/ou computação do estado extrínseco. Compensado pela economia em uso de memória...

Código de Exemplo Considere o exemplo de motivação: um editor de textos. Definimos uma classe base para os objetos gráficos Flyweights (Gliph).

Código de Exemplo Sua subclasse Character é responsável apenas por armazenar o código do caractere.

Código de Exemplo A fim de armazenar os atributos extrínsecos usamos a classe GliphContext como um repositório de estados extrínsecos (fonte, por exemplo). Desse modo, qualquer operação que precise saber a fonte do glifo num contexto particular, receberá um objeto GliphContext como parâmetro.

Código de Exemplo Outro objeto necessário é o FlyweightFactory que cria glifos e garante que são compartilhados adequadamente. A classe GlyphFactory instancia Character e outros tipo de objetos glifos, compatilhando alguns (Character) e outros não (Row, Column).

Código de Exemplo O vetor character (pool) armazena ponteiros para glifos Character indexados pelo código do caracter. No construtor o vetor character é inicializado com zero.

Código de Exemplo A operação CreateCharacter busca a referência àquele caracter no vetor character (pool). Caso a referência exista, ela é retornada. adicionada ao vetor e retornada. Caso contrário, ela é criada,

Código de Exemplo As demais operações apenas instanciam um novo objeto quando ele é chamado, uma vez que eles não são compartilhados.

Padrões Relacionados Composite O padrão Flyweight é normalmente combinado com o padrão Composite; Esta combinação é usada para implementar a estrutura hierárquica lógica na forma de um grafo acíclico direcionado para o compartilhamento das folhas.

Obrigado pela atenção! Dúvidas?