Buscar

Persistência de objetos em arquivos de texto usando Java

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 3 páginas

Prévia do material em texto

Persistência de objetos em arquivo texto usando Java 
 
➢ Objeto em arquivo: 
● Um arquivo para cada objeto e um objeto para cada arquivo 
● O arquivo contém o estado do objeto 
● Cada arquivo deve ter um nome único 
● O estado de um objeto é composto de todos os seus atributos e ligações com outros objetos 
 
➢ Interface do cliente: 
● O cliente que "cria" um objeto primeiramente cria-o em memória, define seu estado e em 
seguida torna-o persistente, invocando um método para esse fim (por exemplo, ​save​) 
● O cliente que "reinstancia" o objeto primeiramente cria-o em memória com estado indefinido e 
em seguida restaura seu estado persistente, invocando um método para esse fim (por 
exemplo, ​restore​) 
 
➢ Encapsulamento: 
● Cada atributo e ligação de um objeto somente deve ser escrito e lido do arquivo pela 
correspondente classe 
● Cada classe deve implementar um método para ler (por exemplo, ​restore_state​) e outro para 
escrever (por exemplo, ​save_state​) todos os atributos e associações que define 
 
➢ Mecanismo baseado em herança: 
● Toda classe de objetos persistentes deve ser derivada de uma classe que implementa a 
interface do cliente (por exemplo, ​PO​, com os métodos ​save ​e ​restore​) 
● O método ​save da classe ​PO invoca o método ​save_state ​(definido em ​PO ​e sobrecarregado 
em cada classe da hierarquia) 
● O método ​restore da classe ​PO invoca o método ​restore_state ​(definido em ​PO ​e 
sobrecarregado em cada classe da hierarquia) 
● O método ​save_state de uma classe persistente invoca o método ​save_state de sua 
superclasse e escreve o seu estado no arquivo 
● O método ​restore_state de uma classe persistente invoca o método ​restore_state de sua 
superclasse e lê o seu estado do arquivo 
 
➢ Persistência de atributos em arquivo texto: 
● Cada atributo do objeto é representado como uma substring no arquivo 
● Se o atributo não for do tipo String, uma conversão de tipos é necessária (tanto na escrita 
como na leitura) 
● Cada substring correspondente a um atributo é finalizada com um marcador (por exemplo, 
"**") 
 
➢ Bibliotecas de Java: 
● java.lang.* 
● java.io.* 
 
➢ Exemplo de escrita: 
try 
{ 
FileOutputStream fos = new FileOutputStream("Joao.os"); 
FileDescriptor fd = fos.getFD(); 
FileWriter fw = new FileWriter (fd); 
fw.write("Joao da Silva"); 
fw.flush(); 
fw.close(); 
} 
catch (IOException e) { System.out.println(e); } 
 
➢ Exemplo de leitura: 
try 
{ 
FileInputStream fis = new FileInputStream("Joao.os"); 
FileDescriptor fd = fis.getFD( ); 
FileReader fr = new FileReader (fd); 
char[ ] buffer = new char[1024]; 
fr.read(buffer); 
String os = new String(buffer); 
System.out.println(os); 
 
fr.close( ); 
} 
catch (IOException e) { System.out.println(e); } 
 
 
Identificação Única de Objetos 
 
➢ Propriedades: 
● OID : Object Identity 
● Designa um objeto de maneira única (não ambígua) no sistema 
● Constante durante toda a vida do objeto 
● Permite integridade de referência entre objetos 
● Independe dos atributos do objeto (não é chave-primária) 
● Gerada automaticamente pelo sistema quando um objeto é criado 
● O instante de criação do objeto é o próprio instante de criação da OID 
● Não é reutilizável 
● Não contém informação sobre a localização corrente do objeto 
● Pode indicar local e instante de criação 
● É um ​nome​ que deve ser resolvido (por um servidor de nomes) para descobrir a localização 
do objeto (o serviço de persistência que armazena o objeto) 
 
➢ Implementação: 
● Numeração sequencial: 
class OID 
{ 
private static long contador; 
private long id; 
OID( ) { contador ++; id = contador; } 
... 
} 
 
● Local e instante de criação 
class OID 
{ 
private int hora; private int minuto; private int segundo; 
private int dia; private int mes; private int ano; 
String IP; 
public: 
 OID( ) { ... } 
} 
 
 
➢ Classe ObjectState: 
● contém todo o estado de um objeto 
● oferece operações básicas para empacotar/desempacotar atributos de tipos básicos (int, long, 
char, float, ...) 
● objeto de outra classe deve oferecer operações para se empacotar/desempacotar em uma 
instância de ObjectState. Exemplo: classe Cor 
● EX: 
✓ Classe Veículo: 
marca : String 
ano : int 
cor : { azul, amarelo, verde} 
✓ Classe Carro: 
numero de passageiros : int 
✓ Classe Caminhao: 
capacidade de carga : float 
✓ Classe Pessoa: 
nome : String 
sexo: boolean 
✓ Associações: 
classe Pessoa e classe Veiculo: uma pessoa é proprietária de​ n 
veículos 
classe Pessoa e classe Carro: um carro transporta ​n ​pessoas 
Devem haver operações para ligar/desligar dois objetos 
✓ Classes Veículo e Pessoa são subclasses de PO 
✓ Cada classe define as operações save_state e restore_state 
✓ Cada classe possui dois construtores: 
criação: gera OID e chama save_state 
reencarnação: usa OID fornecida como parâmetro para chamar 
restore_state 
✓ O destrutor da classe deve chamar save_state

Outros materiais