Descarga la aplicación para disfrutar aún más
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.
Compartir