You are on page 1of 19

ESTRUCTURA DE DATOS II

MEMORIA PERSISTENTE
EXPOSITOR:

Ing. Evans Balcazar Veizaga
DEFINICION
VENTAJAS DEL MODELO PERSISTENTE
DESVENTAJAS DEL MODELO PERSISTENTE
EJEMPLO
BIBLIOGRAFIA
A la caracterstica que le permite a un objeto existir mas all del tiempo
de vida del programa que lo instancia, se le llama persistencia, de tal
suerte, los objetos pueden se clasificados como :
Transitorios:
Cuyo tiempo de vida depende directamente del
mbito de la funcin que los instanci (o
del programa en caso de ser globales).
Persistentes:
Cuyo estado es almacenado en un medio
secundario para su posterior reconstruccin y
utilizacin, por lo que su tiempo de vida es
independiente del programa que los
instanci.
Existen varias formas en las que un programador puede resolver el
problema del almacenamiento de objetos Una de ellas es escribir
directamente los objetos en archivos, para lo cual el programador
deber crear el cdigo que a partir de las libreras del lenguaje le
permitan almacenar y recuperar los objetos.

En esta modalidad, el programador deber convertir las
representaciones en memoria de los objetos a flujos de bytes (a este
proceso se le conoce como serializacin).

La serializacin y todas las dems consideraciones de almacenamiento
(manejo de archivos, indexacin, distribucin, paginacin, relaciones
entre objetos, etc...) quedan a cargo del programador. Esto requiere de
un gran esfuerzo de programacin.
Actualmente, coexistiendo con estos sistemas anteriormente
mencionados estn surgiendo nuevas iniciativas, la mayora de ellas
ideadas para conseguir que los lenguajes de programacin soporten
objetos persistentes.

Persistencia en Java
Si nos centramos en el lenguaje de programacin Java, por ejemplo,
vemos que existe un amplio abanico de posibilidades cara a conseguir
dicho objetivo. As, nos encontramos con proyectos como Pjava
(Persistent Java), que proporciona un entorno de programacin
persistente para el lenguaje Java basado en una modificacin de su
plataforma.
Esquema general para la inclusin de funcionalidades de bases de datos
en un lenguaje
de programacin.
Persistencia en C++

El operador new (palabra clave C++) proporciona espacio de
almacenamiento persistente, similar pero superior a la funcin de
Librera Estndar malloc. Este operador permite crear un objeto de
cualquier tipo, incluyendo tipos definidos por el usuario, y devuelve un
puntero (del tipo adecuado) al objeto creado.
Su utilizacin exige que el usuario declarare un puntero del tipo
adecuado; a continuacin debe ser inicializado con el valor devuelto
por el operador. Si el objeto creado es tipo T, sera algo as:

T* puntero = valor-devuelto-por-el-operador;
Los objetos creados con new son persistentes, es decir, la vida del
nuevo objeto es desde el punto de creacin hasta el final del programa o
hasta que el programador lo destruya explcitamente con el operador
delete. Este ltimo desasigna la zona de memoria ocupada por el
objeto, de forma que queda disponible para nuevo uso. Las sucesivas
invocaciones de este operador van reservando zonas de memoria en el
montn para los objetos sucesivamente creados. El gestor de memoria
del compilador se encarga de mantener una tabla con los sitios
ocupados y libres sin que haya conflictos hasta que la memoria se ha
agota, o no existe espacio contiguo suficiente para el nuevo objeto. En
cuyo caso se lanza una excepcin como indicativo del error.

