SlideShare ist ein Scribd-Unternehmen logo
1 von 19
ESTRUCTURA DE DATOS II MEMORIA PERSISTENTE UNIVERSIDAD AUTONOMA "GABRIEL RENE MORENO" FACULTAD DE CIENCIAS EXACTAS Y TECNOLOGIA ,[object Object],[object Object]
MODELO DE DATO PERSISTENTE DEFINICION VENTAJAS DEL MODELO PERSISTENTE DESVENTAJAS DEL MODELO PERSISTENTE EJEMPLO BIBLIOGRAFIA
DEFINICION A la característica 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 función que los instanció (o del  programa en caso de ser globales). Persistentes: Cuyo estado es almacenado en un medio  secundario para su posterior reconstrucción y  utilización, por lo que su tiempo de vida es  independiente del programa que los instanció.
DEFINICION 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 código que a partir de las librerías 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 serialización). La  serialización  y todas las demás consideraciones de almacenamiento (manejo de archivos, indexación, distribución, paginación, relaciones entre objetos, etc...) quedan a cargo del programador. Esto requiere de un gran esfuerzo de programación.
Lenguajes de Programación Persistentes Actualmente, coexistiendo con estos sistemas anteriormente mencionados están surgiendo nuevas iniciativas, la mayoría de ellas ideadas para conseguir que los lenguajes de programación soporten objetos persistentes. Persistencia en Java Si nos centramos en el lenguaje de programación 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 programación persistente para el lenguaje Java basado en una modificación de su plataforma.
Lenguajes de Programación Persistentes Esquema general para la inclusión de funcionalidades de bases de datos en un lenguaje de programación.
Persistencia en C++ El operador new (palabra clave C++) proporciona espacio de almacenamiento persistente, similar pero superior a la función de Librería Estándar 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 utilización exige que el usuario declarare un puntero del tipo adecuado; a continuación debe ser inicializado con el valor devuelto por el operador. Si el objeto creado es tipo  T , sería algo así: T* puntero = valor-devuelto-por-el-operador; Lenguajes de Programación Persistentes
Los objetos creados con  new  son  persistentes , es decir, la vida del nuevo objeto es desde el punto de creación hasta el final del programa o hasta que el programador lo destruya explícitamente 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 montón 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 excepción como indicativo del error.   Lenguajes de Programación Persistentes
Lenguajes de Programación Persistentes 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 pérdidas de memoria en el programa si olvidamos destruirlos cuando ya no son necesarios . Hay que prestar especial atención, porque en una sentencia como: voidfunc() {   ...   tipoX* Xptr = new tipoX;   ... }
Lenguajes de Programación Persistentes el área de almacenamiento señalada por el puntero es persistente, pero Xptr que es una variable local automática 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 montón y no podrá ser recuperada nunca, pues el puntero Xptr habrá desaparecido. La cuestión de pérdida de memoria no es solo cuestión de que el programador "recuerde" utilizar  delete  antes de salir del ámbito del puntero. También 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 pérdida irreparable. La situación 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";    ... } Lenguajes de Programación Persistentes
La situación anterior es de gran peligro potencial. Si se produce la condición x, y se lanza la excepción en foo, la pila será desmontada hasta el punto de la sentencia  catch  en fun1 que recibirá el control. La secuencia de ejecución 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 diseñadores de la Librería Estándar, han incluido en esta un puntero "inteligente"  auto_ptr , que resuelve este tipo de problemas.  Lenguajes de Programación Persistentes
VENTAJAS DEL MODELO PERSISTENTE La persistencia permite al programador el almacenar, transferir y recuperar el estado de los objetos.
DESVENTAJAS DEL MODELO PERSISTENTE La persistencia es muy difícil 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 pérdidas de memoria en el programa si olvidamos destruirlos.
EJEMPLO #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=&quot;vacio&quot;; } void persona:: setnom(String s) { nombre=s; } String persona::getnom() { return nombre; } void main () { persona p,q; p.setnom(&quot;iris&quot;); ofstream out; out.open(&quot;persona.dat&quot;); out.write((char*)&p,sizeof(persona)); out.close(); ifstream in; in.open(&quot;persona.dat&quot;); in.read ((char*)&q,sizeof(persona)); out.close(); cout<< q.getnom(); getch(); }
BIBLIOGRAFIA [4] M. Atkinson, L. Daynès, M. Jordan, T. Printezis, S. Spence.  An Orthogonally Persistent Java. SIGMOD Record, Vol 25 Nº4. December,1996 [5] Steven T. Abell.  Using Java with PSE . Java White Paper. http://www.odi.com, March 1999. http://www.programación.com Autora y Enviado por:  ROCIO BAILON CARPIO con correo  [email_address]  el día 10 de julio de 2006 PROGRAMA DE VISUAL BASIC 5.0 A: http://www.Programación en castellano_ Foros de debate_ Visual FoxPro programacion gratis.htm Copyright © 1999-2006  Programación en castellano . Todos los derechos reservados. Información extraide de dicha página web a las 9:30 pm. El día viernes 15 de septiembre de 2006. Siguiente
BIBLIOGRAFIA ,[object Object],[object Object],[object Object],[object Object],[object Object]
BIBLIOGRAFIA Sitio Web  http://www.zator.com/CPP/E4_9_20a.html  Autor Copyright © 2000-2006 Zator Systems.  Información extraída de dicha pagina el 26 de septiembre de 2006 a las 9:25 pm.
¿PREGUNTAS?

