B ancos de D ados O rientados a O bjetos

Propaganda
Bancos de Dados
Orientados a Objetos
A tecnologia tradicional de BD tem sido utilizada com
sucesso para o desenvolvimento de aplicações
“comerciais’’ tradicionais.
Essa tecnologia, entretanto, não atende adequadamente
aplicações mais complexas, tais como aplicações
médicas e científicas, geoprocessamento, projetos de
engenharia (CAD/CAM), telecomunicações, etc.
Essas “novas” aplicações de bancos de dados são
caracterizadas por possuírem:
dados de estrutura complexa (ex.: dados multimídia,
espaciais, geográficos, etc.);
transações de mais longa duração;
necessidade de operações específicas.
Introdução
SGBDs orientados a objetos e relacionais estendidos
(objeto-relacionais) foram desenvolvidos para atender
esses requisitos
SGBDs orientados a objetos permitem definir a estrutura
de objetos complexos e as operações que podem ser
executadas sobre eles
SGBDs objeto-relacionais incorporam facilidades
oriundas do paradigma de orientação a objetos
(definição de novos tipos e operações) ao modelo de
dados relacional
SQL3 incorpora várias dessas características
Introdução
Armazenamento
(DB2, Oracle, Informix)
Necessidade de padronização ODMG
X
Codificação
(Java, C++, SmallTalk, Delphi)
Nova tecnologia é decorrente da popularização do
paradigma de orientação a objetos
Modelagem
(UML)
Introdução
Controle
de Versões
Transações
Segurança
Integridade
Herança
Encapsulamento
Introdução
Persistência
Tecnologia de
Bancos de Dados
Orientação
a Objetos
Concorrência
Recuperação
de Falhas
Consultas
Armazenamento
Polimorfismo
Identidade
de Objetos
Objetos em um banco de dados OO podem existir
permanentemente (armazenados) objetos persistentes
Correspondência entre objetos do mundo real e objetos
armazenados no banco de dados identificadores
(object identifiers – OIds)
transientes
Um objeto tipicamente possui dois componentes:
estado (valor)
comportamento (operações)
Objetos numa linguagem de programação OO existem
apenas durante a execução de um programa objetos
Objeto
Conceitos Básicos
valores
SGBDs OO, entretanto, permitem a representação de objetos e
Cada objeto armazenado no BD possui um identificador
único Object Identifier (OId)
Um OId é imutável, ou seja, o OId de um determinado
objeto nunca é alterado, indepedentemente do seu estado
OIds são gerados internamente pelo sistema
Teoricamente, valores também deveriam ser vistos como
objetos e, portanto, possuir um OId
Identidade dos Objetos
Conceitos Básicos
O modelo orientado a objetos inclui vários
construtores de tipo
Um objeto pode ser representado como uma tripla
(i, c, v), onde i é um OId, c é um construtor de tipo
e v é o valor corrente (estado) do objeto
Objetos podem ser construídos a partir de outros
objetos objetos complexos
Estrutura de um Objeto
Conceitos Básicos
Objetos complexos são construídos a partir de objetos
mais simples através da aplicação sucessiva desses
construtores
básicos: átomo, tupla, conjunto
outros: lista, arranjo, multi-conjunto
Usados para definir a estrutura dos objetos
Construtores de Tipo
Conceitos Básicos
Átomo (atom)
usado para representar valores atômicos de um tipo
básico (inteiro, booleano, caractere, string, etc)
objetos atômicos não possuem OId
Tupla (tuple)
<a1:i1, a2:i2, ... , an:in>
Construtores de Tipo
Conceitos Básicos
multi-conjunto (bag)
arranjo (array)
Os tipos derivados dos construtores conjunto, lista,
multi-conjunto e arranjo são denominados de coleções
[i1, i2, ... ,i3]
Conjunto (set)
{i1, i2, ... ,i3}
Outros construtores
lista (list)
Construtores de Tipo
Conceitos Básicos
o1= (i1, átomo, ‘Houston’)
o2= (i2, átomo, ‘Bellaire’)
o3= (i3, átomo, ‘Sugarland’)
o4= (i4, átomo, 5)
o5 = (i5, átomo, ‘Research’)
O6 = (i6, átomo, ‘1998-05-22’)
o7= (i7,conjunto,{i1, i2, i3})
o8= (i8, tupla, <DNAME:i5, DNUMBER:i4, MGR:i9,
LOCATIONS:i7, EMPLOYEES:i10, PROJECTS:i11>)
o9= (i9, tupla, <MANAGER:i12, MANAGER_SDATE: i6>)
o10= (i10,conjunto,{i12, i13, i14})
...
Exemplos de Objetos
Conceitos Básicos
o2= (i2,tupla,<DNAME:’Research’, DNUMBER:5, MGR:i3,
LOCATIONS:i1, EMPLOYEES:i4, PROJECTS:i5>)
o1= (i1,conjunto,{‘Bellaire’,’Houston,’Sugarland’})
Exemplos de Objetos
Conceitos Básicos
define type Employee:
tuple (fname:
minit:
lname:
ssn:
date:
address:
sex:
salary:
supervisor:
dept:
define type Date:
tuple (year:
month:
day:
integer;
integer;
integer)
string;
char;
string;
string;
Date;
string;
char;
float;
Employee;
Department);
Definição de Tipos de Objeto
locations:
employees:
projects:
define type Department:
tuple (dname:
dnumber:
mgr:
string;
integer;
tuple (manager:
startdate:
set(string);
set(Employee);
set(Project));
Definição de Tipos de Objeto
Employee;
Date);
Semelhante ao conceito de tipo abstrato de dados em linguagens de
programação permite definir o comportamento de um tipo de
objeto em função das operações que podem ser aplicadas a objetos
daquele tipo
Separação de interesses:
interface: visível externamente, define o nome e os argumentos de
cada operação (assinatura)
implementação: escondida internamente, inclui a definição das
estruturas de dados e a implementação das operaçãoes (métodos)
Implementação especificada através de uma linguagem de
programação (flexibilidade)
Forma de independência de dados lógica: pode-se alterar a
implementação sem que as aplicações (usuários) sejam afetadas
Encapsulamento
Outras operações podem ser declaradas para modificar os
objetos de uma classe ou recuperar dados sobre eles
Construtor - criar um novo objeto da classe
Destrutor - remover um objeto da classe
O termo classe é geralmente usado para se referir à
definição de um tipo de objeto juntamente com a suas
operações uma classe define as características
(atributos e métodos) de um conjunto de objetos que
compartilham o mesmo comportamento
Um objeto é uma instância de uma classe
Operações típicas:
Classes
define class Employee:
type tuple (fname:
minit:
lname:
ssn:
date:
address:
sex:
salary:
supervisor:
dept:
operations age:
create_emp:
destroy_emp:
end Employee;
string;
char;
string;
string;
Date;
string;
char;
float;
Employee;
Department);
integer;
Employee;
boolean;
Definição de Classes
string;
integer;
tuple (manager: Employee;
startdate: Date);
locations:
set(string);
employees:
set(Employee);
projects:
set(Project));
operations no_of_emps:
integer;
create_dept:
Department;
destroy_dept:
boolean;
assign_emp(e:Employee): boolean;
remove_emp(e:Employee): boolean;
end Department;
define class Department:
type tuple (dname:
dnumber:
mgr:
Definição de Classes
Operações
d.no_of_emps
d.destroy_dept
Atributos
d.dnumber
d.mgr.startdate
e.dept.dname
Notação de Ponto (Dot Notation)
PERSON: Name, Address, Birthdate, Age, SSN
EMPLOYEE subtype-of PERSON: Salary, HireDate, Seniority
STUDENT: subtype-of PERSON: Major, GPA
Permite a definição de novos tipos (classes) a partir de
tipos (classes) já existentes
Este novo tipo (classe), chamado de sub-tipo (sub-classe),
herda todos os atributos e operações do tipo (classe) já
existente, chamado super-tipo (ou super-classe)
Um sub-tipo pode estender (ou especializar) um supertipo acrescentando novas características (atributos ou
operações)
Exemplos:
Hierarquias de Tipos (ou Classes)
Não-estruturados
O SGBD não conhece a sua estrutura, apenas a
aplicação que os utiliza é capaz de interpretá-los
Não fazem parte dos tipos de dados básicos
Ex.: imagens, textos longos (BLOBs – binary large
objects)
Operações específicas podem ser definidas usando-se
o conceito de tipos abstratos de dados
Estruturados
Construídos a partir de aplicações sucessivas dos
construtores de tipos
Objetos Complexos
Necessárias em muitas aplicações (ex., engenharia
de software, CAD/CAM, etc.)
Não é uma característica da tecnologia OO
Herança múltipla e herança seletiva
Versões
Objetos ou operações possuem mais de um
comportamento ou significado, dependendo do
contexto sobrecarga semântica
Exemplo: operador +
Polimorfismo
Outras Características
Ausência de modelo de dados comum
Grande atividade experimental e de desenvolvimento
Inexistência de um padrão para SGBDOOs limitava a sua
utilização de forma ampla
Pequena portabilidade
Baixa interoperabilidade
Falta de referência para comparação de produtos
Padrão para SGBDOOs
Object Data Management Group
Consórcio de desenvolvedores de SGBDOOs
Criação de um padrão para SGBDOOs - ODMG 2.0:
Modelo de objetos
Object Definition Language (ODL)
Object Query Language (OQL)
Ligações com C++, Java e SMALLTALK
ODMG
Modelo em que se baseiam as linguagens ODL e OQL
Provê tipos, construtores de tipos e demais conceitos
para especificação de esquemas para BDOO
Componentes básicos:
Objetos - estado (valor) e identificador (OId)
Literais - valor
Objetos podem ser:
Atômicos
Estruturados (struct)
Coleções (set, bag, list, array, dictionary)
Modelo de Objetos
Herança de uma única classe (EXTENDS)
Herança múltipla apenas no caso de comportamento
(operações), portanto só podem ser especificadas a
partir de interfaces
Interface - não instanciável especifica o comportamento
(operações) dos objetos
Classe - instanciável usada para se criar objetos das
aplicações
Interface X Classe:
Modelo de Objetos
extent
Herança de interfaces definida via operador “:”
Instâncias de classes definidas através da palavra-chave
extends
Herança de classes definida através da palavra-chave
atributos (attributes)
relacionamentos (relationships)
operações (assinaturas dos métodos)
Definições de classes e interfaces podem conter:
usada para se “especificar” objetos (classes e interfaces)
Independente de qualquer linguagem de programação
ODL – Object Definition Language
class Student extends Person
( extent students
key ssn
)
{
attribute string class;
...
relationship Department majors_in
inverse Department::has_majors;
relationship set<Grade> completed_sections
inverse Grade::student;
void change_major(in string dname)
raises(dname_not_valid);
...
};
Definição de uma Classe
ODL - Object Definition Language
class Employee
( extent employees
key ssn )
{
attribute struct Name {string fname, string minit,
string lname} name;
attribute string ssn;
attribute enum Gender{M,F} sex;
attribute string address;
attribute float salary;
attribute date birthdate;
attribute set<struct Assgmt{Project proj, float hours}> works_on;
relationship set<Dependent> dependents {order_by birthdate};
relationship Employee supervisor;
relationship Department works_for inverse Department::workers;
};
Exemplo de um Esquema ODMG
class Department
( extent departments
key number )
{
attribute string name;
attribute short number;
attribute set<string> locations;
attribute date manager_start_date;
relationship Employee manager;
relationship set<Employee> workers
inverse Employee::works_for;
boolean add_worker (in Employee worker)
raises (already_works_here);
boolean remove_worker (in Employee worker)
raises (not_found);
boolean change_manager (in Employee manager);
};
Exemplo de um Esquema ODMG
class Project
( extent projects
key number )
{
attribute string name;
attribute short number;
attribute string location;
relationship Department controlling_department;
relationship set<Employee> workers;
boolean add_worker (in Employee worker)
raises (already_works_here);
boolean remove_worker (in Employee worker)
raises (not_found);
};
Exemplo de um Esquema ODMG
class Assignment
( extent assignments )
{
attribute float hours;
relationship Employee employee
inverse Employee::works_on;
relationship Project project
inverse Project::has_workers;
};
class Dependent
( extent dependents )
{
attribute string name;
attribute Gender sex;
attribute date birthdate;
attribute string relationship;
};
Exemplo de um Esquema ODMG
class Project
( extent projects key number )
{...
relationship set<Assignment> has_workers
inverse Assignment::project;
}
class Employee
( extent employees key ssn )
{...
relationship set<Assignment> works_on
inverse Assignment::employee;
}
Com a classe Assignment definida, os seguintes
relacionamentos devem inseridos nas classes
Employee e Project:
Exemplo de um Esquema ODMG
e.name
e.works_for.dname
rsdepartment.manager.salary
Expressões de caminho especificam um caminho (path)
para objetos e atributos
e in employeees
variáveis de interação
employees (extensão da classe Employee)
rsdepartment (nome dado a um objeto do tipo Department)
“pontos de entrada” (entry points) objetos persistentes
Consultas requerem
select ... from ... where
select e.name.lname
from
e in employees
where e.works_for.dname = ‘Research’
Sintaxe semelhante a SQL
OQL – Object Query Language
select
d.dname
from
d in departments
where
d.college = ‘Engineering’;
retorna um resultado do tipo bag<string>
departments;
retorna um resultado do tipo set<Department>
csdepartment.chair;
retorna um resultado do tipo Faculty
csdepartment.chair.rank;
retorna como resultado um string
Resultado das Consultas em OQL
select f.rank
from
f in csdepartment.has_faculty;
select distinct f.rank
from
f in csdepartment.has_faculty;
select f.rank
from
f in faculty
where f.works_in.dname = ‘Computer Science’;
Posição (rank) dos professores do departamento de
computação
Exemplos de Consulta em OQL
select struct (name:struct (last_name: s.name.lname,
first_name: s.name.fname),
degrees(select struct (deg: d.degree,
yr: d.year,
college: d.college)
from d in s.degrees))
from s in csdepartment.chair.advises;
from s in grad_student
where s.advisor in select d.chair from d in departments
where d.dname = ‘Computer Science’;
Nome e respectivos títulos dos estudantes de pósgraduação orientados pelo chefe do departamento de
computação
Exemplos de Consultas OQL
relacionamento
select struct (last_name: s.name.lname,
operação
first_name: s.name.fname),
gpa: s.gpa)
from s in students
where s.majors_in.dname = ‘Computer Science’
and
s.class = ‘senior’
order by gpa desc, last_name asc, first_name asc;
Nome dos estudantes seniores do curso de computação
com seus respectivos coeficientes de aproveitamento
acadêmico
Exemplos de Consultas OQL
avg (select s.gpa from s in students
where s.majors_in.dname = ‘Computer Science’
and s.class = ‘senior’);
count (s in has_minors(‘Computer Science’));
Funções de agregação
has_minors(‘Computer Science’);
define has_minors(deptname)
select s from s in students
where s.minors_in.dname = deptname;
Consultas parametrizadas (similares ao conceito de visão
no modelo relacional)
Outras Facilidades OQL
select s.name.lname, s.name.fname from s in students
where ‘Database Systems I’ in
(select c.cname
from c in s.completed_sections.of_courses);
for all g in
(select s from s in grad_students
where s.majors_in.dname = ‘Computer Science’) :
g.advisor in csdepartment.has_faculty;
Exists g in
(select s from s in grad_students
where s.majors_in.dname = ‘Computer Science’) : g.gpa = 4;
Expressões de pertinência e quantificação
Outras Facilidades OQL
Descrevem como as construções do modelo de objetos
ODMG são mapeadas para construções das linguagens de
programação requer ainda uma linguagem específica
para manipulação de objetos (OML – Object Manipulation
Language)
Propostas para três linguagens:
C++
Java
Smalltalk
Ligações (Bindings) para o Padrão ODMG 2.0
O2 (Java e C++)
ObjectStore (Java, C++ e ActiveX)
Objectivity (Java, C++ e SmallTalk)
Poet Object Store (Java e C++)
Versant (Java e C++)
SGBDOOs Concordantes com o Padrão
ODMG 2.0
Elsmari, R. & Navathe, S.B. Fundamentals of Database
Systems. 3ª Ed., Addison Wesley, Reading, MA, 2000.
(Cap. 11 e 12)
Cattel, R. (ed.) The Object Database Standard - ODMG
2.0. Morgan Kaufmann, San Francisco, CA, 1997.
Referências
Download