sistemas de bases de datos basados en objetos · j.r.r.v. – si – sistemas de bases de datos...

21
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 2 J.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

Upload: others

Post on 30-Sep-2020

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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 DATOSBASADOS 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 aObjetos

Page 2: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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 DATOSORIENTADOS 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

Page 3: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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)

id12

x113

y112

x257

y234

rectangulos

SELECT idFROM rectangulosWHERE

(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

1234

SELECT idFROM rectangulosWHERE

x1<=2 and y1<=2and x2>=0 and y2>=0

+ eficiente

Page 4: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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

Page 5: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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.

Page 6: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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

Page 7: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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 OBJETOSLenguajes 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)

Page 8: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

15J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSLenguajes 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 OBJETOSLenguajes 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.

Page 9: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

17J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSLenguajes 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 OBJETOSLenguajes 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

Page 10: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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 OBJETOSSistemas 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)

Page 11: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

21J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSSistemas 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 OBJETOSSistemas 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

Page 12: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

23J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSSistemas 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 OBJETOSSistemas 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

Page 13: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

25J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSSistemas C++ Persistentes

� OML� Acceso a los objetos

• Uso de variables estáticas en las clasesclass 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 OBJETOSSistemas 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

Page 14: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

27J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSSistemas C++ Persistentes

� OML� Acceso a los objetos

• Uso de nombres de colecciones y de objetosnueva_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 OBJETOSSistemas 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

Page 15: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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 OBJETOSJava 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

ArchivosInte

rface

s JD

O ImplementaciónJDO

ImplementaciónJDO

Implementación de referencia: http://java.sun.com/products/jdo/

Page 16: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

31J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSJava 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 OBJETOSJava Data Objects (JDO)

� Almacenar objetos en memoria persistenteProperties props = new Properties();... // Establecer las propiedades para obtener la factoría de gestores de persistenciaPersistenceManagerFactory 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

Page 17: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

33J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSJava 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 persistenciaPersistenceManagerFactory 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 OBJETOSJava 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 persistenciaPersistenceManagerFactory 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

Page 18: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

35J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSJava 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 persistenciaPersistenceManagerFactory 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 OBJETOSJava 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();

}

Page 19: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

37J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos

PERSISTENCIA DE OBJETOSJava 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

Page 20: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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 una lista?

• 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.

Page 21: SISTEMAS DE BASES DE DATOS BASADOS EN OBJETOS · J.R.R.V. – SI – Sistemas de bases de datos orientados a objetos 5 MOTIVACIÓN Aplicaciones tradicionales de las BD Aplicaciones

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.