Weitere ähnliche Inhalte

Ähnlich wie Estructura de datos II memoria persistente

Ähnlich wie Estructura de datos II memoria persistente (20)

Modelo Persistente
Modelo PersistenteModelo Persistente
Modelo Persistente
 
Manual.curso.de.java.desde.cero
Manual.curso.de.java.desde.ceroManual.curso.de.java.desde.cero
Manual.curso.de.java.desde.cero
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 
Java desde 0 pre
Java desde 0 preJava desde 0 pre
Java desde 0 pre
 
Java desde 0
Java desde 0Java desde 0
Java desde 0
 
MANUAL DE JAVA
MANUAL DE JAVAMANUAL DE JAVA
MANUAL DE JAVA
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 
MANUAL JAVA
MANUAL JAVA MANUAL JAVA
MANUAL JAVA
 
JAVA
JAVA JAVA
JAVA
 
JAVA 2
JAVA 2JAVA 2
JAVA 2
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 
Manual de Java
Manual de JavaManual de Java
Manual de Java
 
Introduc java pre
Introduc java preIntroduc java pre
Introduc java pre
 
Java pre
Java preJava pre
Java pre
 
Clasen1java
Clasen1javaClasen1java
Clasen1java
 
09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdf09. Java desde Cero autor UNAM_1.111.pdf
09. Java desde Cero autor UNAM_1.111.pdf
 
Curso de java_basico
Curso de java_basicoCurso de java_basico
Curso de java_basico
 
Curso de java_basico
Curso de java_basicoCurso de java_basico
Curso de java_basico
 
Java Ago Dic07
Java Ago Dic07Java Ago Dic07
Java Ago Dic07
 
Java desde cero
Java desde ceroJava desde cero
Java desde cero
 

Mehr von guest0fc4fa

Dce06 Arteaga 2007 2 Conferencia
Dce06  Arteaga 2007 2 ConferenciaDce06  Arteaga 2007 2 Conferencia
Dce06 Arteaga 2007 2 Conferenciaguest0fc4fa
 
Dce06 Arteaga 2007 1 Conferencia
Dce06  Arteaga 2007 1 ConferenciaDce06  Arteaga 2007 1 Conferencia
Dce06 Arteaga 2007 1 Conferenciaguest0fc4fa
 
Dce06 Arteaga 2007 3 Conferencia
Dce06  Arteaga 2007 3 ConferenciaDce06  Arteaga 2007 3 Conferencia
Dce06 Arteaga 2007 3 Conferenciaguest0fc4fa
 

Mehr von guest0fc4fa (6)

Dce06 Arteaga 2007 2 Conferencia
Dce06  Arteaga 2007 2 ConferenciaDce06  Arteaga 2007 2 Conferencia
Dce06 Arteaga 2007 2 Conferencia
 
Dce06 Arteaga 2007 1 Conferencia
Dce06  Arteaga 2007 1 ConferenciaDce06  Arteaga 2007 1 Conferencia
Dce06 Arteaga 2007 1 Conferencia
 
Dce06 Arteaga 2007 3 Conferencia
Dce06  Arteaga 2007 3 ConferenciaDce06  Arteaga 2007 3 Conferencia
Dce06 Arteaga 2007 3 Conferencia
 
Modelo Simulado
Modelo SimuladoModelo Simulado
Modelo Simulado
 
Modelo Dinamico
Modelo DinamicoModelo Dinamico
Modelo Dinamico
 
Modelo Estatico
Modelo EstaticoModelo Estatico
Modelo Estatico
 

