Trabalho de Persistência
para o EPOS
Propostas para a Solução

Proposta 1: Usar templates, para que quando o
usuário deseje que um objeto seja persistente,
basta instanciá-lo da forma <Objeto>Persistent().


Vantagem: Maior facilidade para o usuário.
Problema: C++ não da suporte a reflexão.
Propostas para a Solução

Proposta 2: Usar um modificador, onde o usuário
precisaria apenas declarar “persistent objeto”.


Vantagem: Maior facilidade para o usuário.
Problema: Para que isso seja possível, precisaríamos
alterar o compilador, que não é o foco dessa disciplina.
Propostas para a Solução

Proposta 3: Criar uma classe Persistent, que
precisará ser extendida por todos os objetos que
forem persistentes.


Vantagem: Possibilidade de ser implementada.
Desvantagens: Mais complexo para o usuário, já que
ele precisará possuir um maior conhecimento de como
foi implementada a persistência para implementar os
métodos abstratos.
Implementação



Foi escolhida a Proposta 3 por ser a única
implementável.
Será criada uma classe persistente para cada classe do
SO utilizável pelo usuário, que extenderá a classe
Persistent.
Todo objeto que extender a classe Persistent deve
implementar o método serialize(in fields :
ClassFields*).
Implementação
Foi criada uma interface Memory para que diferentes
tipos de memória possam ser utilizados, bastando
implementar os métodos save, load e size.
Implementação
A classe PersistenceManager vai gerenciar a geração
de novos id's e o armazenamento dos objetos através
da interface Memory. a classe de interface a
memória, podendo troca-la para outa classe da
mesma ou de outra memória.
Armazenamento dos dados



Quando for definida a memória a ser utilizada através
do método setMemory, o PersistenceManager
carregará o índice de objetos da memória.
A primeira posição da memória conterá o tamanho do
índice.
Cada elemento do índice será composto de:
identificador, endereço e tamanho.
Diagrama de classes
Sequência - Load
Sequência – Save
Download

Propostas para a Solução