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