Logo Studenta

Sistema de Base de Datos Basados en Objetos

¡Este material tiene más páginas!

Vista previa del material en texto

Sistemas de Información (Tercer Curso)
Enxeñeria Técnica en Informática de Sistemas
Escola Técnica Superior de Enxeñería
Universidade de Santiago de Compostela
SISTEMAS DE BASES DE DATOS
BASADOS EN OBJETOS
José Ramón Ríos Viqueira
2J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
SISTEMAS DE BASES DE DATOS 
BASADOS EN OBJETOS
BASES DE DATOS 
ORIENTADAS A OBJETOS
BASES DE DATOS 
OBJETO-RELACIONALES
LENGUAJE DE 
PROGRAMACIÓN 
ORIENTADOS A OBJETOS
Persistencia
BASES DE DATOS 
RELACIONALES
Orientación a
Objetos
Sistemas de Información (Tercer Curso)
Enxeñeria Técnica en Informática de Sistemas
Escola Técnica Superior de Enxeñería
Universidade de Santiago de Compostela
SISTEMAS DE BASES DE DATOS
ORIENTADOS A OBJETOS
José Ramón Ríos Viqueira
4J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
Índice
� MOTIVACIÓN
� ORIENTACIÓN A OBJETOS: CONCEPTOS
� PERSISTENCIA DE OBJETOS
� DISCUSIÓN
5J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
MOTIVACIÓN
� Aplicaciones tradicionales de las BD
� Aplicaciones de gestión convencionales
• Nominas, contabilidad, etc.
� Uso de registros de longitud fija y reducida
� Campos de cada registro cortos, de longitud fija y tipo alfanumérico
• Tipos sin estructura
� Se cumple la primera forma normal
� Nuevas aplicaciones de las BD
� Mejoras en el hardware
� Integración de nuevos tipos de información en la BD
� Ejemplos
• Diseño asistido por ordenador (CAD)
• Sistemas de Información Geográfica (GIS)
• Sistemas de información Multimedia (MM)
• Ingeniería del software asistida por ordenador (CASE)
• Almacenamiento y recuperación de documentos
6J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
MOTIVACIÓN
� Ejemplo (Gestión de rectángulos)
id
1
2
x1
1
3
y1
1
2
x2
5
7
y2
3
4
rectangulos
SELECT id
FROM rectangulos
WHERE
(x1>=0 and x1<=2 and y1<=0 and y1<=2)
OR (x2>=0 and x2<=2 and y2<=0 and y2<=2)
OR (x1>=0 and x1<=2 and y2<=0 and y2<=2)
OR (x2>=0 and x2<=2 and y1<=0 and y1<=2)
OR (x1<=0 and x2>=2 and y1<=0 and y2>=2)
OR (x1<=0 and x2>=2 and y1>=0 and y1<=2)
OR (x1>=0 and x1<=2 and y1<=0 and y2>=2)
OR (x2>=0 and x2<=2 and y1<=0 and y2>=2)
OR (x1<=0 and x2>=2 and y2>=0 and y2<=2)
1 2 3 4 5 6 7
1
2
3
4
SELECT id
FROM rectangulos
WHERE
x1<=2 and y1<=2
and x2>=0 and y2>=0
+ eficiente
7J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
MOTIVACIÓN
� Ejemplo (Gestión de rectángulos)
� ¿Podrá el optimizador generar la segunda consulta a partir de la 
primera?
• Con la tecnología actual, ¡NO!
� Además, los árboles B, no son los más eficientes para este tipo de 
problema
� Problemas
� Necesidades de información simples se traducen en expresiones 
SQL demasiado complejas
� La eficiencia en la ejecución de esas consultas es muy baja
� Solución
� Incorporar en el SGBD características presentes en lenguajes O.O.
� Diferencia entre lenguajes de programación y gestores de BD
• Las aplicaciones se escriben para solucionar un problema específico
• Una base de datos se diseña para resolver un conjunto de problemas, 
alguno de los cuales ni se conoce en el momento del diseño.
8J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
Índice
� MOTIVACIÓN
� ORIENTACIÓN A OBJETOS: CONCEPTOS
� PERSISTENCIA DE OBJETOS
� DISCUSIÓN
9J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
ORIENTACIÓN A OBJETOS: CONCEPTOS
� Objeto
� ¿Que es un objeto?
• ¡¡Un objeto es cualquier cosa!!
• Entidad del modelo Entidad / Relación
• Objetos mutables e inmutables
� Inmutables (incorporados): reales, enteros, etc.
� Mutables (definidos por usuario): empleados, departamentos, etc.
� Estructura de los objetos
• Conjunto de atributos: 
� De tipo: Inmutable, referencia a mutable;
listas, arrays, colecciones, etc. de cualquiera de ellos
• Conjunto de operaciones y métodos
� Encapsulamiento
� Estructura interna no es visible. 
• Acceso a atributos a través de las operaciones públicas
� Implica independencia física de datos
� Sistemas reales: Propiedades privadas, públicas y protegidas
10J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
ORIENTACIÓN A OBJETOS: CONCEPTOS
� Identidad
� En el modelo relacional: Identidad definida por el usuario (clave)
� Modelo O.O.: Cada objeto mutable tiene un identificador (OID).
• El OID se puede usar como un puntero al objeto.
• El usuario no tiene que preocuparse de generar los ids.
� Clases de objetos
� Agrupan objetos con la misma estructura
� Cada objeto es una instancia de una clase
� Diferencia entre clase y tipo de datos. Una clase incluye:
• Variable de tipo conjunto con todas sus instancias
• Un método constructor para crear instancias nuevas.
11J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
ORIENTACIÓN A OBJETOS: CONCEPTOS
� Herencia
� Jerarquías de especialización/generalización
• Superclases y subclases
� Atributos y operaciones comunes localizados en la superclase. 
Subclases heredan estas propiedades comunes
• Herencia estructural y de comportamiento
� Se consigue reutilización de código y polimorfismo.
� Herencia múltiple
• Grafos Acíclicos Dirigidos (GAD) en lugar de árboles
• Problema: Heredar la misma propiedad de varias superclases.
� Colecciones de objetos
� Se utilizan referencias a los objetos (OIDs) para incluirlos en 
colecciones.
� Permiten la creación de Jerarquías y GADs de agregados
� Esto permite examinar los datos desde diferentes niveles de detalle
12J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
ORIENTACIÓN A OBJETOS: CONCEPTOS
� Lenguajes Orientados a Objetos
� Incorporación de conceptos de O.O. en bases de datos
• Incorporación sólo en las herramientas de análisis y diseño
� Uso de un lenguaje O.O. para modelar
� E/R extendido
� UML
� Transformación de los conceptos de O.O. al modelo relacional
• Incorporación en el lenguaje de la base de datos
� Extensión del lenguaje de un SGBD
� Bases de datos Objeto-relacionales
� Lenguajes de programación O.O. extendidos para trabajar con 
bases de datos
� Lenguajes de programación O.O. persistentes
13J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
Índice
� MOTIVACIÓN
� ORIENTACIÓN A OBJETOS: CONCEPTOS
� PERSISTENCIA DE OBJETOS
� Lenguajes de programación persistentes
� Sistemas C++ persistentes
� Java Data Objects (JDO)
� DISCUSIÓN
14J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Lenguajes de programación persistentes
� Introducción
� Los objetos en un lenguaje de programación no persisten tras la 
ejecución de una aplicación
1. Datos persistentes en lenguajes de programación almacenados en 
archivos
2. Almacenar datos persistentes en un SGBD
• Incorporar SQL en el lenguaje de programación
� SQL embebido y librerías de acceso a datos
3. Lenguajes de programación persistentes
• Incorporar constructores en un lenguaje O.O. convencional para 
dotarlo de la posibilidad de hacer persistentes sus objetos
� ODMG (Object Data Management Group)
15J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Lenguajes de programación persistentes
� Diferencia entre lenguajes con SQL incorporado y 
lenguajes de programación persistentes
� Con SQL: Diferentes tipos de dato entre el lenguaje anfitrión y el 
SQL. Transformación es responsabilidad del programador. 
Aparecen errores no detectados y se necesita mucho código
� Persistentes: Persistencia de objetos totalmente integrada en el 
lenguaje. Los cambios de formato son transparentes al 
programador. Programador no necesita conocer SQL ni 
preocuparse de la transformación de objetos a relaciones
� Con SQL: El programador recibe los datos del SGBD y es su 
responsabilidad gestionarlos en memoria. Debe de preocuparse de 
mantener la coherencia entre la copia en memoria y la copia en la 
BD
� Persistentes: El programador no necesita escribir código para 
buscar datos en memoria ni para guardarlos en disco.
16J.R.R.V. – SI– Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Lenguajes de programación persistentes
� Enfoques para conseguir persistencia de objetos
� Por clases: Nueva sintaxis que permita declarar que una clase es 
persistente. Todos los objetos de esa clase serán creados como 
persistentes.
• Poco flexible. A veces interesa que algunos objetos de una clase 
sean persistentes y otros no
� Por creación: Se extiende la sintaxis de creación de objetos para 
permitir la creación de objetos persistente
� Por marcas: Todos los objetos se crean igual. Los objetos 
persistentes se marcan como tales después de su creación
� Por referencia: Uno o varios objetos se declaran como persistentes 
de forma explicita (por alguno de los procedimientos anteriores). 
Los objetos a los que se haga referencia desde uno de los objetos 
anteriores, serán persistentes también.
• Ventaja: Forma sencilla de declarar como persistente una estructura 
compleja.
17J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Lenguajes de programación persistentes
� Necesidad de identificadores persistentes
� Para conseguir la persistencia de objetos, se necesita un método 
de generación de identificadores (OIDs) persistentes
� En muchos lenguajes de programación, el OID es un puntero a la 
ubicación en memoria del objeto (C++)
� En lenguajes O.O. con persistencia se necesitan identificadores 
que persistan entre ejecuciones de programas y también a 
reorganizaciones estructurales de datos.
• OIDs implementados como punteros persistentes a los objetos.
• Estos punteros permanecen inalterados después de la ejecución de los 
programas y después de ciertas reorganizaciones de los datos
• Se utilizan de igual forma que los punteros internos de la memoria
18J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Lenguajes de programación persistentes
� Almacenamiento y acceso a objetos persistentes
� Guardar por separado los valores de los atributos de cada objeto
� El código de cada método puede guardarse como parte del 
esquema de la clase
• En algunos sistemas este código se almacena por separado
� Evitar el tener que integrar un compilador
� Formas de acceder a los objetos
• Dar un nombre distinto a cada objeto (eficaz sólo si hay pocos objetos)
• Exponer los OIDs de los objetos
• Guardar las colecciones de objetos y permitir que los programas iteren 
sobres ellas para buscar los objetos deseados
� Una colección es un objeto (conjuntos, bolsas, listas, arrays, etc.)
� Una clase e un caso especial de colección
• Combinación de las tres formas de acceso (mayoría de sistemas)
� Dar nombres a clases, otras colecciones y objetos especiales
� Usar OIDs para acceder al resto de los objetos
19J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
Índice
� MOTIVACIÓN
� ORIENTACIÓN A OBJETOS: CONCEPTOS
� PERSISTENCIA DE OBJETOS
� Lenguajes de programación persistentes
� Sistemas C++ persistentes
� Java Data Objects (JDO)
� DISCUSIÓN
20J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
� Características generales
� Cambios mínimos en la sintaxis de C++
• Facilita el uso del sistema
• Facilita la implementación
� Ejemplo
• Definición de una clase "Persistent_Object"
� Clases persistentes han de ser subclases de "Persisten_Object"
� Se redefinen algunos operadores para adaptarlos a la persistencia 
de objetos (Sobrecarga)
� Ejemplos: "�", New, etc.
� Ejemplos de BDOO basadas en C++ persistente
� O2, OBJECTSTORE, VERSANT, OBJECTIVITY
� Estándar ODMG
� ODL (Object Definition Language)
� OML (Object Manipulation Language)
� OQL (Object Query Language)
21J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
� ODL
class Persona : public Persistent_Object {
public:
String nombre;
String direccion;
};
class Cliente : public Persona {
public:
int edad;
int id_cliente;
Set<Ref<Cuenta>> cuentas
inverse Cuenta::titulares;
};
Cliente
Sucursal
Cuenta
Persona
**
class Sucursal : public Persistent_Object {
public:
String nombre;
String direccion;
Set<Ref<Cuenta>> cuentas
inverse Cuenta::sucursal;
};
class Cuenta : public Persistent_Object {
private:
int saldo;
public:
int numero;
Set<Ref<Cliente>> titulares
inverse Cliente::cuentas;
Ref<Sucursal> sucursal
inverse Sucursal::cuentas;
int calcular_saldo();
int actualizar_saldo(int delta);
};
*
22J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
� ODL
� Clases persistentes: Todas las clases cuyos objetos pueden ser 
persistentes aparecen en la jerarquía como descendientes de 
"Persistent_Object"
� Punteros persistentes: Los tipos de dato puntero a objetos de una 
determinada clase "*nombre_clase" se sustituyen por un tipo 
plantilla "Ref<nombre_clase>" de punteros persistentes.
• Tipos plantilla: Toman como parámetros otros tipos de dato.
� Colecciones persistentes: Los tipos de dato conjunto, 
multiconjunto, listas, arrays, etc. se sustituyen por sus respectivos 
tipos persistentes. Por ejemplo: Set<nombre_clase>. Se usan 
tipos plantilla para definirlos.
� Integridad referencial: Palabra clave "inverse".
� Resumen: Clases Persisten_Object, Ref, Set, etc. definidas en 
una biblioteca de persistencia.
• Extensión mínima del lenguaje: palabra clave inverse
23J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
� OML
� Inserción de objetos
int nueva_cuenta(string nombre, string direccion, int edad){
Database *bd;
Transaction trans;
Ref<Cuenta> cuenta;
Ref<Cliente> cliente;
bd = Database::open("banco");
trans.begin();
cuenta = New(bd) Cuenta;
cliente = New(bd) Cliente;
cliente->nombre = nombre;
cliente->direccion = direccion;
cliente->edad = edad;
cuenta->titulares.insert_element(cliente);
. . . 
trans.commit();
}
24J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
� OML
� Inserción de objetos
• Nuevas clases: Database, Transaction, Session, Conection, etc.
• Creación de nuevos objetos:
� Operador "New(bd) nombre_clase"
� crea un objeto persistente nuevo del tipo indicado y lo 
almacena en la base de datos a la que se refiere la variable 
bd.
• Punteros persistentes:
� Operador -> redefinido para punteros persistentes.
• Colecciones persistentes:
� nombre_coleccion.insert_element(obj), inserta un objeto en una 
colección persistente
25J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
� OML
� Acceso a los objetos
• Uso de variables estáticas en las clases
class Cliente : public Persona {
...
static Set<Ref<<Cliente>> todos_los_clientes
...}
Cliente::todos_los_clientes.insert_element(cliente);
En la declaración 
de la clase ODL
• Siempre que se 
cree un cliente 
nuevo
• Puede incluirse 
en el constructor
int visualizar_clientes_por_edad(int edad){
Database *bd;
Transaction trans;
Iterator<Ref<Cliente>> iter;
Ref<Cliente> p; 
bd = Database::open("banco");
trans.begin();
iter = Cliente::todos_los_clientes.create_iterator();
While (iter.next(p)){
if (p->edad < edad) visualizar_cliente(p);
}
}
Se usan iteradores
26J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
� OML
� Acceso a los objetos
• Uso de nombres de colecciones y de objetos
int nueva_sucursal(string nombre, string direccion){
Database *bd;
Transaction trans;
Ref<Sucursal> sucursal;
bd = Database::open("banco");
trans.begin();
sucursal = New(bd) Sucursal;
sucursal->nombre = nombre;
sucursal->direccion = direccion;
bd->set_object_name(sucursal, nombre);
. . . 
trans.commit();
}
Asigna un 
nombre en la 
base de datos a 
la sucursal 
creada
27J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIADE OBJETOS
Sistemas C++ Persistentes
� OML
� Acceso a los objetos
• Uso de nombres de colecciones y de objetos
nueva_sucursal("nueva1", "Calle nueva 3, 12343 bancopoli");
Database *bd;
Transaction trans;
Ref<Sucursal> nueva1;
Iterator<Ref<Cliente>> iterCli;
Iterator<Ref<Cuenta>> iterCuen;
Ref<Cliente> pCli;
Ref<Cuenta> pCuen; 
bd = Database::open("banco");
trans.begin();
nueva1 = bd->look_up_object("nueva1");
iterCuen = nueva1.cuentas.create_iterator();
While (iterCuen.next(pCuen)){
iterCli = pCuen->titulares.create_iterator();
While (iterCli.next(pCli)){
if (pCli->edad < 35) visualizar_cliente(pCli);
}
}
• Ejemplo: visualiza los clientes con edad < 35 de las cuentas de la 
sucursal nueva1
Obtiene la 
sucursal a 
partir de su 
nombre
28J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
� OQL
� Lenguaje declarativo (parecido a SQL)
• El resultado no tiene porque ser un conjunto de objetos
� Da soporte a la independencia física de datos
• Internamente se pueden declarar índices de acceso
� Permite la incorporación de optimización de consultas
29J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
Índice
� MOTIVACIÓN
� ORIENTACIÓN A OBJETOS: CONCEPTOS
� PERSISTENCIA DE OBJETOS
� Lenguajes de programación persistentes
� Sistemas C++ persistentes
� Java Data Objects (JDO)
� DISCUSIÓN
30J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
� JDO
� Define interfaces y clases que permiten a los programadores 
almacenar las instancias de los objetos de aplicación en memoria 
persistente.
� Objetivos
� Proporcionar una visión Java de la información persistente de las 
aplicaciones
� Permitir la conexión de distintas implementaciones de almacenes 
de persistencia sin afectar al código de la aplicación
Aplicación
SGBD
ArchivosIn
te
rfa
ce
s 
JD
O Implementación
JDO
Implementación
JDO
Implementación de referencia: http://java.sun.com/products/jdo/
31J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
� Definición de clases
� Código Java normal
public class Direccion{
private String calle;
private int numero;
private String localidad;
public Direccion (String calle, int numero, 
String localidad) {
this.calle = calle;
this.numero = numero;
this.localidad = localidad
}
public toString(){
return calle+", "+numero+", "+localidad;
}
}
Persona Direccion
public class Persona {
private String nombre;
private String apellidos;
private int edad;
private Direccion dir;
public Persona(String nombre,
String apellidos, int edad){
this.nombre = nombre;
this.apellidos = apellidos;
this.edad = edad;
}
public setDir(direccion dir){
this.dir = dir;
}
public getDir(){return dir}
public toString(){
return nombre+" "+apellidos+" ("+edad+")";
}
}
Clases persistentes declaradas 
como "Persistence Capable"
en la implementación JDO
32J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
� Almacenar objetos en memoria persistente
Properties props = new Properties();
... // Establecer las propiedades para obtener la factoría de gestores de persistencia
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties);
PersistenceManager pm = pmf.getPersistenceManager();
try {
pm.currentTransaction.begin();
Persona p = new Persona("Julio", "Hernandez", 23);
Direccion d = new Direccion("Torre blanca", 32, "Estopolis");
persona.setDir(d);
pm.makePersistent(p);
pm.currentTransaction.commint();
Object oid = pm.getObjectId(persona);
String textOid = oid.toString();
}
finally{
if (pm.currentTransaction().isActive()) pm.currentTransaction().rollback();
if (!pm.isClosed()) pm.close(); 
}
Depende de la 
implementación
La Dirección se 
hace persistente 
por referencia
Identificador 
persistente del objeto
Identificador 
persistente del objeto 
en formato texto
33J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
� Acceso a los objetos persistentes
� Acceso a través del OID persistente del objeto
Properties props = new Properties();
... // Establecer las propiedades para obtener la factoría de gestores de persistencia
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties);
PersistenceManager pm = pmf.getPersistenceManager();
Object oid = pm.newObjectIdInstance(Persona.class, textOid);
Persona p = (Persona) pm.getObjectById(oid, true);
System.out.println(p.toString());
pm.close();
• El uso de Oids en formato de texto permite pasarlos como parámetro 
en aplicaciones web.
refrescar la caché
34J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
� Acceso a los objetos persistentes
� Acceso a todas las instancias persistentes de una clase
Properties props = new Properties();
... // Establecer las propiedades para obtener la factoría de gestores de persistencia
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties);
PersistenceManager pm = pmf.getPersistenceManager();
Extent ext = pm.getExtent(Persona.class, false);
java.util.Iterator itr = ext.iterator();
try {
while (itr.hasNext())
{
Persona p = (Persona) itr.next();
System.out.println(p.getDir().toString());
}
}
finally {
ext.close(itr);
}
pm.close();
recuperar también las 
subclases
35J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
� Acceso a los objetos persistentes
� Acceso mediante consultas en JDO Query Language (JDOQL)
Properties props = new Properties();
... // Establecer las propiedades para obtener la factoría de gestores de persistencia
PersistenceManagerFactory pmf = JDOHelper.getPersistenceManagerFactory(properties);
PersistenceManager pm = pmf.getPersistenceManager();
Extent ext = pm.getExtent(Persona.class, false);
Query consulta = pm.newQuery(Persona.class, ext, "this.edad >= 18");
consulta.setOrdering("nombre ascending");
Collection resultado = (Collection) consulta.execute();
try {
Iterator itr = resultado.iterator();
while (itr.hasNext())
System.out.println(itr.next().toString());
}
finally {
consulta.close(resultado);
}
pm.close();
36J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
� Modificación de objetos persistentes
try{
pm.currentTransaction().begin();
Persona p = (Persona) pm.getObjectById(oid, true);
Direccion d = New Direccion("Rue de la paz", 34, "lotocopolis");
p.setDir(d);
pm.currentTransaction().commit();
}
finally{
if (pm.currentTransaction().isActive()) pm.currentTransaction().rollback();
if (!pm.isClosed()) pm.close(); 
}
37J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
� Borrado de objetos persistentes
try{
pm.currentTransaction().begin();
Persona p = (Persona) pm.getObjectById(oid, true);
pm.deletePersistent(p);
pm.currentTransaction().commit();
}
finally{
if (pm.currentTransaction().isActive()) pm.currentTransaction().rollback();
if (!pm.isClosed()) pm.close(); 
}
la dirección se borrará
en cascada
� En la implementación debe existir un recolector de basura 
encargado de liberar el espacio de objetos no 
referenciados
38J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
Índice
� MOTIVACIÓN
� ORIENTACIÓN A OBJETOS: CONCEPTOS
� PERSISTENCIA DE OBJETOS
� DISCUSIÓN
39J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
DISCUSIÓN
� Lenguaje de consulta de propósito general
� Procedimental (C++, Java, etc.)
• + complejo � + coste, + errores
• Más difícil o imposible incorporar técnicas de optimización
� Declarativo (OQL, JDOQL)
• Los atributos deben de ser públicos
� Se pierde la encapsulación y la independencia física de datos
� ¿Que pasa si sustituimos un array por unalista?
• Clases derivadas: Proyección en algunos atributos de una clase
� ¿Clase resultado? ¿OID? ¿Que métodos se aplican?
� Join de dos clases
� OQL: El resultado no siempre es una clase
� Modelo no es cerrado
� JDOQL: Lenguaje de consulta limitado (sólo filtros)
• Vistas: Normalmente no se permiten.
� Acceso a datos a través de caminos (Paths)
• ¿Modelo jerárquico?
40J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
DISCUSIÓN
� Declaración de restricciones de integridad
� No se pueden codificar en un lenguaje declarativo
� Inserción de código de validación en los métodos
• Problemas
� El cuando se ejecuta la comprobación lo determina el usuario y 
no el sistema
� ¿Se puede estar seguro de que siempre que se acceda al dato, 
desde cualquier método (codificado o por codificar), se va a 
efectuar la validación?
� Si la restricción cambia ¿Cuántos métodos deben modificarse?
� ¿Hay un catálogo de restricciones?
� Se ejecutarán durante operaciones atípicas
� carga masiva de datos
� etc.
41J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
DISCUSIÓN
� Relaciones entre objetos
� Se modelan mediante punteros
• 1:1, puntero de un objeto a otro (a veces en una sola dirección)
• 1:N, en un lado puntero, en el otro lado colección de punteros
• M:N, colecciones de punteros en ambos lados
• ¿Relaciones ternarias?
• ¿Vuelta al modelo en red?
� Integridad referencial
• Validación de punteros (JDO). Declarar que una referencia es la 
inversa de otra (OQL)
• Borrados y modificaciones automáticas
� En muchos casos se asumen borrados en CASCADA
� Jerarquías, recolector de basura.
� No se permite al usuario controlar el comportamiento.
42J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
DISCUSIÓN
� Un lenguaje de programación O.O. persistente, ¿es 
realmente un SGBD?
� Un SGBD relacional se proporciona listo para ser usado
• Sistema gestor de datos de propósito general
� Un SGBD Orientado a Objetos puede verse como un conjunto de 
herramientas que permiten a un programador definir un almacén 
de datos para una aplicación en concreto
• Definir clases con métodos (código) adaptado a una aplicación 
concreta
• Se da poca importancia a:
� Compartir datos entre aplicaciones
� Independencia física de datos
� Lenguajes de consulta declarativos y de propósito general
� Vistas e independencia lógica de datos
� etc.

Continuar navegando