Download SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS

Document related concepts
no text concepts found
Transcript
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
SISTEMAS DE BASES DE DATOS
BASADOS EN OBJETOS
Persistencia
LENGUAJE DE
BASES DE DATOS
PROGRAMACIÓN
ORIENTADAS A OBJETOS
ORIENTADOS A OBJETOS
Orientación a
Objetos
BASES DE DATOS
BASES DE DATOS
RELACIONALES
OBJETO-RELACIONALES
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
2
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
Índice
Š MOTIVACIÓN
Š ORIENTACIÓN A OBJETOS: CONCEPTOS
Š PERSISTENCIA DE OBJETOS
Š DISCUSIÓN
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
4
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
9 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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
5
MOTIVACIÓN
Š Ejemplo (Gestión de rectángulos)
rectangulos
id x1 y1
x2
y2
1
1
1
5
3
2
3
2
7
4
4
3
2
1
1 2 3 4 5 6 7
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)
SELECT id
FROM rectangulos
WHERE
x1<=2 and y1<=2
and x2>=0 and y2>=0
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
+ eficiente
6
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.
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
7
Índice
Š MOTIVACIÓN
Š ORIENTACIÓN A OBJETOS: CONCEPTOS
Š PERSISTENCIA DE OBJETOS
Š DISCUSIÓN
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
8
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
9 Inmutables (incorporados): reales, enteros, etc.
9 Mutables (definidos por usuario): empleados, departamentos, etc.
ƒ Estructura de los objetos
• Conjunto de atributos:
9 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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
9
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.
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
10
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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
11
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
9 Uso de un lenguaje O.O. para modelar
¾ E/R extendido
¾ UML
9 Transformación de los conceptos de O.O. al modelo relacional
• Incorporación en el lenguaje de la base de datos
9 Extensión del lenguaje de un SGBD
¾ Bases de datos Objeto-relacionales
9 Lenguajes de programación O.O. extendidos para trabajar con
bases de datos
¾ Lenguajes de programación O.O. persistentes
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
12
Í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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
13
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
9 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
9 ODMG (Object Data Management Group)
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
14
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.
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
15
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.
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
16
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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
17
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
9 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
9 Una colección es un objeto (conjuntos, bolsas, listas, arrays, etc.)
9 Una clase e un caso especial de colección
•
Combinación de las tres formas de acceso (mayoría de sistemas)
9 Dar nombres a clases, otras colecciones y objetos especiales
9 Usar OIDs para acceder al resto de los objetos
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
18
Í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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
19
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"
9 Clases persistentes han de ser subclases de "Persisten_Object"
9 Se redefinen algunos operadores para adaptarlos a la persistencia
de objetos (Sobrecarga)
¾ Ejemplos: "o", 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)
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
20
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
Š ODL
Persona
Sucursal
*
Cuenta
*
*
Cliente
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;
};
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);
};
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
21
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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
22
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();
}
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
23
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
Š OML
ƒ Inserción de objetos
•
Nuevas clases: Database, Transaction, Session, Conection, etc.
•
Creación de nuevos objetos:
9 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:
9 Operador -> redefinido para punteros persistentes.
•
Colecciones persistentes:
9 nombre_coleccion.insert_element(obj), inserta un objeto en una
colección persistente
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
24
PERSISTENCIA DE OBJETOS
Sistemas C++ Persistentes
Š OML
ƒ Acceso a los objetos
•
En la declaración
de la clase ODL
Uso de variables estáticas en las clases
class Cliente : public Persona {
...
static Set<Ref<<Cliente>> todos_los_clientes
...}
• Siempre que se
cree un cliente
nuevo
• Puede incluirse
en el constructor
Cliente::todos_los_clientes.insert_element(cliente);
int visualizar_clientes_por_edad(int edad){
Database *bd;
Transaction trans;
Iterator<Ref<Cliente>> iter;
Ref<Cliente> p;
Se usan iteradores
bd = Database::open("banco");
trans.begin();
iter = Cliente::todos_los_clientes.create_iterator();
While (iter.next(p)){
if (p->edad < edad) visualizar_cliente(p);
}
}
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
25
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();
}
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
Asigna un
nombre en la
base de datos a
la sucursal
creada
26
PERSISTENCIA DE 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");
•
Ejemplo: visualiza los clientes con edad < 35 de las cuentas de la
sucursal nueva1
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);
}
}
Obtiene la
sucursal a
partir de su
nombre
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
27
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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
28
Í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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
29
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
Aplicación
Interfaces JDO
ƒ 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
Implementación
JDO
SGBD
Implementación
JDO
Archivos
Implementación de referencia: http://java.sun.com/products/jdo/
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
30
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;
Persona
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 Direccion (String calle, int numero,
String localidad) {
this.calle = calle;
this.numero = numero;
this.localidad = localidad
}
public setDir(direccion dir){
this.dir = dir;
}
public toString(){
return calle+", "+numero+", "+localidad;
}
public getDir(){return dir}
}
Clases persistentes declaradas
como "Persistence Capable"
en la implementación JDO
Direccion
public toString(){
return nombre+" "+apellidos+" ("+edad+")";
}
}
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
31
PERSISTENCIA DE OBJETOS
Java Data Objects (JDO)
Š Almacenar objetos en memoria persistente
Depende de la
implementación
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);
La Dirección se
hace persistente
Direccion d = new Direccion("Torre blanca", 32, "Estopolis");
por referencia
persona.setDir(d);
pm.makePersistent(p);
pm.currentTransaction.commint();
Object oid = pm.getObjectId(persona);
String textOid = oid.toString();
Identificador
persistente del objeto
Identificador
persistente del objeto
en formato texto
}
finally{
if (pm.currentTransaction().isActive()) pm.currentTransaction().rollback();
if (!pm.isClosed()) pm.close();
}
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
32
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());
refrescar la caché
pm.close();
•
El uso de Oids en formato de texto permite pasarlos como parámetro
en aplicaciones web.
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
33
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
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
34
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();
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
35
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();
}
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
36
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();
la dirección se borrará
en cascada
}
finally{
if (pm.currentTransaction().isActive()) pm.currentTransaction().rollback();
if (!pm.isClosed()) pm.close();
}
ƒ En la implementación debe existir un recolector de basura
encargado de liberar el espacio de objetos no
referenciados
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
37
Índice
Š MOTIVACIÓN
Š ORIENTACIÓN A OBJETOS: CONCEPTOS
Š PERSISTENCIA DE OBJETOS
Š DISCUSIÓN
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
38
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
9 Se pierde la encapsulación y la independencia física de datos
¾ ¿Que pasa si sustituimos un array por una lista?
Clases derivadas: Proyección en algunos atributos de una clase
9 ¿Clase resultado? ¿OID? ¿Que métodos se aplican?
9 Join de dos clases
9 OQL: El resultado no siempre es una clase
¾ Modelo no es cerrado
9 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?
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
39
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
9 El cuando se ejecuta la comprobación lo determina el usuario y
no el sistema
9 ¿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?
9 Si la restricción cambia ¿Cuántos métodos deben modificarse?
9 ¿Hay un catálogo de restricciones?
9 Se ejecutarán durante operaciones atípicas
¾ carga masiva de datos
¾ etc.
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
40
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
9 En muchos casos se asumen borrados en CASCADA
¾ Jerarquías, recolector de basura.
9 No se permite al usuario controlar el comportamiento.
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
41
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:
9
Compartir datos entre aplicaciones
9 Independencia física de datos
9 Lenguajes de consulta declarativos y de propósito general
9 Vistas e independencia lógica de datos
9 etc.
J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos
42