INF011 Padrões de Projeto. 21 Memento

Documentos relacionados
Padrões Comportamentais

INF011 Padrões de Projeto. 03 Abstract Factory

INF011 Padrões de Projeto. 11 Composite

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

INF011 Padrões de Projeto. 05 Factory Method

Universidade Federal de Itajubá Instituto de Engenharia de Sistemas e Tecnologias da Informação-IESTI CCO002 Engenharia de Software

INF011 Padrões de Projeto. 15 Proxy

Padrões Comportamentais

INF011 Padrões de Projeto. 10 Bridge

INF011 Padrões de Projeto. 04 Builder

Linguagem de Programação III

INF011 Padrões de Projeto Introdução

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

RUP RATIONAL UNIFIED PROCESS

Requisitos de sistemas

Processos. Adão de Melo Neto

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

Linguagem de Maquina II. Visão Geral

Padrões de Projeto de Software

Vítor E. Silva Souza

Técnicas de Recuperação em Banco de Dados

Protótipo de Editor Gráfico de Fluxogramas para Representação de Comandos da Linguagem Portugol

Padrão: Versionamento

Introdução Diagrama de Classes Diagrama de Seqüência Diagrama de Atividades. Diagramas UML. Classe, Seqüência e Atividades. Marcio E. F.

Comunicação de Dados II

F10Backup. Mais segurança e tranquilidade para os dados da sua escola. VERSÃO 01/2015

Capítulo 7. A camada de aplicação

Estilos Arquiteturais

Universidade Federal de Uberlândia Faculdade de Computação. Linguagem C: ponteiros e alocação dinâmica

ESET Secure Authentication

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

Paradigmas de Linguagens de Programação. Tipos de Dados Abstratos

Implementando subprogramas

SSC0611 Arquitetura de Computadores

Abordagem para Construção de SI. Ciclo de Vida de Sistemas Tradicionais

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

Arquiteturas para SGBD. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

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)

Introdução Ferramentas Unix MapReduce Outras Ferramentas. Batch Processing. Fabiola Santore. Universidade Federal do Paraná

PROJETO ARQUITETURAL PARTE II: PADRÕES DE PROJETO. Projeto de Programas PPR0001

Desenvolvimento Web II

Banco de Dados. SGBDs. Professor: Charles Leite

Evandro Deliberal Aula 04

T ó p i c o s A v a n ç a d o s e m L i n g u a g e m d e P r o g r a m a ç ã o. Padrões de Projeto. Prof. Alexandre Vidal. DEINF-UFMA Janeiro de 2007

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

Componentes do Sistema Operacional (Parte 2)

Backup. É um cópia de segurança de dados de um dispositivo para outro, para que possam ser restaurados em caso de perda acidental.

Linguagem de Programação

As informações neste documento são baseadas nestas versões de software e hardware:

Configurar a restauração alternativa da configuração no módulo de FirePOWER com ASDM (o Gerenciamento da Em-caixa)

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

Processos de software

Engenharia de Software. Processos. Desenvolvimento de Software Tradicionais 2014/2. Prof. Luís Fernando Garcia

Linguagens de Domínio Específico

Matéria Introdutória. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

PIPELINE. Introdução ao Pipeline. PIPELINE Ciclo de Instruções. PIPELINE Ciclo de Instruções. PIPELINE - Exemplo. PIPELINE Considerações

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

Implementação de subprogramas

Aprendizagem de algoritmos Numéricos na Web usando PHP

LINGUAGEM C: ALOCAÇÃO DINÂMICA

Segurança e Auditoria de Sistemas. Autenticação

ISO/IEC 12207: Manutenção

ADMINISTRAÇÃO DE BANCOS DE DADOS DO MICROSOFT SQL SERVER

Estrutura de Dados. Aula 07 Alocação Dinâmica

INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE CAMPUS JOÃO CÂMARA CONTROLE DE ENTRADA E SAÍDA DE DADOS JAVA.

Prof. Esp. Fabiano Taguchi

Campus Capivari Análise e Desenvolvimento de Sistemas (ADS) Prof. André Luís Belini /

Análise e Projeto Orientados por Objetos

Organização e Arquitetura de Computadores I

Desenvolvimento Web II

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

LINGUAGEM, TIPOS DE USUÁRIOS DE SGBD E MODELOS DE DADOS

INF014 Análise e Projeto de Sistemas Processos Unificado -RUP

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

Vetores. IFSC/Florianópolis - Programação Orientada a Objetos + POO - prof. Herval Daminelli

E N C A P S U L A M E N T O P R O F. M E. H É L I O E S P E R I D I Ã O

CI208 - Programação de Computadores. Aula 24: Arrays. Prof. MSc. Diego Roberto Antunes

Linguagem de Programação

Introdução. Conceitos Básicos. Conceitos Básicos. Conceitos Básicos

Conceitos Básicos. Fundação Centro de Análise, Pesquisa e Inovação Tecnológica Instituto de Ensino Superior - FUCAPI. Disciplina: Banco de Dados

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

PROGRAMAÇÃO ORIENTADA A OBJETOS. Aula 09a- Acessando os dados através JDBC


Estruturas de Dados. Prof.: Carlos Alberto Página da Disciplina:

Introdução à Orientação a Objetos

Buffer Trabalhos MAC Binary PS Buffer de rede Configuração <de rede> x

Protótipo de Software de Reconhecimento de Voz Para Navegação em Jogos, Utilizando Rede Neural Artificial

5 Detalhamento da arquitetura para OnOCs

Desenvolvimento de Aplicações Desktop

Banco de Dados. SGBD - Sistema de Gerenciamento de Banco de Dados Parte 2. Prof. Leonardo Vasconcelos