Estructura de datos II memoria persistente

  • 1.
  • 2. MODELO DE DATO PERSISTENTE DEFINICION VENTAJAS DEL MODELO PERSISTENTE DESVENTAJAS DEL MODELO PERSISTENTE EJEMPLO BIBLIOGRAFIA
  • 3. DEFINICION A la característica 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 función que los instanció (o del programa en caso de ser globales). Persistentes: Cuyo estado es almacenado en un medio secundario para su posterior reconstrucción y utilización, por lo que su tiempo de vida es independiente del programa que los instanció.
  • 4. DEFINICION 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 código que a partir de las librerías 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 serialización). La serialización y todas las demás consideraciones de almacenamiento (manejo de archivos, indexación, distribución, paginación, relaciones entre objetos, etc...) quedan a cargo del programador. Esto requiere de un gran esfuerzo de programación.
  • 5. Lenguajes de Programación Persistentes Actualmente, coexistiendo con estos sistemas anteriormente mencionados están surgiendo nuevas iniciativas, la mayoría de ellas ideadas para conseguir que los lenguajes de programación soporten objetos persistentes. Persistencia en Java Si nos centramos en el lenguaje de programación 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 programación persistente para el lenguaje Java basado en una modificación de su plataforma.
  • 6. Lenguajes de Programación Persistentes Esquema general para la inclusión de funcionalidades de bases de datos en un lenguaje de programación.
  • 7. Persistencia en C++ El operador new (palabra clave C++) proporciona espacio de almacenamiento persistente, similar pero superior a la función de Librería Estándar 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 utilización exige que el usuario declarare un puntero del tipo adecuado; a continuación debe ser inicializado con el valor devuelto por el operador. Si el objeto creado es tipo T , sería algo así: T* puntero = valor-devuelto-por-el-operador; Lenguajes de Programación Persistentes
  • 8. Los objetos creados con new son persistentes , es decir, la vida del nuevo objeto es desde el punto de creación hasta el final del programa o hasta que el programador lo destruya explícitamente 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 montón 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 excepción como indicativo del error. Lenguajes de Programación Persistentes
  • 9. Lenguajes de Programación Persistentes 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 pérdidas de memoria en el programa si olvidamos destruirlos cuando ya no son necesarios . Hay que prestar especial atención, porque en una sentencia como: voidfunc() {   ...   tipoX* Xptr = new tipoX;   ... }
  • 10. Lenguajes de Programación Persistentes el área de almacenamiento señalada por el puntero es persistente, pero Xptr que es una variable local automática 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 montón y no podrá ser recuperada nunca, pues el puntero Xptr habrá desaparecido. La cuestión de pérdida de memoria no es solo cuestión de que el programador &quot;recuerde&quot; utilizar delete antes de salir del ámbito del puntero. También 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 pérdida irreparable. La situación puede ser esquematiza como sigue  (la figura adjunta muestra el estado de la pila y el alcance del desmontaje -&quot;Stack unwinding&quot;- caso de producirse un error).
  • 11. 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 &quot;Error&quot;;   ... } Lenguajes de Programación Persistentes
  • 12. La situación anterior es de gran peligro potencial. Si se produce la condición x, y se lanza la excepción en foo, la pila será desmontada hasta el punto de la sentencia catch en fun1 que recibirá el control. La secuencia de ejecución 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 diseñadores de la Librería Estándar, han incluido en esta un puntero &quot;inteligente&quot; auto_ptr , que resuelve este tipo de problemas. Lenguajes de Programación Persistentes
  • 13. VENTAJAS DEL MODELO PERSISTENTE La persistencia permite al programador el almacenar, transferir y recuperar el estado de los objetos.
  • 14. DESVENTAJAS DEL MODELO PERSISTENTE La persistencia es muy difícil 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 pérdidas de memoria en el programa si olvidamos destruirlos.
  • 15. EJEMPLO #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=&quot;vacio&quot;; } void persona:: setnom(String s) { nombre=s; } String persona::getnom() { return nombre; } void main () { persona p,q; p.setnom(&quot;iris&quot;); ofstream out; out.open(&quot;persona.dat&quot;); out.write((char*)&p,sizeof(persona)); out.close(); ifstream in; in.open(&quot;persona.dat&quot;); in.read ((char*)&q,sizeof(persona)); out.close(); cout<< q.getnom(); getch(); }
  • 16. BIBLIOGRAFIA [4] M. Atkinson, L. Daynès, M. Jordan, T. Printezis, S. Spence. An Orthogonally Persistent Java. SIGMOD Record, Vol 25 Nº4. December,1996 [5] Steven T. Abell. Using Java with PSE . Java White Paper. http://www.odi.com, March 1999. http://www.programación.com Autora y Enviado por: ROCIO BAILON CARPIO con correo [email_address] el día 10 de julio de 2006 PROGRAMA DE VISUAL BASIC 5.0 A: http://www.Programación en castellano_ Foros de debate_ Visual FoxPro programacion gratis.htm Copyright © 1999-2006 Programación en castellano . Todos los derechos reservados. Información extraide de dicha página web a las 9:30 pm. El día viernes 15 de septiembre de 2006. Siguiente
  • 17.
  • 18. BIBLIOGRAFIA Sitio Web http://www.zator.com/CPP/E4_9_20a.html Autor Copyright © 2000-2006 Zator Systems. Información extraída de dicha pagina el 26 de septiembre de 2006 a las 9:25 pm.