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