viernes, 7 de octubre de 2011

Bases de datos orientadas a objetos

Los lenguajes de programación OO tienen sus raíces en el lenguaje SIMULA 67, propuesto a finales de la década de 1960.
El modelo de datos orientado a objetos está basado en el paradigma de la programación orientada a objetos. Los lenguajes C++ y SmallTalk han llegado a ser los lenguajes de programación orientados a objetos más ampliamente conocidos.
El propósito de los sistemas de bases de datos es la gestión de grandes cantidades de información. Las primeras bases de datos surgieron del desarrollo de los sistemas de gestión de archivos.
Como cualquier Base de Datos programables, Base de Datos orientada a objetos (BDOO) proporciona un  ambiente para el desarrollo de aplicaciones y un depósito persistente listo para su explotación, Una BDOO almacena y manipula información que puede ser digitalizada como objetos, además proporciona un acceso ágil y permite una gran capacidad de manipulación.


 Caracteristicas de BD OO
Las principales características  de un sistema BDOO  se pueden definir en tres grupos:

Mandatorias: son las que el Sistema debe satisfacer a orden de tener un sistema de BDOO y estos son: Objetos complejos, Identidad de Objetos, Encapsulación, Tipos o clases, Sobre paso con unión retardada, Extensibilidad, Completación Computacional, Persistencia y Manejador de almacenamiento secundario, Concurrencia, Recuperación y Facilidad de Query.
 Opcional: Son las que pueden ser añadidas para hacer el sistema mejor pero que no son Mandatorias, estas son de: herencia múltiple, chequeo de tipos e inferencia de distribución y diseño de transacciones y versiones.
Abiertas: Son los puntos donde el diseñador puede hacer un número de opciones y estas son el paradigma de la programación, la representación del sistema ó el tipo de sistema y su uniformidad. Hemos tomado una posición no muy a la expectativa para tener una palabra final más bien para proveer un punto de orientación para un debate futuro.

Características Mandatorias
Un sistema de BDOO debe satisfacer dos criterios:
       * Debe tener un BDMS
       * Debe ser un sistema OO
Por ejemplo:
para la extensión posible este debe ser consistente en los actuales cortes de lenguajes de programación OO.
El primer criterio se traduce en 5 características como son:
          Persistencia
          Manejador de Almacenamiento secundario
         Concurrencia
         Recuperación
         Facilidad de Query

La segunda se traduce en 8 características:
        Objetos Complejos
         Identidad del Objeto
         Encapsulación
         Tipos ó Clases
         Sobre paso con combinación retrasada
         Extensibilidad
         Completación Computacional.

Características Obligatorias  
Este es un punto que no debe faltar en BD. 
Predominancia combinada con enlace retardado: se puede definir que sea Excel, Autocad, etc. desde la programación.
Extesibilidad: Proporciona los tipos de datos como: Carácter, booleano, string, etc.
Concurrencia: permite que varios usuarios tengan acceso a      una BD al mismo tiempo.
Recuperación: Cuando se hace una transacción pero no se puede realizar y se regresa al mismo estado.
Facilidad de “Consultas a Modo”. Esto es cuando se tienen diferentes estándares.
 
Características Opcionales
Esta depende del producto que se vaya a realizar.
Herencia Múltiple: Tienen características de padres diferentes  y proporcionan mecanismos para saber de 2 o más opciones cual conviene.
Distribución: Que se puede tener parte de una BD en un servidor y otra parte en otro.



Motores de Persistencia

Toda aplicación informática está compuesta por dos partes que le
permiten ofrecer la funcionalidad que el usuario desea: en primer
lugar estará la base de datos, que es la encargada de guardar la
información que el programa necesita para operar correctamente; y
en segundo lugar está el programa propiamente dicho, que
recupera la información de la base de datos para realizar los
cálculos necesarios con ella y presentarle los resultados al usuario.







Para que la aplicación funcione correctamente, estos dos
componentes han de trabajar juntos. Sin embargo, la evolución
de estos ha seguido caminos separados durante los últimos años,
haciendo que el trabajo conjunto sea más complicado de lo que
sería ideal: por un lado las bases de datos utilizan un modelo
relacional desde los años 70 que se ha convertido en un estándar
y por el otro lado los programas utilizan el modelo orientado a
objetos, que difiere en gran medida del relacional. De esta
manera aparece un conflicto a la hora de introducir estos dos
componentes en una aplicación, ya que cada uno trabaja con los
datos en un formato diferente al del otro (el modelo relacional
trabaja con registros y el orientado a objetos lo hace con
objetos), siendo estos incompatibles entre sí.



Por lo tanto, existen dos alternativas a la hora de implementar
una aplicación para conseguir la comunicación entre estos dos
componentes.

