Upload
mtramarle-mendez-moreno
View
59
Download
2
Embed Size (px)
Citation preview
1Bases de DatosOrientadas a Objetos
(... o bien un esfuerzo por aclarar el arroz con mango de los SGBDOO)
Universidad de los AndesDemin Gutierrez
Abril 2011
2Condiciones en las que nacen los SGBDR(aos 60-70)
UniformidadMuchos datos estructurados de forma similar
Orientacin a RegistrosDatos bsicos organizados en registros de longitud fija
Datos PequeosRegistros cortos, de 80 bytes o menos
Campos AtmicosCortos, indivisibles y de longitud fija
3Condiciones en las que nacen los SGBDR(aos 60-70)
Transacciones CortasTiempo de ejecucin medido en fracciones de segundos /
sin interaccin del usuario
Esquemas Conceptuales EstticosEl esquema de la BD se cambia con muy poca
frecuencia
Procesamiento por LotesPoca interaccin con el usuario
Aplicaciones Casi InexistentesO a muy bajo nivel, embebidas e implementadas en el
SGBD
4con el tiempo...debido a la mayor capacidad de
cmputo de los procesadores, mayor cantidad de memoria principal y
secundaria, y a la reduccin generalizada de los costos del
hardware fue posible desarrollar nuevos tipos de aplicaciones
Condiciones en las que nacen los SGBDR(con el t iempo.. .)
5Diseo Asistido por Computador (CAD)
Ingeniera de Software Asistida por Computador (CASE)
Bases de Datos de Multimedios
Sistemas de Informacin de Oficina
Sistemas de Informacin / Aplicaciones Empresariales
Sistemas Expertos de Bases de Datos
Otras (El cielo es el lmite)
Condiciones en las que nacen los SGBDR(con el t iempo.. .)
6Condiciones en las que nacen los SGBDR(aos 60-70)
nuevos tipos de aplicaciones, ms capacidad de cmputo, ms
memoria principal y secundaria, implica que se producen cambios en
la forma en que se ven y usan los SGBD
Condiciones en las que nacen los SGBDR(con el t iempo.. .)
7Nuevas capas de aplicacin
Reglas ms complejas asociadas mucho ms a nivel de aplicacin (general) que a nivel de tuplas
Mayor interaccin (y ms compleja) entre el usuario y la aplicacin
Transacciones de larga duracin (en parte por el punto anterior)
. . . nuevas Necesidades
8Informacin ms complejas -> Objetos
Comportamiento asociado a la informacin -> Objetos
Reducir la impedancia entre las nuevas capas de aplicacin (Objetos) y el almacenamiento persistente de
los datos (Relacional)
. . . nuevas Necesidades
9Condiciones en las que nacen los SGBDR(aos 60-70)
Un Sistema de Gestin de Base de Datos Orientado a Objetos (SGBDOO) es
un SGBD que integra de forma transparente caractersticas de las bases de datos (almacenamiento y
acceso a la informacin, entre otros) con caractersticas de los lenguajes de
programacin de aplicacin orientados a objetos.
SGBDOOOSist. De Gestin de BD Orientados a Objetos
10
Condiciones en las que nacen los SGBDR(aos 60-70)
Es decir, el SGBDOO se puede ver como una extensin que le da
caractersticas de persistencia a algunos objetos de un lenguaje orientado
a objetos
O como una extensin que aade caractersticas orientacin a objetos a
un Sistema de Gestin de Bases de Datos
11
cul es la idea?
12
Estructurasde Datos a Nivel
de Aplicacin(Modelo)
Lenguaje OO
La persistencia est integrada por completo
de forma transparente en
la aplicacin
13
Aplicacin
Base de DatosOO
Modelo de Datos OO
Nuestro trabajo esdisear e implementar
esto...
14
impedancia?
Reducir la impedancia entre las nuevas capas de aplicacin (Objetos) y el almacenamiento persistente de
los datos (Relacional)
15
Desarrol lo con SGBDR y SGBDOO
SGBDR
RepresentacinRelacional
Estructurasde Datos a Nivel
de Aplicacin(Modelo)
Lenguaje OO
Copia yTraduccin
Transferenciade Datos
Transparente(SGBDOO)
Aqu hay un problema de
acoplamiento o impedancia
La persistencia est integrada por completo
de forma transparente en
la aplicacin
16
Aplicacin OO con un SGBDR (1)(Impedancia o Acoplamiento)
Aqu hay que transformar los datos de un objeto a una sentencia DML en SQL. En este caso es simple, pero se puede volver repetitivo y
propenso a errores
Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection( // "jdbc:mysql://localhost:3306/persona", "root", "");
Statement statement = connection.createStatement();
Persona p = new Persona();p.setCedula("13556901");p.setNombre("Pedro Perez");
String sql = "INSERT INTO t_persona VALUES (" + // getNextId(connection) + ", '" + // p.getCedula() + "', '" + p.getNombre() + "')";System.err.println(sql);
statement.execute(sql);
connection.close();
17
Aplicacin OO con un SGBDR (2)(Impedancia o Acoplamiento)
Nuevamente, es necesario transformar los datos
resultantes de la consulta a variables u objetos
Class.forName("com.mysql.jdbc.Driver");Connection connection = DriverManager.getConnection( // "jdbc:mysql://localhost:3306/persona", "root", "");
Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery( // "SELECT * FROM t_persona WHERE cedula='13556901'");
Persona p = null;
if (rs.next()) { p = new Persona(rs.getString("cedula"), rs.getString("nombre")); p.setId(rs.getInt("id"));} else { System.err.println("Persona no encontrada");}
System.err.println(p.getId() + ";" + // p.getCedula() + ";" + p.getNombre());connection.close();
18
Aplicacin OO con un SGBDOO (3)(Orientado a Objetos / Mnimo Acoplamiento)
Que pas aqu?No puede ser tan fcil!
Session session = CledaConnector.getInstance().getSession();
session.beginTransaction();
Persona p = new Persona();p.setCedula("13556901");p.setNombre("Pedro Perez");
session.saveOrUpdate(p);
session.getTransaction().commit();session.close();
El la instancia p de tipo persona es persistido automticamente
19
Aplicacin OO con un SGBDOO (4)(Orientado a Objetos / Mnimo Acoplamiento)
El lenguaje de consulta es parecido a SQL, usa principios similares, pero es orientado a objetos (en este caso es HQL)
Session session = CledaConnector.getInstance().getSession();
session.beginTransaction();
Query q = session.createQuery( // "FROM Persona WHERE cedula=:cedula");q.setString("cedula", "13556901");
Persona p = (Persona) q.uniqueResult();
System.err.println(p.getId() + ";" + // p.getCedula() + ";" + p.getNombre());
session.getTransaction().commit();session.close();
La consulta aqu retorna un
objeto directamente (Al contrario
que SQL)
20
El Estndar ODMG-93(ms por razones histricas
que prcticas)
21
El Estndar ODMG-93 (Release 1.1)
El release 1.1 del estndar del ODMG (Object Database Management Group) es un esfuerzo por estandarizar los conceptos fundamentales
de los SGBDOO
El estandar fue desarrollado entre los aos 1993 y 1994 por representantes de un amplio
conjunto de empresas relacionadas al desarrollo de software y sistemas orientados a
objetos
El estandar define:
22
Modelo de Objetos
Lenguaje de Definicin de Objetos (ODL)
Lenguaje de Consulta de Objetos (OQL)
Enlaces con C++
Enlaces con Smalltalk
Condiciones en las que nacen los SGBDR(con el t iempo.. .)
Enlaces con... (otros lenguajes OO)
23
El Estndar ODMG-93 (Release 1.1)(El Modelo de Objetos)
Interfaces, Tipos, Implementaciones e Instancias (Objetos).
Atributos / Mtodos (Comportamiento).
Representacin de Vnculos entre Tipos (Colecciones /
Referencias).
Herencia (Jerarquas de Tipos y Clases / Especializacin /
Generalizacin / Supertipos / Subtipos).
Extensiones de Tipos (Listas de objetos de cierto tipo).
Claves de Tipos.
Identidad de los Objetos (OID).
El modelo de objetos incluye y define conceptos de:
24
El Estndar ODMG-93 (Release 1.1)(El Modelo de Objetos)
Polimorfismo.
Encapsulamiento.
Excepciones.
Estructura de complejidad arbitraria (vs informacin
dispersa a lo largo de varias relaciones).
Persistencia (Objetos que existen de forma
permanentemente). Soporta Transacciones.
El modelo de objetos incluye y define conceptos de:
25
El Estndar ODMG-93 (Release 1.1)(El Modelo de Objetos)
Objetos Identificables
Objetos
Literales
ObjetosAtmicos
ObjetosEstructurados
ObjetosAtmicos
ObjetosEstructurados
Los tipos atmicos no estn compuestos de otros objetos, mientras que los estructurados pueden estar compuestos de otros objetos
Los objetos tienen identidad, que es una forma de identificarlos de forma inequvoca y
a lo largo de TODO el ciclo de vida de los mismos. La identidad de un objeto no cambia,
y NO se vuelve a usar para otro objeto aun cuando el original haya dejado de existir
Los objetos tienen propiedades que pueden ser modificadas (Mutables), mientras que los literales no pueden ser modificados
(Inmutables). Los literales usualmente no tienen identidad o tienen una identidad muy
simplificada
26
El Estndar ODMG-93 (Release 1.1)(El Modelo de Objetos)
Tomado de The Object Database Standar ODMG-93)
27
El Estndar ODMG-93 (Release 1.1)Object Definit ion Language ODL (1)
ODL (Object Definition Language) es un lenguaje
usado para definir las interfaces de tipos de
objetos. Tiene las siguientes caractersticas: Debe ser soportar todos la semntica del modelo de objetos
de la ODMG
No es un lenguaje de programacin completo, slo un
lenguaje de especificacin de interfaces (y atributos)
Debe ser independiente de cualquier lenguaje de
programacin (independiente de C/C++, Java u otro)
Debe ser compatible con IDL (Interface Definition Language)
Debe ser simple y prctico, brindar valor a los desarrolladores
de aplicaciones
28Tomado de The Object Database Standar ODMG-93)
1 (uno)
N (muchos)
Cuidadocon la
Notacin (pre UML)
Object Definit ion Language ODL (2)(Un Ejemplo)
29Tomado de The Object Database Standar ODMG-93)
Object Definit ion Language ODL (3)(Un Ejemplo)
30Tomado de The Object Database Standar ODMG-93)
Object Definit ion Language ODL (4)(Un Ejemplo)
31Tomado de The Object Database Standar ODMG-93)
Object Definit ion Language ODL (5)(Un Ejemplo)
32Tomado de The Object Database Standar ODMG-93)
Object Definit ion Language ODL (6)(Un Ejemplo)
33
Object Definit ion Language ODL (7)(Vnculos)
Adaptado de: The Object Database Standar (ODMG-93)
a
rb
b
ra
a
rb
b
ra
1-1 Sin relacin:
1-1 Con relacin
34
Object Definit ion Language ODL (8)(Vnculos)
Adaptado de: The Object Database Standar (ODMG-93)
1-N Sin relacin:
1-N Con relacin
a
sb
b4
ra
rb2
rb3
rb1
a
sb
b4
ra
rb2
rb3
rb1
rb4
35
Object Definit ion Language ODL (9)(Vnculos)
Adaptado de: The Object Database Standar (ODMG-93)
N-M Sin relacin:
N-M Con relacin
a3
sb
b4
ra
rb2
rb3
rb1
ra2
ra1
a3
sb
b4
ra
rb2
rb3
rb1
rb4
ra2
ra1
ra3
36
OQL (1)(Caractersticas)
OQL (Object Query Language) es un lenguaje de
consulta orientado a objetos simple y completo con
las siguientes caractersticas: Es orientado a objetos
Declarativo / Abstracto
(no es completo desde el punto de vista computacional)
Su sintaxis es similar a SQL (que es uno de los lenguajes de
consulta ms usados en la industria)
Acceso declarativo a objetos (propiedades y mtodos)
Semntica formal bien definida
Basado en el modelo de objetos de la ODMG
No incluye operaciones de actualizacin (slo de consulta)
37
OQL (2)(Algunos Ejemplos)
select distinct x.edad from x in Personas where x.nombre=Pedro
select distinct struct(e : x.edad, s : x.sexo) from x in Personas where x.nombre=Pedro
select distinct struct(nombre : x.nombre,conjunto_subordinados : (select y from y in x.subordinados where y.salario >100000) from x in Empleados
select struct(e : x.edad, s : x.sexo) from x in (select y from y in Empleados where y.antiguedad = 10) where x.nombre=Pedro
Empleados
Empleados.subordinados
La sintaxis es similar a SQL,
pero en general,
completamente orientada a
objetos
38
Otros Lenguajes de Consulta OO(Criteria Query)
ODB odb = ODBFactory.open(ODB_NAME);
IQuery query = new CriteriaQuery( // Player.class, Where.equal("name", "pedro"));
Objects players = odb.getObjects(query);
int i = 1;
while (players.hasNext()) { System.out.println((i++) + "\t: " + players.next());}
odb.close();
Tomado del tutorial de NeoDatis (http://www.neodatis.org/)
En un query de tipo criteria, la condicin se construye encadenando una serie de tomos generados por un conjunto de mtodos predefinidos
39
Otros Lenguajes de Consulta OO(Criteria Query)
ODB odb = ODBFactory.open(ODB_NAME);
IQuery query = new CriteriaQuery( // Sport.class, Where.equal("name", "volley-ball"));
Sport volleyBall = (Sport) odb.getObjects(query).getFirst();
query = new CriteriaQuery( // Player.class, Where.equal("favoriteSport", volleyBall));
Objects players = odb.getObjects(query);
int i = 1;
while (players.hasNext()) { System.out.println((i++) + "\t: " + players.next());}
odb.close();Tomado del tutorial de NeoDatis (http://www.neodatis.org/)
40
Otros Lenguajes de Consulta OO(Criteria Query)
Tomado del tutorial de NeoDatis (http://www.neodatis.org/)
ODB odb = ODBFactory.open(ODB_NAME);
IQuery query = new CriteriaQuery( // Player.class, Where.or().add( // Where.equal("favoriteSport.name", "volley-ball")).add( // Where.like ("favoriteSport.name", "%nnis")));
Objects players = odb.getObjects(query);
int i = 1;
while (players.hasNext()) { System.out.println((i++) + "\t: " + players.next()); }
odb.close();
41
Otros Lenguajes de Consulta OO(Consultas Nativas)
Tomado del tutorial de NeoDatis (http://www.neodatis.org/)
ODB odb = ODBFactory.open(ODB_NAME);
IQuery query = new SimpleNativeQuery() { public boolean match(Player player) { // Se incluye el objeto si retorna true return player.getFavoriteSport().getName(). // toLowerCase().startsWith("volley"); }};
Objects players = odb.getObjects(query);
int i = 1;
while (players.hasNext()) { System.out.println((i++) + "\t: " + players.next());}
odb.close();
42
ODL / OQL / OML(Integracin con un Lenguaje de Programacin)
La idea es que el acceso al SGBDOO sea una extensin del lenguaje nativo en el que se va a utilizar
Declaracionesen
C++ ODLo ODL
PreprocesadorODL
CdigoC++
Generado(Encabezados
y Fuentes)
Cdigo C++de la aplicacin
(con OML)(Encabezados
y Fuentes)
CompiladorC++
CdigoObjeto
ODBMSRuntime
AplicacinEjecutable
+ODBMSRuntime
Base de DatosMetadataODBMS
Encadenador(Linker)
43
Algunos SGBDOO(Comerciales y Free Software)
Tomado de Wikipedia http://en.wikipedia.org/wiki/Comparison_of_object_database_management_systems
Cach, ConceptBase, Db4o, eXtremeDB, eyeDB, Facets (previously known as GemStone-J), FastDB
Main Memory DBMS, Gemstone Database Management System, Generic Object Oriented Database System
(GOODS), GigaBASE Database Management System, Haley Systems, JADE programming language, Jasmine Object Database, JDOInstruments, JODB (Java Objects
Database), Magma Object Database, Matisse, MyOODB, NeoDatis ODB, ObjectDB, Objectivity/DB,
Objectstore, Virtuoso Universal Server, Orient ODBMS, Ozone Database Project, Perst, Statice, stSoftware ODBMS, Versant Object Database, VOSS (Virtual Object Storage System), Zope Object Database,
JOAFIP object persistence in file
44
que alternativashay a los
SGBDOO?
45
Alternativas a los SGBDOO (1)
RepresentacinRelacional
Aqu hay un problema de
acoplamiento o impedancia
Base de Datos Relacional
-sueldo-dedicacion
Profesor-codigo-nombre
Departamento
-cedula-nombre
Persona
0..*
1
Profesor(cedula, sueldo, dedicacin, codigoDpto)
Persona(cedula, nombre)
Departamento(codigo, nombre)
TransformacinAutomtica o Manual, pero
completamente transparentepara la aplicacin
46
Alternativas a los SGBDOO (3)(Object-Relational Mapping / ORM)
TransformacinAutomtica
(Componentede Persistencia)
La correspondencia (mapa)
entre las relaciones y los objetos
se describe utilizando:
XML
XDoclet
Anotaciones (Dependiente
del Lenguaje)
Otros
Hay un componente que en base
a la descripcin de
correspondencia genera de
forma automtica todos los SQL
necesarios para consultar y
actualizar la base de datos El cliente utiliza / consulta /
actualiza los objetos persistentes
y el ORM se encarga de
sincronizar el estado con la Base
de Datos Desde el punto de vista del
cliente es como si usara un
SGBDOO
47
Alternativas a los SGBDOO (4)(ORM Uti l izando Hibernate)
Tomado del manual de Hibernate (http://www.hibernate.org/)
Vista general de Hibernate
Actualmente, adems de XML
Hibernate permite usar Java
Annotations para definir la
correspondencia Objeto-Relacional
Hibernate permite configurar en un
archivo .properties la base de datos a
la que se desea conectar. Nuevas versiones hacen
esto en XML
48
Alternativas a los SGBDOO (5)(ORM Uti l izando Hibernate)
Tomado del manual de Hibernate (http://www.hibernate.org/)
Arquitectura full cream de Hibernate
49
Alternativas a los SGBDOO (6)(ORM Uti l izando Hibernate)
Ver Ejemplos de Cdigo
50
Alternativas a los SGBDOO (7)(Data Access Objects / DAO)
TransformacinManual
(Data Transfer Objects (DAO)/ Otros)
Se encapsulan las operaciones
de acceso a la base de datos
implementando un objeto
especial (DAO) La clase DAO implementa
mtodos para hacer CRUD
(Create Read Update Delete)
bsico.
Adicionalmente, la interfaz DAO
implementa mtodos para
consultas (Ej: findByXXX(...) /
listByXXX(...)) Se implementa un TO (Transfer
Object) que contiene la
informacin a almacenar y sirve
para interactuar con el DAO Se implementa una clase
Factory que retorna el DAO
adecuado segn el tipo de Base
de Datos a la que se desea
acceder
51
Alternativas a los SGBDOO (8)(Data Access Objects / DAO)
Tomado de (http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html)
Este es el objeto que contiene los datos que vienen
de (o van a) la Base de Datos
Este es el objeto responsable de
realizar las consultas y las
operaciones DML necesarias para
mantener el estado de la BD
sincronizado con el del objeto
52
Alternativas a los SGBDOO (9)(Data Access Objects / DAO)
Tomado de (http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html)
Este es un caso concreto del patrn de la lmina anterior(Para un objeto Cliente (Customer) y para Cloudscape como Base de Datos
(Data Source / Fuente de Datos)
53
Alternativas a los SGBDOO (10)(Data Access Objects / DAO)
Tomado de (http://java.sun.com/blueprints/corej2eepatterns/Patterns/DataAccessObject.html)
Esta clase sirve de fbrica para crear
los DAOs requeridos segn
el Modelo a persistir y la fuente de datos especfica
que se necesite
Estas son implementaciones
concretas de la Fbrica
dependiendo de la fuente de datos seleccionada
Estas son implementaciones concretas del DAO dependiendo de la
fbrica usada seleccionada
Esta es la interfaz que define las
operaciones que se pueden hacer
sobre el DAO cliente (Customer)
54
Alternativas a los SGBDOO (11)(Data Access Objects / DAO)
Ver Ejemplos de Cdigo
55
Alternativas a los SGBDOO (12)(Algunos Productos ORM / DAO Software Libre)
Tomado de Wikipedia http://en.wikipedia.org/wiki/List_of_object-relational_mapping_software
Lenguaje NombreC++ LiteSQL, Debea, dtemplatelib (Database Template Library)
Java
.NET
PHP
Python
Ruby
Carbonado, Castor, Cayenne, Ebean, EclipseLink, Enterprise Objects Framework, Hibernate, iBATIS, Java Data Objects (JDO),
JPOX (JDO2), Kodo, OpenJPA, TopLink (Oracle), Torque
ADO.NET Entity Framework (Microsoft), Base One Foundation Component Library, BCSEi ORM Code Generator, Business Logic
Toolkit for .NET, Castle ActiveRecord, DataObjects.Net v4.0, DevForce, Developer Express, eXpress Persistent Objects (XPO),
EntitySpaces, Euss, Habanero, iBATIS, Invist, LLBLGen, LightSpeed, Neo, NConstruct, NHibernate, Opf3, ObjectMapper
.NET, OpenAccess, TierDeveloper, Persistor.NET, Quick Objects, Sooda, Subsonic
Doctrine, Propel, EZPDO, DABL, Data Shuffler Data mapper implementation (New BSD), Outlet Open source ORM, Coughphp
Open source ORMDjango, SQLAlchemy, SQLObject, Storm
ActiveRecord, Datamapper, iBATIS
56
Gracias
Gracias!
Slide 1Slide 2Slide 3Slide 4Slide 5Slide 6Slide 7Slide 8Slide 9Slide 10Slide 11Slide 12Slide 13Slide 14Slide 15Slide 16Slide 17Slide 18Slide 19Slide 20Slide 21Slide 22Slide 23Slide 24Slide 25Slide 26Slide 27Slide 28Slide 29Slide 30Slide 31Slide 32Slide 33Slide 34Slide 35Slide 36Slide 37Slide 38Slide 39Slide 40Slide 41Slide 42Slide 43Slide 44Slide 45Slide 46Slide 47Slide 48Slide 49Slide 50Slide 51Slide 52Slide 53Slide 54Slide 55Slide 56