Peligros
La persistencia de los objetos creados con new y su independencia del
mbito desde el que han sido creados, es muy importante y de tener en
cuenta, pues suele ser motivo de prdidas de memoria en el programa si
olvidamos destruirlos cuando ya no son necesarios . Hay que prestar
especial atencin, porque en una sentencia como:
voidfunc() {
...
tipoX* Xptr = new tipoX;
...
}
el rea de almacenamiento sealada por el puntero es persistente, pero
Xptr que es una variable local automtica no lo es. Si olvidamos
destruir el objeto creado (con delete) antes de salir del mbito, el rea
de almacenamiento permanecer ocupando espacio en el montn y no
podr ser recuperada nunca, pues el puntero Xptr habr desaparecido.
La cuestin de prdida de memoria no es solo cuestin de que el
programador "recuerde" utilizar delete antes de salir del mbito del
puntero. Tambin puede producirse por otras circunstancias. Por
ejemplo, el mecanismo de lanzamiento y captura de excepciones C++
puede funcionar como un salto, goto o break multinivel, que saque
abruptamente de mbito al puntero con la consiguiente prdida
irreparable. La situacin puede ser esquematiza como sigue (la figura
adjunta muestra el estado de la pila y el alcance del desmontaje -"Stack
unwinding"- caso de producirse un error).
fun1() {
try { fun2(); }
catch (...) {
...
}
}
fun2() {
A* aptr = new A; // crear objeto
foo();
...
delete aptr; // Ok. destruir el objeto
} // antes de salir de mbito
foo() {
...
if (x) throw "Error";
...
}
La situacin anterior es de gran peligro potencial. Si se produce la
condicin x, y se lanza la excepcin en foo, la pila ser desmontada
hasta el punto de la sentencia catch en fun1 que recibir el control. La
secuencia de ejecucin no pasar nunca por el delete de fun2, con lo
que el espacio del objeto A se perder irremediablemente.
Conscientes del deficiente maridaje entre el operador new y el sistema
C++ de excepciones, los diseadores de la Librera Estndar, han
incluido en esta un puntero "inteligente" auto_ptr, que resuelve este
tipo de problemas.
La persistencia permite al programador el almacenar, transferir y
recuperar el estado de los objetos.
La persistencia es muy difcil de implementar puesto que es muy
compleja ya que le exige al programador el manejo de Puntero.

Todo objeto creado de forma persistente debe de ser destruido
cuando ya no se lo necesita puesto que ocasiona prdidas de
memoria en el programa si olvidamos destruirlos.
#include<conio.h>
#include<iostream.h>
#include <vcl.h>
#pragma hdrstop
#include <fstream.h>
class persona
{
private:
String nombre;
public:
persona();
void setnom(String s);
String getnom();
};
persona::persona()
{
nombre="vacio";
}
void persona:: setnom(String s)
{
nombre=s;
}
String persona::getnom()
{
return nombre;
}

void main ()
{
persona p,q;
p.setnom("iris");
ofstream out;
out.open("persona.dat");
out.write((char*)&p,sizeof(persona));
out.close();
ifstream in;
in.open("persona.dat");
in.read ((char*)&q,sizeof(persona));
out.close();
cout<< q.getnom();
getch();
}

[4] M. Atkinson, L. Dayns, M. Jordan, T. Printezis, S. Spence. An
Orthogonally Persistent Java. SIGMOD Record, Vol 25 N4. December,1996
[5] Steven T. Abell. Using Java with PSE. Java White Paper.
http://www.odi.com, March 1999.

http://www.programacin.com
Autora y Enviado por:
ROCIO BAILON CARPIO con correo BRITNEYRK@HOTMAIL.COM el
da 10 de julio de 2006
PROGRAMA DE VISUAL BASIC 5.0
A:
http://www.Programacin en castellano_ Foros de debate_ Visual FoxPro
programacion gratis.htm
Copyright 1999-2006 Programacin en castellano. Todos los derechos
reservados. Informacin extraide de dicha pgina web a las 9:30 pm. El da
viernes 15 de septiembre de 2006.
http://www.itlp.edu.mx/publica/revistas/revistali/anteriores/marzo99/actual3.ht
ml
http://www. Formas de Proveer la Persistencia.htm Autor: Ing. Marco Antonio
Castro Liera. Informacin extraide de dicha pgina web a las 8:00 pm. El da
Jueves 14 de septiembre de 2006.

Ambler, S. Persistence layer requirement. Software develpoment. 6(1) 70-
71, January 1998.

Ambler, S. Persistence modeling in the UML. Software
Development Magazine. http://www.sdma gazine.com/articles/1999/
0008a.htm. August 1999.

Ambler, S. The Design of Robust Persistence Layer for Relational
Database. http://www.amysoft.com/ persistencelayer.pdf. October 21,
2000.
Sitio Web http://www.zator.com/CPP/E4_9_20a.html Autor Copyright 2000-
2006 Zator Systems. Informacin extrada de dicha pagina el 26 de septiembre
de 2006 a las 9:25 pm.

You might also like