Professional Documents
Culture Documents
Estructura De
Datos
PERSISTENCIA
Capacidad para conseguir que los
datos sobrevivan a la ejecucin del
proceso que los creo, de forma que
puedan ser reutilizados en otro
proceso.
Se entiende por persistencia en la
programacin orientada a objetos
como la capacidad que tienen los
objetos de conservar su estado e
identidad entre distintas ejecuciones
del programa que los cre o de otros
programas que accedan a ellos.
Persistencia como
mecanismo
La persistencia no es ni una
capacidad ni una propiedad de la
POO, no tiene nada que ver con el
paradigma en s, solo es el
mecanismo que se usa para persistir
informacin de un determinado tipo
(como puede ser serializar, guardar los
datos en una tabla, en un archivo
plano, etc).
Objetivos de la
persistencia
La
persistencia
permite
al
programador almacenar, transferir y
recuperar el estado de los objetos.
Para esto existen varias tcnicas:
Serializacion
Motores de persistencia
Bases de datos orientadas a objetos
ARCHIVOS/FILAS
Un archivo o fichero de datos es una
coleccin de registros relacionados
entre si con aspectos en comn y
organizados para un propsito
especifico.
Un archivo en una computadora es
una
estructura
diseada
para
contener
datos,
estos
estn
organizados de tal modo que puedan
ser
recuperados
fcilmente,
actualizados
o
borrados
y
almacenados de nuevo en el archivo
con todos los cambios realizados
ARCHIVOS/FILAS
Este tema se centra en el uso de los archivos
como flujos de datos de un programa, tanto de
entrada, para proporcionar los datos necesarios
para realizar la tarea que ejecuta el programa,
como de salida, para almacenar los datos
obtenidos por el programa.
Se puede considerar un flujo como una secuencia
de caracteres.
FLUJOS
Todos los datos fluyen a travs del ordenador desde una entrada hacia
una salida.
Este flujo de datos se denomina tambin stream.
Hay un flujo de entrada (input stream) que manda los datos desde el
exterior (normalmente el teclado) del ordenador, y un flujo de salida
(output stream) que dirige los datos hacia los dispositivos de salida (la
pantalla o un archivo).
ORGANIZACION
La organizacin de un archivo define la forma
en la que los registros se disponen sobre el
soporte de almacenamiento, o tambin se
define la organizacin como la forma en que
se estructuran los datos en un archivo. En
general, se consideran tres organizaciones
fundamentales:
Organizacin secuencial
Organizacin directa
Organizacin indexada
APLICACIN
MEMORIA SECUNDARIA
Archivos
DISCO
MEMORIA PRIMARIA
Arreglos
0
Listas
micrfono
impresora
Archivos binarios /
texto
Disco duro
Cinta magntica
ARCHIVO BINARIO/TEXTO
Almacena caracteres ASCII
texto
Almacenamiento
en archivo
Almacena en hexadecimal
Binario
ARCHIVO BINARIO
Estructura de un
archivo binario
REGISTRO 1
REGISTRO 2
:
Dividido en segmentos
de igual tamao
REGISTRO N-1
REGISTRO N
EOF
UBICACIN LGICA Y
FSICA
Especificacin ALUMNO
variables
entero : cdigo
cadena: nombre
real : nota
operaciones
significado
Fin_ALUMNO
lgica
0
En C++
fsica
0
56
112
CODIGO NOMBRE
NOTA
90021
10
89765
11
78560
15
Suponemos que
cdigo, nombre y
nota suma en total
56 bytes
ACCESO AL DISCO
Para empezar, los discos distribuyen los datos en
dos o tres dimensiones. Las cabezas de
lectura/escritura se mueven a lo largo del radio
del disco, a distancias preestablecidas. Cada una
de esas distancias define una pista
A su vez, cada pista est dividida en partes ms
pequeas, llamadas sectores.
cada disco est compuesto en realidad por varios
discos llamados platos, cada plato tiene dos
caras, y en cada cara se coloca una cabeza de
lectura/escritura.
De modo que para acceder a un dato ser
necesario calcular en qu plato, pista y sector
est almacenado, mover la cabeza a la pista
adecuada y esperar a que el sector pase por
debajo de la cabeza correspondiente al plato
indicado
ACCESO AL DISCO
La unidad mnima que se puede leer o
escribir en un disco es un sector. El tamao
del sector es variable, generalmente son de
512 bytes, pero pueden ser diferentes.
El sistema operativo no trabaja directamente
con sectores, sino con clusters. Cada
cluster tiene un nmero entero de sectores.
Una velocidad de 5400RPM permitir una
transferencia entre 10MB y 16MB por
segundo con los datos que estn en la
parte exterior del cilindro o plato, algo
menos en el interior.
An
cuando
los
microprocesadores
utilizados en los discos duros son
relativamente
poderosos,
las
tareas
asignadas a ellos toman tiempo en llevarse
a cabo. En promedio, este tiempo est en el
rango de los .003 milisegundos.
ORGANIZACIN SECUENCIAL
La Fila secuencial es una estructura
de datos lineal
en la cual los
elementos estn dispuestos uno tras
de otro, de tal modo que en las
operaciones
para manipular los
elementos se respeta la secuencia
de los mismos en la estructura.
Inicio de
archivo
Registro 1
Registro 1
:
Registro 1
:
Registro N-1
fin de
archivo
Registro N
ORGANIZACIN SECUENCIAL
Accesar el prximo registro es trivial.
Para agregar registros a un archivo
secuencial hay dos opciones:
Crear un nuevo archivo.
Agregar al final del archivo.
Para eliminar los registros estos se
pueden marcar (necesidad de un
campo extra) o se debe crear un
nuevo archivo.
Los archivos secuenciales ocupan un
tamao mnimo, o sea, slo el espacio
requerido para el almacenamiento de
los registros.
ORGANIZACIN DIRECTA
Los datos se colocan y se
acceden aleatoriamente
mediante su posicin, es
decir, indicando el lugar
relativo
que
ocupan
dentro del conjunto de
posiciones posibles.
En esta organizacin se
pueden leer y escribir
registros, en cualquier
orden y en cualquier lugar.
ORGANIZACIN DIRECTA
Ventaja
Rapidez de acceso a un
registro cualquiera
Desventajas
Establecer la relacin entre
la posicin que ocupa un
registro y su contenido;
Puede
desaprovecharse
parte del espacio destinado
al archivo
ORGANIZACIN INDEXADA
AREA DE DATOS
CLAVE
010
234
011
234
:
019
234
020
345
021
345
DIRECCION
010
:
345
020
422
030
467
040
678
090
029
345
030
422
:
039
422
DATOS
ORGANIZACIN INDEXADA
01- Razon: A
Fecha: 01/01/11
cod
Descrip
PU
CANT
11
10
18
20
01
Cada objeto de
fila
DATOS
tiene 114 bytes
Fila de DATO
Direccin fsica
Cod.
Descrip.
Pu
cant
01
11
10
01
18
20
01
01
Fila de INDICE
#
Razn
fecha
Dir.
342
01
01/01/11
02
09
4.5
02
02/05/12
342
02
11
15
08
14/07/12
570
570
08
01
010
20/09/12
684
684
010
03
0.5
30
ORGANIZACIN INDEXADA
Ventaja
Rpido acceso, y, adems, el sistema se
encarga de relacionar la posicin de cada
registro con su contenido por medio del
rea de ndices.
Gestiona las reas de ndices y
excedentes.
Desventajas
Necesidad de espacio adicional para el
rea de ndices.
El desaprovechamiento de espacio que
resulta al quedar huecos intermedios libres
despus de sucesivas actualizaciones.
ALGUNAS MEDIDAS DE
RENDIMIENTO
La eleccin de la organizacin
determina el rendimiento relativo del
sistema para cada una de las tres
caractersticas enunciadas:
Almacenamiento requerido por un
registro.
Tiempo de bsqueda de un registro.
Tiempo requerido para leer todo el
archivo.
Tiempo requerido para insertar un
registro.
Tiempo para modificar un registro.
Rpido Acceso
Economa de
Almacenamiento
Facilidad de Uso
PRIMITIVAS
Para F : identificador de fila/archivo/fichero
v : variable del mismo tipo de dato que almacena la fila
inicio( F )
leer ( F , v )
escribir ( F , v )
ltimo ( F )
cerrar ( F )
cierra la fila F
ubicar( F, p )
comprimir( F, p )
ORGANIZACIN
DIRECTA
Encontrar primero cdigo
0344
cdigo
nombre
0123
Carlos
0856
Mara
0344
Juan
0944
Ana
0723
Jorge
k = i
ORGANIZACIN
DIRECTA
Se elimino el cdigo
0344
cdigo
nombre
0123
Carlos
0856
Mara
0344
Juan
0944
Ana
0723
Jorge
i
k
ORGANIZACIN
DIRECTA
Se elimino el cdigo
0344
cdigo
nombre
0123
Carlos
0856
Mara
0944
Ana
0944
Ana
0723
Jorge
i
k
ORGANIZACIN
DIRECTA
Se elimino el cdigo
0344
cdigo
nombre
0123
Carlos
0856
Mara
0944
Ana
0944
Ana
0723
Jorge
i
k
ORGANIZACIN
DIRECTA
Se elimino el cdigo
0344
cdigo
nombre
0123
Carlos
0856
Mara
0944
Ana
0723
Jorge
0723
Jorge
i
k
ORGANIZACIN
DIRECTA
Se elimino el cdigo
0344
cdigo
nombre
0123
Carlos
0856
Mara
0944
Ana
0723
Jorge
0723
Jorge
i
k
ORGANIZACIN
DIRECTA
Se elimino el cdigo
0344
cdigo
nombre
0123
Carlos
0856
Mara
0944
Ana
0723
Jorge
PERSISTENCIA EN C++
ARCHIVOS
DOCENTE
ASIGNATURA
Posible en C++
cdigo
nombre
edad
01
Juan
20
04
Mara
18
cdigo
nombre
credito
01112
Estadstica
04023
Matemtica I
08999
Algoritmica
cdigo
nombre edad
categoria
0177
Guerra
20
Auxiliar
0409
Pablo
18
asociado
class PERSONA{
int codigo;
String nombre;
int edad
}
class ASIGNATURA{
int codigo;
String nombre;
int credito
}
No es Posible
en C++
class DOCENTE{
int codigo;
String nombre;
int edad;
String categoria
ASIGNATURA curso[] = new ASIGNATURA[5];
MANEJO DE FILAS EN C
Actualmente existen tres formas para manejar los archivos
en lenguaje C, entre los dos primeros, uno llamado de
primer nivel (tambin llamado secuencial) y otro llamado de
segundo nivel (tambin llamado tipo registro o de alto nivel).
1. En el nivel ms bajo se considera el archivo como un
conjunto de bytes continuos, esto sin tener en cuenta
como se han grabado, un usuario puede leer la
cantidad de bytes que desee no importando la
posicin en la cual se encuentren stos.
2. En el modo de ms alto nivel se puede acceder a uno
o varios registros, es decir, lo que se lee cada vez es
una agrupacin lgica. Las operaciones de primer
nivel, como se las llama a las de nivel ms bajo, son
las ms potentes. Se dice que estas operaciones son
las primitivas del sistema: son las operaciones
bsicas. Las de segundo nivel se construyen a partir
de stas.
#include <stdio.h>
#include <io.h>
void main() {
int f, modo=0x01;
if( (f= open("Nombre1", modo))==-1){
printf("NO se puede abrir ! ");
}
}
Si el archivo NO existe lo
crea. El acceso ser de
lectura-escritura. Todo lo
que escriba en el archivo
borrar la informacin
existente. Si el modo es
O_RDONLY, slo se podr
leer
#include <stdio.h>
#include <io.h>
#include <fcntl.h>
void main(){
int f, modo=0x04; /* Se puede usar O_RDWR en vez de modo */
if( (f= open("Nombre1", modo|O_CREAT))==-1) {
printf("NO se puede abrir ! ");
} else printf(" Archivo Abierto !");
}
Modo
Descripcin
INSTRUCCIONES DE SEGUNDO
NIVEL
En las instrucciones de segundo nivel los archivos
ya no se designan por un nmero, sino, por un
puntero a una estructura compleja llamada FILE
cuya descripcin se haya en el archivo stdio.h.
Apertura de archivo
FILE *fopen(char *nombrefich, char *modo);
Modo Descripcin
"r"
"w"
"a"
"r+"
INSTRUCCIONES DE SEGUNDO
NIVEL
Lectura de archivo
int fread(char *p,int s,int n, FILE *fp);
Escritura de archivo
fwrite(char *p,int s,int n, FILE *fp);
Cerrar archivo
int fclose(FILE *fp);
Posicionamiento en un archivo
fseek(FILE *fp, long pos, int modo); /* Anloga a lseek */
Condicin de fin de archivo
int feof(FILE *fp);
Posicionamiento al comienzo de un archivo
rewind(FILE *fp);
int main(){
char op; int dato;
ENTERO e;
for(;;){
cout<<" \n adicionar <1>";
cout<<" \n Mostrar <2>";
cout<<" \n salir <3>";
op=getch();
switch(op){
case '1':cout<<"\n Ing entero :";cin>>dato;
e.REGISTRAR(dato);break;
case '2':e.MOSTRAR();getch(); break;
case '3':return 0;
}
}
}
PERSISTENCIA EN JAVA
Si bien pudieran encontrarse otros
mecanismos alternativos, es posible que
resultaran problemticos y dieran lugar a
errores, e incluso podran llegar a
complicarse si se necesitara realizar un
seguimiento de la jerarqua de los objetos.
En el caso en el que se debiera escribir
una aplicacin para una gran empresa que
contenga varios miles de objetos y se
tuviera que escribir cdigo para guardar en
un disco y recuperar desde ste los
campos y propiedades para cada objeto, la
serializacin proporcionara el mecanismo
adecuado para conseguir este objetivo con
el mnimo esfuerzo.
PERSISTENCIA EN JAVA
ARCHIVOS
cdigo
nombre
edad
01
Juan
20
04
Mara
18
class PERSONA{
int codigo;
String nombre;
int edad
}
ASIGNATURA
cdigo
DOCENTE
SERIALIZACION
nombre
credito
01112
Estadstica
04023
Matemtica I
08999
Algoritmica
cdigo
nombre edad
categoria
0177
Guerra
20
Auxiliar
0409
Pablo
18
asociado
class ASIGNATURA{
int codigo;
String nombre;
int credito
}
No es Posible
en C++ pero si
en java
class DOCENTE{
int codigo;
String nombre;
int edad;
String categoria
ASIGNATURA curso[] = new ASIGNATURA[5];
Metodo para
visualizar la
informacion de un
archivo de texto
Metodo para
visualizar la
informacion de un
archivo de binario
RANDOMACCESSFILE
RandomAccessFile se usa para los archivos que
contengan registros de tamao conocido, de forma
que se puede mover de un registro a otro utilizando
seek(), para despues leer o modificar los registros.
RandomAccessFile tiene un comportamiento
esencialmente distinto al de otros tipos de E/S,
puesto que se puede avanzar y retroceder dentro de
un archivo.
Fundamentalmente un RandomAccessFile funciona
igual que un DataInputStream unido a un
DataOutputStream junto con los metodos
getFilePointer para averiguar la posicin actual en
el archivo, seek() para moverse a un nuevo punto
del archivo, y length() para determinar el tamao
mximo del mismo.
RANDOMACCESSFILE
import java.lang.*;
import java.io.*;
class ARCH {
BufferedReader teclado = new BufferedReader(new InputStreamReader(System.in));
String n;
int clave=0;
int edad=0;
long tregistro=58;
long cregistros=0;
public String leer(String m){
System.out.print(m+" : ");
try{ n=teclado.readLine( );
catch(Exception e){
return n;
}
}
}
RANDOMACCESSFILE
void INGRESAR( ){
String nombre="";
try {
File arch=new File("archivo1.dat");
RandomAccessFile archivo=new RandomAccessFile(arch,"rw");
clave = Integer.parseInt(leer("dame clave"));
nombre=leer("dame nombre");
if (nombre.length( ) < 25){
for(int i=nombre.length( ); i <25; i++)
nombre=nombre+" ";
}
Se registran
else{ nombre=nombre.substring(0,25); };
edad = Integer.parseInt(leer("dame edad"));
con a
lo
if (archivo.length( )!= 0){
caracters
archivo.seek( archivo.length( ) );
};
archivo.writeInt(clave);
archivo.writeChars(nombre);
archivo.writeInt(edad);
archivo.close( );
}
catch(FileNotFoundException f) { System.out.println("Arch. No existe"); }
catch (IOException e) { System.out.println("Error al escribir"); }
}
nombres
mas 25
RANDOMACCESSFILE
void ELIMINAR( ){
El mtodo ELIMINAR es muy largo, en
int c1;
esta parte
se busca la clave a
String n1="";
eliminar,cuando se da con ella se
int e1;
captura la posicin en el archivo y
String nombre="";
luego se asigna a k(k = n)
boolean cond=false;
int k;
try{
File arch=new File("archivo1.dat");
RandomAccessFile archivo=new RandomAccessFile(arch,"rw");
cregistros=archivo.length( ) / tregistro;
int n=0;
int c = Integer.parseInt(leer("dame clave a buscar"));
while(n<cregistros){
archivo.seek(n*58);
clave=archivo.readInt( );
if(clave == c){ cond=true; break;}
n=n+1;
}
k=n;
RANDOMACCESSFILE
if(cond){
for(;;){ k++;
if(k< cregistros){
archivo.seek(k*58);
c1=archivo.readInt( );
for(int i = 0; i < 25; ++i){ n1 += archivo.readChar( );};
e1=archivo.readInt( );
archivo.seek(n*58);
archivo.writeInt(c1);
archivo.writeChars(n1);
archivo.writeInt(e1);
n1="";
n++;
}
else { archivo.close( );
File arch2=new File("archivo1.dat");
RandomAccessFile archivo2=new RandomAccessFile(arch,"rw");
archivo2.setLength(n*58);
archivo2.close();
break;
}
Se
comprime el
}
archivo
}
else archivo.close( );
}
catch(FileNotFoundException f) { System.out.println("Arch. no existe"); }
catch (IOException e) { System.out.println("Error al escribir"); }
}
Continua la clase ARCH
RANDOMACCESSFILE
void MOSTRAR( ){
int clave=0;
String nombre="";
int edad=0;
try {
File arch=new File("archivo1.dat");
RandomAccessFile archivo=new RandomAccessFile(arch,"rw");
cregistros=archivo.length( ) / tregistro;
for (int r=0; r < cregistros; r++){
clave=archivo.readInt( );
for(int i = 0; i < 25; ++i){ nombre += archivo.readChar( ); };
edad=archivo.readInt( );
System.out.println(clave+" "+nombre+" "+edad);
nombre="";
};
archivo.close( );
}
catch(FileNotFoundException f) { System.out.println("Arch. no existe"); }
catch (IOException e) { System.out.println("Error al escribir"); }
}
RANDOMACCESSFILE
public static void main(String[ ] args) {
ARCH a=new ARCH();
for(;;){
System.out.println("REGISTRAR <1>\n VER <2>\n ELIMINAR <3>\n SALIR <4>");
switch (Integer.parseInt(a.leer("opcion : "))){
case 1:a.INGRESAR( );break;
case 2:a.MOSTRAR( );break;
case 3:a.ELIMINAR( );break;
case 4:System.exit(0);
}
}
REGISTRAR <1>
} // cierra main
VER <2>
ELIMINAR <3>
SALIR <4>
opcin : : 2
345 CARLOS
789 MARIA
45
12
Que es Serializacin?
La serializacin es el proceso de convertir el
estado de un objeto a un formato que se pueda
almacenar o transportar.
Durante este proceso, los campos pblico y
privado del objeto y el nombre de la clase,
incluido el ensamblado que contiene la clase, se
convierten en una secuencia de bytes que, a
continuacin, se escribe en una secuencia de
datos.
Cuando, despus, el objeto se deserializa, se
crea una copia exacta del objeto original.
Serializacin para
crear un objeto
La serie de bytes o el formato pueden
ser usados para crear un nuevo objeto
que es idntico en todo al original,
incluido su estado interno (por tanto, el
nuevo objeto es un clon del original).
Serializacin para
transporte de objetos
La serializacin es un mecanismo
ampliamente usado para transportar
objetos a travs de una red, para
hacer persistente un objeto en un
archivo o base de datos, o para
distribuir objetos idnticos a varias
aplicaciones o localizaciones.
Soporte de Lenguajes
Varios lenguajes de programacin
orientados a objeto soportan la
serializacin de forma directa.
Algunos de ellos son:
Objective-C
Java
Delphi
C#
Visual Basic .NET
Perl
Python
USANDO SERIALIZACION
La serializacin en Java est presente desde la
versin 1.1 y est incluida en el paquete java.io.
ste contiene la interfaz Serializable, que ser
implementada por la clase que necesita el uso de
esta caracterstica. As mismo, se aaden dos
mtodos a dicha clase, que son:
private void writeObject(java.io.ObjectOutputStream out)
throws IOException
private void readObject(java.io.ObjectInputStream in)
throws IOException, ClassNotFoundException;
SERIALIZAR UN OBJETO
Para serializar un objeto:
DESERIALIZAR UN OBJETO
Para deserializar:
Crear un InputStream.
Envolverlo dentro de un ObjectInputStream.
Llamar al mtodo readObject().
Se efecta un upcast a Object, por lo que
hay que realizar un downcasting.
USANDO SERIALIZACION
import java.io.*;
public class serial {
public static void main(String args[ ]) {
serializando
//Serializamos el objeto
try {
MiClase obj1 = new MiClase("String", 15);
System.out.println("Objeto 1: " + obj1);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("serial"));
oos.writeObject(obj1);
oos.close( );
} catch (Exception e)
{System.out.println("si"+e.getMessage());System.exit(0);}
//Deserializacin del objeto
try {
MiClase obj2;
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("serial"));
obj2 = (MiClase)ois.readObject( );
ois.close();
System.out.println("Objeto 2: " + obj2);
} catch(Exception e) {System.out.println(e.getMessage( ));System.exit(0);}
}
}
deserializando
USANDO SERIALIZACION
Clase serializable
PROBLEMA EN LA
SERIALIZACION
Un problema en el ObjectOutputStream es que al instanciarlo,
escribe unos bytes de cabecera en el fichero, antes incluso de que
escribamos nada. Como el ObjectInputStream lee correctamente
estos bytes de cabecera, aparentemente no pasa nada y ni
siquiera nos enteramos que existen.
El problema se presenta si escribimos unos datos en el fichero y lo
cerramos. Luego volvemos a abrirlo para aadir datos, creando un
nuevo ObjectOutputStream as
Esto escribe una nueva cabecera justo al final del fichero. Luego
se irn aadiendo los objetos que vayamos escribiendo. El fichero
contendr lo del dibujo, con dos cabeceras.
PRIMERA SESION
cabecera
obj1
obj2
SEGUNDA SESION
obj3
cabecera
obj4
obj5
obj6
obj7
PROBLEMA EN LA
SERIALIZACION
PRIMERA SESION
cabecera
obj1
obj2
SEGUNDA SESION
obj3
cabecera
obj4
obj5
obj6
obj7
PROBLEMA EN LA
SERIALIZACION
Una solucin es hacer nuestro propio
ObjectOutputStream, heredando del original y
redefiniendo el mtodo writeStreamHeader()
como en la figura, vaco, para que no haga
nada.
PRIMERA SESION
cabecera
obj1
obj2
SEGUNDA SESION
obj3
cabecera
obj4
obj5
obj6
obj7
Objetos de ambas
clases se
serializaran
SERIALIZACION CON UN
OBJETO COMPUESTO
class MiObjectOutputStream extends ObjectOutputStream{
/** Constructor que recibe OutputStream */
public MiObjectOutputStream(OutputStream out) throws IOException {
super(out);
}
/** Constructor sin parmetros */
protected MiObjectOutputStream() throws IOException, SecurityException {
super();
}
/** Redefinicin del mtodo de escribir la cabecera para que no haga nada. */
protected void writeStreamHeader() throws IOException {
}
}
SERIALIZACION CON UN
OBJETO COMPUESTO
class PRINCIPAL{
public void escribeFichero(String fichero, String x,int y){
try {
ALUMNO obj1 = new ALUMNO(x,y);
obj1.VIS();
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(fichero));
oos.writeObject(obj1);
oos.close( );
} catch (Exception e){
{System.out.println(e.getMessage());}
}
}
public void anhadeFichero (String fichero,String x,int y){
try{
ALUMNO obj1 = new ALUMNO(x,y);
obj1.VIS();
MiObjectOutputStream oos = new MiObjectOutputStream(new FileOutputStream(fichero,true));
oos.writeObject(obj1);
oos.close( );
} catch (Exception e){
{System.out.println(e.getMessage());}
Continua la clase
}
PRINCIPAL
}
<4>");
PERSISTENCIA HOY
Salvar los objetos depende del lenguaje en el que se est
trabajando:
PERSISTENCIA HOY
En los lenguajes como C++, slo puede
recuperarse el estado de un objeto guardado
previamente; sin embargo no puede saberse a
qu clase pertenece el objeto, y ni siquiera si
es un objeto.
En lenguajes como Java, la recuperacin es
un poco mejor, puesto que podemos obtener
el archivo .class y el de datos; sin embargo, la
recuperacin y el tratamiento de estos
archivos slo es realmente sencillo si es la
misma aplicacin que los grab la que los va a
utilizar.
ESENCIA DE LA PERSISTENCIA
La investigacin en persistencia trata de ir un paso
ms all que la idea inicial de guardar objetos en
archivos de la misma forma que es posible guardar
todo tipo de datos en ellos.
Se trata de proporcionar un mecanismo tan
automtico como sea posible para la recuperacin
y salvaguarda de objetos, resultando por tanto
obsoletos los conceptos de:
Archivo: ya no es necesario.
Distincin entre memoria primaria y
secundaria: ya no es necesaria.