Carregar apresentação
A apresentação está carregando. Por favor, espere
PublicouMariana Paz Alterado mais de 9 anos atrás
1
Projeto PLP Persistência em OO1 Equipe: Ana Paula Cavalcanti Clelio Feitosa Zildomar Felix Professor: Augusto Sampaio
2
Índice Escopo e Objetivo BNF Parser Projeto Estratégia Adotada Persistência de Variável Persistência de Classe Persistência de Objeto
3
Escopo e Objetivo Declarações de variáveis, classes e objetos Persistentes ou Transiente O armazenamento deve ser de forma explícita para o programador, porém de forma transparente Transiente Declaração na memória Persistente Cópia do Contexto de Execução para um arquivo
4
BNF - Alterações Programa ::= "{" DecClasse "," Comando "}" | "{" Comando "}“ DecClasse ::= "classe" Id "{" DecVariavel ";“ DecProcedimento "}" | "persistente" "classe" Id "{" DecVariavel ";" DecProcedimento "}" | DecClasse "," DecClasse DecVariavel ::= Tipo Id "=" Expressao | Tipo Id ":=" "new" Id | "persistente" Tipo Id "=" Expressao | "persistente" Tipo Id ":=" "new" Id | DecVariavel "," DecVariavel
5
Parser Inclusão to token Reconhecer de forma transparente para o desenvolvedor o que vai ser armazenado em arquivo Produções para declarações Persistentes Declaração de Variável Declaração de Classes Objetos
6
Parser Programa PPrograma() : { DecClasse decClasse = null; Comando comando = null; } { (decClasse = PDecClasse() )* comando = PComando() { if (decClasse!=null) { System.out.println("defClasse..."); return new Programa(decClasse, comando); } else return new Programa(comando); }
7
Parser – Declaração de Classes DecClasse PDecClasse(): { DecClasse retorno; } { ( LOOKAHEAD(PDecClasseAtomica() ) retorno = PDecClasseComposta() | LOOKAHEAD(PDecClasseAtomicaPersistente() ) retorno = PDecClasseCompostaPersistente() | LOOKAHEAD(PDecClasseAtomica()) retorno = PDecClasseAtomica() | LOOKAHEAD(PDecClasseAtomicaPersistente()) retorno = PDecClasseAtomicaPersistente() )
8
Parser – Declaração Atômica {inclusão} DecClasse PDecClasseAtomicaPersistente(): { Id nomeClasse; DecVariavel atributos; DecProcedimento metodos; } { nomeClasse = PId() atributos = PDecVariavel() metodos = PDecProcedimento() { return new DecClasseSimples(nomeClasse, atributos, metodos, true); }
9
Parser – Declaração Composta {inclusão} DecClasseComposta PDecClasseCompostaPersistente(): { DecClasse d1; DecClasse d2; } { d1 = PDecClasseAtomicaPersistente() d2 = PDecClasse() { return new DecClasseComposta(d1, d2); }
10
Parser DecVariavel PDecVariavelAtomica(): { DecVariavel retorno; } {( LOOKAHEAD( PTipo() PId() PExpressao()) retorno = PSimplesDecVariavelPersistente() | LOOKAHEAD( PTipo() PId() ) retorno = PDecVariavelObjetoPersistente() |LOOKAHEAD(PTipo() PId() ) retorno = PDecVariavelObjeto() | LOOKAHEAD( PDecVariavel() ) retorno = PDecVariavel() | LOOKAHEAD(PTipo() PId() PExpressao()) retorno = PSimplesDecVariavel() ){ return retorno; }
11
Parser – Declaração Objeto DecVariavelObjeto PDecVariavelObjetoPersistente() : { Id id, idClasse; Tipo tipo; } { tipo = PTipo() id = PId() idClasse = PId() { return new DecVariavelObjeto(tipo, id, idClasse, true); }
12
Parser… SimplesDecVariavel PSimplesDecVariavelPersistente() : { Id id; Expressao exp; SimplesDecVariavel retorno; Tipo tipo; } { ( tipo = PTipo() id = PId() exp = PExpressao() { retorno = new SimplesDecVariavel(tipo, id, exp, true); } ) { return retorno; }
13
Projeto - Ambiente Contexto Execução Persistente -pilhaIdValor -pilhaDefClasse -pilhaObjeto -Pilhas de entrada e saídas -Registros Persistentes
14
Projeto – Contexto de Execução Persistente
15
Alterações de Classes Muitas classes tiveram que implementar a interface Serializable do java (Expressao, Declaracao, Comando, etc.) Em todas as chamadas de "new ContextoExecucao(ambiente)" foi trocado por "new ContextoExecucaoPersistente(ambiente)";
16
Projeto – Classes Alteradas expressao.leftExpression AcessoAtributiID.java Substituição da chamada de getValorObjeto(Id) ao invés de getValor(Id) expressao.valor ValorRef.java Removido o método getNextRef para o contexto persistente e correção do bug do "equals(Object)"; memoria AmbienteExecucao.java Adicionado métodos auxiliares para persitência de objetos (getValorObjeto) Objeto.java Adicionado o método alterarEstado(Objeto novoEstado); Imperative1.command Atribuicao.java Adicionado no método executar as condições para persistência;
17
Projeto – Classes Criadas memoria.persistencia ContextoExecucaoPersistente RegDefinicaoClassePersistente RegIdValorPersistente RegistroPersistente RegObjetoPersistente RegValorPersistente StackPersistente
18
Estratégia Adotada para Persistir Usar Stream Um stream é uma sequência ordenada de dados com uma fonte e um destino
19
Estratégia Adotada para Persistir Montagem de Stream Leitura/gravação de bytes – read() Leitura/gravação de objetos inteiros – readObject(); Direção: Ler Tipo: Objeto Fonte: Arquivo Processamento: Serialização
20
Estratégia Adotada para Persistir Serialização de Objetos Um objeto possui atributos que definem seu estado Objetos não sobrevivem à morte do programa; O que fazer se quisermos gravar uma cópia dos objetos e recuperar a cópia depois? ; Uma forma é de gravar os objetos em arquivo, se forma serial ; A serialização significa gravar, sequencialmente e byte-por-byte, os atributos de um objeto; Utilidade: colocar objetos num lugar que só pode ser acessado sequencialmente Exemplo: guardar/ler objetos em arquivos.
21
Estratégia Adotada para Persistir O que fazer para serializar os objetos? Usar a Interface Serializable Interface de marcação Classe que implementa é marcada como objeto Serializable
22
Persistência de Variável Exemplo Execução do programa { Persistente int x=4; write(x) } Novo Programa { write(x) }
23
Persistência de Variável O que acontece agora? Novo Construtor da SimplesDecVariavel 1.public SimplesDecVariavel(Tipo tipo, Id id, Expressao expressao, boolean b) 2.public AmbienteExecucao elabora(AmbienteExecucao ambiente) if (isPersistente) ((ContextoExecucaoPersistente)ambiente).mapValorP(id, expressao.avaliar(ambiente)); else ambiente.mapValor(id, expressao.avaliar(ambiente));
24
Persistência de Variável public void mapValorP(Id idArg, Valor valorId) throws VariavelJaDeclaradaException { StackHashIdValor pilha = (StackHashIdValor)lerPersistencia(regIdValorP); HashIdValor aux = pilha.peek(); if (aux.put(idArg, valorId) != null) { throw new VariavelJaDeclaradaException(idArg, "persitente"); } else { persistirDados(regIdValorP, pilha); } AmbienteExecucaoPesistente
25
Persistência de Classe Novo Construtor 1.public DecClasseSimples(Id nomeClasse, DecVariavel atributos, DecProcedimento metodos, boolean b) 2.public AmbienteExecucao elabora(AmbienteExecucao ambiente) throws ClasseJaDeclaradaException, ClasseNaoDeclaradaException {..... if (isPersistente)..... ((ContextoExecucaoPersistente)ambiente).mapDefClasseP(nomeClass e, new DefClasse(atributos,metodos)); else ambiente.mapDefClasse(nomeClasse, new DefClasse(atributos,metodos)); return ambiente; }
26
Persistência de Classe ContextoExecucaoPesistente public void mapDefClasseP(Id idArg, DefClasse defClasse) throws ClasseJaDeclaradaException { StackHashIdDefClasse stackTmp = (StackHashIdDefClasse)lerPersistencia(regDefClasseP); HashIdDefClasse aux = (HashIdDefClasse)stackTmp.peek(); if (aux.put(idArg, defClasse) != null) { throw new ClasseJaDeclaradaException(idArg, "persistente"); } else { persistirDados(regDefClasseP, stackTmp); } }
27
Persistência de Objeto Objeto Serializado => “RegObjetoPersistente” Persistir um objeto é persistir o próprio + seu estado (recursivamente) Elemento chave foi definir uma “chave primária” (RegValorRef) cada objeto criado (chamada em “new”)
28
Persistência de Objeto Para persistir é usado o método “mapObjetoP(ValorRef, Objeto)” em seguida, “alterarEstado(getPilhaObjeto())” em ContextoExecucaoPersistente para permitir persistir o estado (recursivamente) dos objetos
29
Persistência de Objeto Na atribuição de um valor do objeto (seu estado) chamada de “changeValorObjeto(ValRef, Objeto)” para ler da persistencia e depois com o seu estado, chama, recursivamente, os demais para buscar o objeto certo
Apresentações semelhantes
© 2024 SlidePlayer.com.br Inc.
All rights reserved.