Orientação a Objetos Parte I. Introdução a POO (Programação Orientada a Objetos)

Sistemas Operacionais Processos. Carlos Ferraz Jorge Cavalcanti Fonsêca

A crise do software As duas abordagens actuais para o desenvolvimento de software: abordagem clássica abordagem orientada para objectos

DESENVOLVIMENTO DE SISTEMAS WEB. Lista de Exercícios AV2-01. Luiz Leão

24/09/2014. Prof. André Backes

Introdução à Programação Aula 02. Prof. Max Santana Rolemberg Farias Colegiado de Engenharia de Computação

Modelo de Von Neumann

Introdução à Orientação a Objetos em Java

Transcrição:

INF011 Padrões de Projeto 21 Memento Sandro Santos Andrade sandroandrade@ifba.edu.br Instituto Federal de Educação, Ciência e Tecnologia da Bahia Departamento de Tecnologia Eletro-Eletrônica Graduação Tecnológica em Análise e Desenvolvimento de Sistemas

Propósito: Capturar e externalizar o estado interno de um objeto, sem violar o encapsulamento, com o objetivo de restaurar este estado no objeto em um momento futuro Também conhecido como: Token Motivação: Pode-se precisar armazenar o estado interno de um objeto para implementar, por exemplo, checkpoints e mecanismos de undo que possibilitam o retrocesso da aplicação a um estado anterior Expor o estado, entretanto, viola o encapsulamento e prejudica a confiabilidade e extensibilidade da aplicação

Motivação: Editor gráfico com conexões entre objetos (ConstraintSolver): processo falho de undo

Motivação: O Memento é um objeto que armazena um snapshot do estado interno de outro objeto o originador do Memento Processo correto de undo com uso do Memento: O editor, como um efeito colateral da operação move(), requisita um Memento do ConstraintSolver O ConstraintSolver cria e retorna o Memento (instância de SolverState), contendo estruturas de dados que descrevem o estado atual das equações e variáveis internas do ConstraintSolver Mais tarde, quando o usuário desfizer a operação, o editor envia de volta o SolverState para o ConstraintSolver Baseado na informação do SolverState o ConstraintSolver modifica suas estruturas internas para o estado anterior

Aplicabilidade: Quando deseja-se salvar um snapshot do estado (ou parte do estado) de um objeto, de modo que ele possa ser restaurado para este estado, em um momento futuro E Utilizar uma interface direta para obter o estado iria expor detalhes de implementação e violar o encapsulamento do objeto

Estrutura:

Participantes: Memento (SolverState): Armazena o estado interno do objeto originador. Pode armazenar somente o estado mínimo necessário para a discretização do objeto Impede o acesso de outro objetos que não sejam o originador Mementos possuem duas interfaces: Uma restrita (narrow), utilizada pelo Caretaker, somente para passar o Memento para outros objetos Uma ampla (wide), utilizada pelo originador, para acessar todos os dados necessários à restauração do estado prévio

Participantes: Originator (ConstraintSolver): Cria o Memento contendo o snapshot do estado interno atual Usa o Memento para restaurar seu estado interno Caretaker (mecanismo de undo): É responsável pela custódia do Memento Nunca opera o Memento ou examina o seu conteúdo

Colaborações: O Caretaker solicita o Memento ao originador, o mantém por um tempo e então o envia de volta ao originador

Consequências: Preserva os limites de encapsulamento: O Memento evita expor informações que somente o originador deveria manipular mas precisam ser armazenadas fora do originador Isola outros objetos de detalhes internos potencialmente complexos, preservando os limites do encapsulamento Simplifica o originador: Em outras soluções o originador manteria versões de estados internos requisitados pelos clientes Isto traria toda a responsabilidade de gerenciamento deste armazenamento para o originador Ao decidir que os clientes gerenciarão o estado mantém-se o originador simples

Consequências: O uso do Memento pode gerar altos custos: Alto overhead pode ser gerado se o originador tiver de copiar grandes quantidades de informação para o Memento ou se os clientes criam e retornam Mementos para o originador muito frequentemente O padrão só é apropriado quando o encapsulamento e restauração do estado do originador têm custo baixo Definindo as interfaces narrow e wide: Pode ser difícil em algumas linguagens garantir que somente o originador irá acessar o estado do Memento Custos adicionais de custódia de Mementos: O Caretaker é responsável pela desalocação de Mementos porém ele não sabe o tamanho do Memento

Implementação: Suporte da linguagem: Para implementar as interfaces narrow e wide a linguagem de programação deveria, idealmente, suportar dois níveis de proteção estática:

Implementação: Suporte da linguagem: Para implementar as interfaces narrow e wide a linguagem de programação deveria, idealmente, suportar dois níveis de proteção estática:

Implementação: Armazenando mudanças incrementais: Quando os Mementos são criados e devolvidos para o originador, em uma sequência prevista, o Memento pode armazenar somente a mudança incremental do estado do originador Ex: comandos undoable podem utilizar Mementos para garantir que comandos sejam restaurados para o seu estado anterior quando forem desfeitos

Código exemplo:

Código exemplo:

Código exemplo:

Usos conhecidos: UniDraw Dylan QOCA

Padrões relacionados: Commands podem utilizar Mementos para manter o estado de operações reversíveis Mementos podem ser utilizados para iterações

INF011 Padrões de Projeto 21 Memento Sandro Santos Andrade sandroandrade@ifba.edu.br Instituto Federal de Educação, Ciência e Tecnologia da Bahia Departamento de Tecnologia Eletro-Eletrônica Graduação Tecnológica em Análise e Desenvolvimento de Sistemas