* Trabajar solamente con un tipo de dato, perdiendo las
grandes ventajas de flexibilidad, reutilización y
mantenimiento que representa la programación orientada
a objetos (si toda la aplicación utilizara el modelo
relacional) o teniendo problemas de uso y estandarización
en la base de datos (si toda la aplicación siguiera el modelo
orientado a objetos).
* Trabajar con ambos tipos de datos, con lo que haría falta
un “traductor” que permitiera convertir los formatos a la
hora de hacer circular los datos entre los dos
componentes. Este elemento intermedio se conoce con el
nombre de capa de persistencia, capa de datos,
correspondencia O/R o motor de persistencia.

Así, la solución escogida será la presentada en último lugar, que
nos permitirá aprovechar las ventajas de la programación
orientada a objetos y las bases de datos relacionales. De esta
manera, el diagrama de la aplicación quedara de la siguiente
forma:

Serialización

La serialización consiste en codificar un objeto como una secuencia de bytes para almacenarlos en memoria o en un archivo para poder guardar el estado de los objetos aunque se cierre el programa. Es utilizada para conseguir persistencia entre diferentes sesiones y para poder transmitir objetos remotamente a través diferentes máquinas de una red, proceso conocido como invocación remota de objetos (RMI). La serialización es un mecanismo ampliamente usado para transportar objetos a través de una red, para hacer persistente un objeto en un archivo o base de dato, o para distribuir objetos idénticos a varias aplicaciones o localizaciones. Al serializar un objeto, todos sus miembros son serializados aunque sean private. Para evitarlo debemos utilizar el modificador transient que ocultará estos miembros. Para serializar un objeto, es necesario que el objeto mismo implemente el interfaz ‘Serializable’. Usos Serialización tiene una serie de ventajas: Un método de persistencia de objetos que es más conveniente que escribir sus propiedades a un archivo de texto en disco. Un método de emisión de llamadas a procedimiento remoto, por ejemplo, como en SOAP. Un método para la distribución de objetos, especialmente en los componentes software, tales como COM, CORBA, etc. Un método para detectar cambios en variables en el tiempo.


Cómo funciona la serialización
Este ejemplo muestra el proceso total de serialización.


El objeto se serializa en una secuencia que, además de los datos, contiene información sobre el tipo de objeto, como la versión, referencia cultural y nombre de ensamblado. Esa secuencia se puede almacenar en una base de datos, un archivo o en memoria.


Usos de la serialización
La serialización permite al desarrollador guardar el estado de un objeto y volver a crearlo cuando es necesario, y proporcionar almacenamiento de objetos e intercambio de datos. A través de la serialización, un desarrollador puede realizar acciones como enviar un objeto a una aplicación remota por medio de un servicio Web, pasar un objeto de un dominio a otro, pasar un objeto a través de un firewall como una cadena XML o mantener la seguridad o información específica del usuario entre aplicaciones.


Crear un objeto serializable
Para serializar un objeto, se necesita que el objeto esté serializado, una secuencia que contenga el objeto serializado y un objeto Formatter. La enumeración System.Runtime.Serialization contiene las clases necesarias para serializar y deserializar objetos.


Aplique el atributo SerializableAttribute a un tipo para indicar que se pueden serializar las instancias de ese tipo. Se produce una excepción SerializationException si se intenta serializar pero el tipo no tiene el atributo SerializableAttribute.


Si no desea que un campo de su clase se pueda serializar, aplique el atributo NonSerializedAttribute. Si un campo de un tipo serializable contiene un puntero, controlador u otra estructura de datos específica de un entorno determinado, y el significado del campo no se puede reconstruir en un entorno diferente, es conveniente que no sea serializable.


Si una clase serializada contiene referencias a objetos de otras clases marcadas con el atributo SerializableAttribute, esos objetos también se serializarán.

Introducción

Persistencia en la informática de modo genérico, se refiere a la propiedad de los datos para que estos sobrevivan de alguna manera.
De forma sencilla puede entenderse que los datos tienen una duración de corta vida, desde el momento en que estos cambian de valor se considera que no hay persistencia de los mismos. Sin embargo en informática hay varios ámbitos donde se aplica y se entiende la persistencia.
Dentro de la informática se consideran varios tipos de persistencia, esta la persistencia en memoria, persistencia de aplicación y la persistencia de objetos, esta ultima se vera mas detalladamente a continuación.


Persistencia de Objetos
Definicion
La persistencia de objetos puede ser fácilmente confundida con la persistencia en memoria, incluso con la persistencia de aplicación. La persistencia de objetos consiste en la inicialización de objetos con sus atributos por defecto. Esto es posible con 2 maneras de proceder.
* Sobre un medio (de almacenamiento) fijo se guarda (cuando el objeto fue definido) un conjunto de datos que son recuperados cuando el tipo de objeto en cuestión es creado, dichos datos son transferidos a las propiedades del objeto.
* Otro objeto mantiene los datos que serán transferidos a las propiedades del nuevo objeto creado. En este caso los datos están en memoria.

La persistencia permite al programador almacenar, transferir y recuperar el estado de los objetos. Para esto existen varias técnicas:
* Serialización
* Motores de persistencia
* Bases de datos orientadas a objetos