Banco de Dados com Objetos

Preview:

DESCRIPTION

Banco de Dados com Objetos. Jacques Robin CIn-UFPE. Banco de dados com objetos: diversidade dos modelos. Modelo puramente orientado a objetos (OO), ex., O 2 Modelo objeto-relacional (OR), ex., SQL3 Modelo funcional orientado a objeto (FOO), ex, FQL - PowerPoint PPT Presentation

Citation preview

Banco de Dados com ObjetosBanco de Dados com Objetos

Jacques RobinCIn-UFPE

Banco de dados com objetos: Banco de dados com objetos: diversidade dos modelosdiversidade dos modelos

Modelo puramente orientado a objetos (OO), ex., O2

Modelo objeto-relacional (OR), ex., SQL3 Modelo funcional orientado a objeto (FOO), ex, FQL Modelo ativo orientado a objetos (AOO), ex., Chimera Modelo dedutivo orientado a objetos (DOO), ex., F-Logic Modelo com restrições e objetos (COO), ex., C3

Modelo de componentes distribuídos orientado a objetos (DOOC), ex., CORBA

imperativo

procedimental

funcional lógico por restrições

declarativo

relacional

objeto C3F-Logic

SQL92

FQL

Datalog

SLQ99

O2

DISCO

dados

comportamentos

Orientação objetos para BD: motivaçãoOrientação objetos para BD: motivação

Uniformidade: • codificar lógica da aplicação e o acesso aos dados no mesmo

paradigma (impedance mismatch) Completude computacional:

• embutir no BD comportamentos ligados aos dados Expressividade da modelagem:

• estruturas complexas, recursivas e heterogêneas Modularidade e reuso

• hierarquia de classes com herança e encapsulamento permite prototipagem, personalização e extensão rápida

Integração em sistemas de componentes distribuídos Novas aplicações de BD:

• CAD/CAM, CASE, GIS, gerenciamento de workflows, groupware, bibliotecas digitais multimídia, comercio eletrónico, etc.

Serviços requeridos de um BDOOServiços requeridos de um BDOOOrientação a objetos Identificação única Encapsulamento de estado e

comportamento Construtores de estruturas

complexas ortogonais e extensíveis Hierarquia de classes (esquema)

com herança de estado e comportamento

Estado inicial e comportamento default

Sobrescrita, sobrecarga e ligação dinâmica

Completude computacional Restrições, verificação e inferência

de tipos Herança múltipla Acesso completo a recursos Gerenciamento de versões

Banco de dados Persistência Otimização de acesso a

memória segundaria Acesso concorrente Recuperação:

• terminação, exceções, transações

Linguagem de manipulação: • conciso, intuitivo, declarativo,

interpretado, otimizável, independente da aplicação, formalmente bem fundamentado

Visões e dados derivados Restrições de integridades Manipulação dinâmica de

esquema Utilitários administrativos

Modelos puramente orientado a objetosModelos puramente orientado a objetos

Extensões de LPOO para serviços de BD: resolvem o “impedance mismatch” (com Java, C++, Smalltalk)- nenhum já fornece leque de serviços suficiente para constituir

um autêntico SGBD (em geral apenas persistência e concorrência)

Implementações do padrão ODMG:+ cobrem maioria dos serviços obrigatórios de BDOO- sintaxe: consultas SQL, definições SQL ( CORBA)- semântica: nada a ver com SQL, e de fato sem definição

precisa- sem fundamentação nos princípios de engenharia de software- “padrão” comercial, ainda imaturo, e sem apoio dos gigantes+ cada vez mais usadas para aplicações avançadas

Características de OCaracterísticas de O22

Implementação de ODMG bastante completa e divulgada

Tipos primitivos: booleano, caráter, inteiro, real, string

Tipos compostos: construtores • ortgonais e recursivos de tupla,

lista, bag e conjunto• aplicados a tipos primitivos

e/ou recursivamente classes definidas pelo usuário

Consultas: via O2SQL Classes:

• definições de novos tipos compostos e assinaturas de métodos

• herança múltipla de tipos e métodos com sobrescrita, sobrecarga e ligação dinámica

Métodos:• implementações desligadas

das suas assinaturas

• ou em O2C, subconjunto de C estendido para tipos do O2

• ou em LPOO ligado (Java, C++, Smalltalk) via interface string

Encapsulamento:• por default métodos privados• atributos acessíveis apenas via

métodos de acesso get e set• podem ser declarados públicos

Objetos: • id única• persistente ou transitório• persistência definida por

alcançabilidade

Estudo de caso: Estudo de caso: o BD acadêmicoo BD acadêmicoRequisitos em linguagem naturalRequisitos em linguagem natural

Esquema:1. Uma pessoa tem um nome e uma data de

nascimento.2. Um departamento tem um nome e

empregados, que podem ser professores, assistentes ou chefe.

3. Uma publicação tem um nome e um conjunto de autores.

4. Um empregado é uma pessoa que trabalha em um departamento por um salário.

5. Um professor é um empregado de meia idade, que produz publicações, ganha na media $50,000 por ano é tem algum diploma, geralmente um doutorado.

6. Professores e assistentes produzem publicações.

7. Alguém é considerado de meia idade entre 30 e 60 anos.

8. O chefe de um departamento tem que ser um professor.

Dados:1. Bob tem 40 anos e é o chefe do

departamento de informática. 2. John e Sally são assistentes do

departamento de informática.3. Mary é mestre e professora no

departamento de informática. 4. Mary publicou com seu chefe e com John e

Sally um artigo sobre F-Logic no JACM.5. Phil é um professor no departamento de

informática e publicou com Bob e Mary, um artigo sobre Flora no CACM.

Consultas:1. Quem são os empregados do

departamento de informática de meia idade que são seus próprio chefe?

2. Quem publicou com Mary no JACM?3. Onde Mary publicou junto com Phil?

BD acadêmico: modelo lógico ERBD acadêmico: modelo lógico ER

BD acadêmico: modelo físico ERBD acadêmico: modelo físico ER

BD acadêmico: esquema em SQL92BD acadêmico: esquema em SQL92CREATE TABLE Pessoa ( Pessoa_CPF VARCHAR2(12) NOT NULL, Pessoa_Nome VARCHAR2(40) NULL, Pessoa_Nasc DATE NULL, PRIMARY KEY (Pessoa_CPF));

CREATE TABLE Depto ( Depto_CGC VARCHAR2(20) NOT NULL, Depto_Nome VARCHAR2(40) NULL, Chefe_CPF VARCHAR2(12) NULL, Chefe_Depto_CGC VARCHAR2(20) NOT NULL, PRIMARY KEY (Depto_CGC), FOREIGN KEY (Chefe_CPF, Chefe_Depto_CGC) REFERENCES Empreg(Pessoa_CPF, Depto_CGC));

CREATE TABLE Empreg_Publi ( Publi_Id VARCHAR2(20) NOT NULL, Depto_CGC VARCHAR2(20) NOT NULL, Pessoa_CPF VARCHAR2(12) NOT NULL, PRIMARY KEY (Publi_Id, Depto_CGC, Pessoa_CPF), FOREIGN KEY (Publi_Id) REFERENCES Publi, FOREIGN KEY (Depto_CGC, Pessoa_CPF) REFERENCES Empreg);

CREATE TABLE Empreg ( Depto_CGC VARCHAR2(20) NOT NULL, Pessoa_CPF VARCHAR2(12) NOT NULL, Empreg_Salario NUMBER(5,2) NULL, Empreg_Cargo VARCHAR2(20) NULL CHECK (Empreg_Cargo IN ('Professor',

'Assistente')), Empreg_Titulação VARCHAR2(10) NULL, PRIMARY KEY (Depto_CGC, Pessoa_CPF), FOREIGN KEY (Pessoa_CPF) REFERENCES Pessoa ON DELETE CASCADE, FOREIGN KEY (Depto_CGC) REFERENCES Depto);

CREATE TABLE Publi ( Publi_Id VARCHAR2(20) NOT NULL, Publi_Nome VARCHAR2(40) NULL, PRIMARY KEY (Publi_Id));

CREATE ASSERTION Restrição_Chefe CHECK (NOT EXISTS (SELECT * FROM Depto D, Empreg E, WHERE D.Chefe_CPF = E.Pessoa_CPF AND E.Cargo <> “Professor”));

BD acadêmico: dados em SQL92BD acadêmico: dados em SQL92

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome,Pessoa_Nasc) VALUES (“025440874-55”,”Bob”, 01021960);

INSERT INTO Depto (Depto_CGC, Depto_Nome, Pessoa_CPF) VALUES (“001.002.33-44”,”DI”, “025440874-55”);

INSERT INTO Empreg (Depto_CGC , Pessoa_CPF, Empreg_Cargo, Empreg_Titulação, Empreg_Salario)

VALUES (“001.002.33-44”, “025440874-55”, “Professor”, “PhD”,5200);

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome) VALUES (“020440994-50”, ”John”);

INSERT INTO Empreg (Depto_CGC, Pessoa_CPF, Empreg_Cargo) VALUES (“001.002.33-44”, “020440994-50”, “Assist”);

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome) VALUES (“040450964-10”, ”Sally”);

INSERT INTO Empreg (Depto_CGC, Pessoa_CPF, Empreg_Cargo) VALUES (“001.002.33-44”, “040450964-10”, “Assist”);

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome) VALUES (“020453924-11”, ”Mary”);

INSERT INTO Empreg (Depto_CGC, Pessoa_CPF, Empreg_Cargo)

VALUES (“001.002.33-44”, “020453924-11”, “Prof”, “Mestre”,5100);

INSERT INTO Pessoa (Pessoa_CPF, Pessoa_Nome) VALUES (“044453424-41”, ”Phil”);

INSERT INTO Empreg (Depto_CGC, Pessoa_CPF, Empreg_Cargo)

VALUES (“001.002.33-44”, “044453424-41”, “Prof”, “Mestre”,5100);

INSERT INTO Publi (Publi_Id, Publi_Nome) VALUES (“0001”, “Flora - CACM”);

INSERT INTO Publi (Publi_Id, Publi_Nome) VALUES (“0002”, “F-Logic - JACM”);

INSERT INTO Empreg_Publi (Depto_CGC, Pessoa_CPF, Publi_Id) VALUES (“001.002.33-44”, “025440874-55”, “0001”);

INSERT INTO Empreg_Publi (Depto_CGC, Pessoa_CPF, Publi_Id) VALUES (“001.002.33-44”, “020440994-50”, “0001”);

INSERT INTO Empreg_Publi (Depto_CGC, Pessoa_CPF, Publi_Id) VALUES (“001.002.33-44”, “044453424-41”, “0002”);

INSERT INTO Empreg_Publi (Depto_CGC, Pessoa_CPF, Publi_Id) VALUES (“001.002.33-44”, “025440874-55”, “0002”);

BD acadêmico: consultas em SQL92BD acadêmico: consultas em SQL92

SELECT Depto. Pessoa_CPF, Empreg.Pessoa_CPFFROM Depto, EmpregGROUP BY Depto. Pessoa_CPFWHERE Depto.nome = “DI” AND Depto.Pessoa_Nasc < 01011970 AND Depto.Pessoa_Nasc > 01011950;

SELECT Pessoa. Pessoa_NomeFROM PessoaWHERE Pessoa. Pessoa_CPF = (SELECT Empreg_Publi. Depto_CGC, Empreg_Publi. Pessoa_CPF, Empreg_Publi. Publi_Id FROM Empreg_Publi WHERE Empreg_Publi. Pessoa_CPF = “020453924-11”

AND Empreg_Publi. Pessoa_CPF = “0002”);

SELECT Publi. Publi _NomeFROM Publi WHERE Publi. Publi _ID = (SELECT Empreg_Publi. Publi_Id FROM Empreg_Publi WHERE Empreg_Publi. Pessoa_CPF = “020453924-

11” AND Empreg_Publi.Pessoa_CPF = “044453424-

41”);

BD acadêmico: modelo UMLBD acadêmico: modelo UML

Pessoa

Empreg DeptoPublitrabalhan 1

chefia1 1

Prof

autorn n

BD acadêmico: esquema em O2BD acadêmico: esquema em O2Esquema: definição das classesclass Pessoa tuple(nome: string, nasc: Date) method public idade: integer, meiaIdade:

booleanend;

class Empreg inherit Pessoa tuple(cargo: string, salario: real, titulação: string; depto: Depto, publi: set(Publi), method public setCargo(cargo: string)end;

class Prof inherit Empreg method public setCargo(cargo: string), getCargo: string, getSalario:

integer, getTitulacao: string, meiaIdade:

stringend;

class Depto tuple(nome: string, chefe :Prof, empregs: set(Empreg)) method public addEmpreg(empreg:

Empreg) end; class Publi tuple(nome: string, autores: set(Empreg))

end;

BD acadêmico: esquema em OBD acadêmico: esquema em O22

Esquema: definição dos métodosmethod body idade: integer in Pessoa { integer i; Date d; d = today(); i = d->year - self->nasc->year; if (d->month < self->nasc->month) || ((d->month == self->nasc->month) && (d->day < self->nasc->dat))) --i; return i;}

method body meiaIdade: boolean in Pessoa { return (self->idade => 30 && self->idade <= 60);}

method setCargo(cargo: string):boolean in Prof { if cargo == “prof” then {self->cargo = cargo; return 1;} else return 0;}

method getCargo: string in Prof { if (self->cargo == null) then return “prof” else return self->cargo;}

method getSalario: integer in Prof { if (self->salario == null) then return 50,000 else return self->salario;}.

method getTitulaçãp: string in Prof { if (self->titulacao == null) then return”PhD.” else return self->titulação;}

method body MeiaIdade: boolean in Prof { return true};

method body addEmpreg(Empreg): boolean in Depto { if (Empreg->cargo == “prof”) || (Empreg->cargo == “assist”) then {self->empregados += set(Empreg); return true} else return false;}

BD acadêmico: dados em OBD acadêmico: dados em O22

Dados: conjuntos de objetos persistentesname Empregs: set(Empreg); name Publis: set(Publi); name DI: DeptoDados: criação de objetos por instanciaçãorun body{ o2 Prof bob = new Prof; bob = tuple(nome: “Bob”, nasc: 01021960,

cargo: “prof”, depto: DI); Empregs += set(bob); DI -> empregs += set(bob) DI -> chefe = bob;

o2 Prof phil = new Prof; mary = tuple(nome: “Phil”, cargo: “prof”, depto: DI); Empregs += set(phil); DI -> empregs += set(phil)

o2 Prof mary = new Prof; mary = tuple(nome: “Mary”, titulação: “mestre”; cargo: “prof”, depto: DI); Empregs += set(mary); DI -> empregs += set(mary)

o2 Prof sally = new Empreg; mary = tuple(nome: “Sally”, cargo: “assist”, depto: DI); Empregs += set(sally); DI -> empregs += set(sally)

o2 Prof john = new Empreg; mary = tuple(nome: “John”, cargo: “assist”, depto: DI); Empregs += set(john); DI -> empregs += set(john)

o2 Publi jacm1 = new Publi;jacm1 = tuple(nome: “JACM”);jacm1->autores += set(phil);phil->publi += set(jacm1);jacm1->autores += set(bob);bob->publi += set(jacm1);jacm1->autores += set(mary);mary->publi += set(jacm1);

o2 Publi cacm1 = new Publi;cacm1 = tuple(nome: “CACM”);cacm1->autores += set(mary);mary->publi += set(cacm1);cacm1->autores += set(bob);bob->publi += set(cacm1);cacm1->autores += set(sally);sally->publi += set(cacm1);cacm1->autores += set(john);sally->publi += set(cacm1);

BD acadêmico: consultas em OBD acadêmico: consultas em O22

select e.nome from e in Empregswhere e.meiaIdade = 1 and e->Depto->chefe = e

select e.nomefrom e in Empregs, f in Empregs, p in e->Publi, q in f->Publiwhere f = mary and p = q and p->nome = “JACM”

select p.nomefrom p in Publis, e1 in p->autores, e2 in p->autoreswhere e1 = mary and e2 = phil

Características de SQL99Características de SQL99 Extensão de SQL92 aprovada fim 1999 por ISO e ANSI:

• Apesar de ainda chamar-se de SQL,• não é mais uma linguagem de consulta de SGBD relacional,

mas• uma linguagem de programação de aplicações de BD

integrando os modelos relacional, dedutivo, ativo e orientado a objetos

Objetivo:• Padronizar extensões proprietárias de SQL92 já implementadas

nos SGBDR comerciais recentes (Oracle, IBM, Sybase, Informix) Principais extensões:

• Modelo objeto-relacional • Completude computacional

via integração no padrão de SLQ/PSM (Persistent Stored Modules) uma linguagem de programação persistente inspirada de PASCAL

• Regras ativas (gatilhos) e dedutivas (visões recursivas)• Operador SIMILAR TO de casamento string / expressão regular

Regras dedutivas recursivas em SQL99Regras dedutivas recursivas em SQL99 Regras dedutivas recursivas:

• consultas recursivas via WITH RECURSIVE• visões recursivas via CREATE RECURSIVE VIEW

Exemplo:CREATE TABLE parent ( parent_CPF VARCHAR(20) NOT NULL, criança_CPF VARCHAR(20) NOT NULL, sexo_parent BOOLEAN, sexo_criança BOOLEAN);

CREATE RECURSIVE view ancestral(Ancestral,Descendente) AS SELECT Parent Filho FROM parent UNION SELECT a.Ancestral, p.Filho FROM ancestral a, parent p WHERE a.Descendente = p.Parent;SELECT * FROM ancestral WITH RECURSIVE ancestral(Ancestral,Descendente) AS (SELECT Parent Filho FROM parent UNION SELECT a.Ancestral, p.Filho FROM ancestral a, parent p WHERE a.Descendente = p.Parent) SELECT * FROM ancestral

Regras ativas em SQL99Regras ativas em SQL99 Regras ativas:

• Evento = modificação do BD (via UPDATE, INSERT, DELETE)• Condição = consulta (SELECT FROM WHERE) antes ou

depois do evento• Ação = modificação do BD

via operação de manipulação de dados (UPDATE, INSERT, DELETE)

ou via chamada de procedimento ou função SQL/PSM

Exemplo:CREATE TRIGGER log_atualização_salario BEFORE UPDATE OF salario ON empregs REFERENCING OLD ROW as antigo NEW ROW as novo FOR EACH ROW INSERT INTO tabela_de_log VALUES (CURRENT_USER, antigo.salario, novo.salario)

Orientação a objetos em SQL99Orientação a objetos em SQL99 Tipos primitivos:

• os SQL92 + booleano Tipos compostos:

• conjuntos de atributos• cada um de tipo primitivo ou

recursivamente composto Classes:

• definições de novos tipos compostos e assinaturas de métodos

Herança:• simples com sobrescrita,

sobrecarga e ligação dinámica

• classe instanciáveis ~ classes Java

• classes não instanciáveis ~ interface Java

Métodos:• implementações desligadas das

suas assinaturas• ou em SQL/PSM• ou em LPOO ligado (ex, Java) via

interface string (ex, JSQL) Encapsulamento:

• todos os atributos privados acessíveis apenas via métodos de acesso get e set fornecidas automaticamente pela declaração de um novo tipo composto

• todos os outros métodos são publicos

Objetos: • tabelas de novos tipo compostos• id única criada automaticamente• expressão de caminho com ->

BD acadêmico: esquema em SQL99BD acadêmico: esquema em SQL99Esquema: definição das classescreate type pessoa as (nome varchar(20), nasc date) instanciable not final ref pessoa_id instance method idade returns int instance method meiaIdade returns boolean;

create type empreg under pessoa as (cargo varchar(20), salario real, titulação varchar(20), depto ref(depto), publi set(ref(publi)) instanciable not final ref empreg_id; create type prof under empreg as (cargo varchar(20) default professor, salario int default 50,000, titulação int default “PhD.”) instanciable not final ref prof_id instance method meiaIdade returns boolean;

create type publi as (nome varchar(20), autores

set(ref(empreg))) instanciable not final ref publi_id;

create type depto as(nome varchar(20), chefe ref(prof), empregs set(ref(empreg))) instanciable not final ref depto_id;

create table pessoas of pessoacreate table empregs of empregcreate table profs of profcreate table deptos of deptocreate table publis of publi

BD acadêmico: esquema em SQL99BD acadêmico: esquema em SQL99

Esquema: restrições de integridadescreate assertion restrição_chefe check (not exists (select * from deptos d, empregs e, where d.chefe->cargo <> “professor”));

create assertion restrição_prof check (not exists (select * from profs p where p.cargo <>

“professor”));

Esquema: definição dos métodoscreate method idade of pessoa ? begin declare i; declare date d; set d = today(); set i = d.year - self.nasc.year; if (d.month < self.nasc.month) || ((d.month = self.nasc.month) && (d.day < self.nasc.dat))) then return i - 1; else return i; endif; end;

create method meiaIdade of pessoa return (self.idade => 30) && (self.idade <= 60);

BD acadêmico: dados em SQL99BD acadêmico: dados em SQL99insert into profs(nome,nasc) values(“Bob”, 01021960) ;insert into deptos (nome, chefe) values (”DI”, select ref from profs where nome = “Bob”);insert into profs(depto) values (select ref from deptos where nome = “DI”); insert into empregs(nome,depto,cargo) values (”John”, select ref from deptos where nome = “DI”,”assistente”); insert into empregs(nome,depto,cargo) values (”Sally”, select ref from deptos where nome = “DI”,”assistente”);insert into profs(nome,depto,cargo,titulação) values (“Mary”, select ref from deptos where nome = “DI”, ”assistente”, “mestre”);insert into profs(nome,depto,cargo,titulação) values (“Phil”, select ref from deptos where nome = “DI”, ”professor”);update depto set empregs = select ref from profs where nome = “Bob” union select ref from empregs where nome = “Mary” union select ref from profs where nome = “Phil” union select ref from profs where nome = “John” union select ref from profs where nome = “Sally” where nome = “DI”); insert into publis(nome,autores) values (“Florid - CACM”, select ref from empregs where nome = “Phil” union select ref from profs where nome = “Bob” union select ref from profs where nome = “Mary”);insert into publis(nome,autores) values (“F-Logic - JACM”, select ref from empregs where nome = “Mary” union select ref from profs where nome = “Bob” union select ref from profs where nome = “John” union select ref from profs where nome = “Sally”);

BD acadêmico: consultas em SQL99BD acadêmico: consultas em SQL99

select e.nome from empregswhere e.meiaIdade = true and e = e.depto->chefe;

select e.nome from empregswhere “JACM” in e.publis->nome and “Mary” in e.publis->autores-

>nome;

select p.nome from publiswhere “Mary” in p.autores->nome and “Phil” in p.autores->nome;

Aplicações e limitações Aplicações e limitações dos modelos OO e ORdos modelos OO e OR

Aplicações: Integração de BD em

sistemas maiores orientados a objetos

BD espaciais e GIS BD espaço-temporais BD multimídia BD distribuídas heterogêneas BD de workflows BD para CAD/CAM e CASE

BD OLTP clássica também, especialmente com SQL99

Limitações: Sem semântica formal

definida Sem capacidade built-in para

raciocínio Comportamentos

implementados procedimentalmente

Performance insuficiente para bases muito grandes (TB)

Metodologia de projetos de BD

Modelo OO x Modelo ORModelo OO x Modelo OR

Superficialmente muito convergente• ex, definição de classes em O2 e SQL99, consultas em O2SQL

e SQL99, métodos em O2C e SQL/PSM

Fisicamente muito diferente, com conseqüências de performance ainda não clara

SGBDOR implementados (ex, Oracle8i) com várias vantagens sobre SGBDOO implementados (ex, O2):• escalabilidade de espaço e concorrência

(ex, BD da Nasqad: 30,000 acessos concorrentes a TB de dados)

• declaratividade para criação e atualização de dados, restrições de integridades, comportamentos ativos e dedutivos (recursão, default)

• sem ponteiros (segurança contra hackers)• facilidade para embrulhar BD relacionais de legado

BD dedutivo orientado a objetos: BD dedutivo orientado a objetos: motivaçãomotivação

Serviços ortogonais e qualidades complementarias: capacidade de inferência built-in (BDD +, BDOO -) declaratividade (BDD +, BDOO -) fundamentos formais (BDD +, BDOO -) integração com BD relacionais (BDD+, BDOO -) poder de modelagem (BDD -, BDOO +) metodologia de projeto (BDD -, BDO ok) extensibilidade (BDD -, BDO +) integração em sistemas maiores (BDD -, BDO +) divulgação e implementações comerciais (BDD -,

BDO +)

Serviços de um BD Serviços de um BD dedutivo orientado a objetosdedutivo orientado a objetos

Requisitos OO:•identidade de objetos•objetos complexos•classes•encapsulamento•herança•overriding, overloading e ligação dinâmica•extensibilidade

Requisitos Raciocínio:

•linguagem declarativa baseado na lógica•unificação de termos com variáveis

•mecanismo de dedução

•fundamentos formais

Requisitos BD:•dados persistentes•gerenciamento de grandes conjuntos de dados•gerenciamento de memória secundária•gerenciamento de transações•linguagem de consulta declarativa

BDDOOBDDOO

Tipologia e implementações dos modelos Tipologia e implementações dos modelos dedutivos orientados a objetosdedutivos orientados a objetos

Extensões de modelo dedutivo com facilidades OO• extensões de Datalog (ConceptBase, Logres, Logidata+, ROL)• extensões de Prolog (Quixote)

Extensões de modelo OO com regras dedutivas (?) Extensões de SQL com objetos e regras dedutivas

(ESQL2) Acoplamento entre SGBDOO e SGBDD (Coral++, ROCK & ROLL, Chimera) Construção de uma lógica formal orientada a objetos,

seguida da sua implementação em um sistema (F-Logic, Florid, Flora e Orlog)

F-Logic: serviços de orientação a objetosF-Logic: serviços de orientação a objetos

Fornecidos: Identificação única, inclusive

funcionais Construtores de estruturas

complexas ortogonais e extensíveis

Hierarquia de classes (esquema) com herança múltipla de estado e comportamento

Estado inicial e comportamento default

Sobrescrita, sobrecarga e ligação dinâmica

Restrições de tipos

Parcialmente fornecidos: Completude computacional

dependentemente da implementação

Verificação e inferência de tipos indiretamente via regras de ordem superior

Não fornecidos: Encapsulamento Acesso completo a recursos Gerenciamento de versões

F-Logic: serviços de dedução e de BDF-Logic: serviços de dedução e de BD

Serviços de dedução: Fundamentação em uma teoria

da prova completa e correta Motor de inferência para regras

dedutivas com:• referências a objetos nas

premissas e conclusões• sintaxe de ordem superior• semântica da 1a ordem• unificação de descrições

parciais de objetosServiços de BD: Construtores de conjuntos com

semântica de inclusão Operadores de agregação Consultas devolvem todas as

respostas de uma vez

Falta: Atualizações declarativas Persistência Gerenciamento de grandes

conjuntos de dados Gerenciamento de memória

secundária Gerenciamento de transações

BD acadêmico: em RelationlogBD acadêmico: em Relationlog

Esquema: titulacao(F,phd) :- trabalha(F,_,prof), not titulacao(F,ms).salario(P,50000) :- trabalha(F,_,prof), not salario(F,_).meiaIdade(F) :- idade(F,A), integer(A), A >= 30, A =< 60.meiaIdade(F) :- trabalha(F,_,prof).trabalha(B,D,prof) :- chefe(D,B), trabalha(E,D,prof).patrão(B,E) :- chefe(D,B), trabalha(E,D,_).Dados:idade(bob,40). trabalha(bob,di,prof).

chefe(di,bob).trabalha(john,di,assist). trabalha(sally,di,assist). titulacao(mary,ms). trabalha(mary,di,prof).trabalha(phil,di,prof).publi(jacm,{john,sally,mary,bob}).publi(cacm,{phil,mary,bob}).

Consultas:? meiaIdade(<B>), trabalha(<B>,di,_), patrão(<B>,<B>).B = {bob}.?- publi(jacm,<F,mary>), F \= mary.F = {bob}.?- publi(P,<phil,mary>).P = {cacm}.

BD acadêmico: esquema e dados em F-BD acadêmico: esquema e dados em F-LogicLogic

Esquema: hierarquia de classesempreg::pessoa. prof::empreg. assist::empreg.Esquema: assinatura de classesdepto[nome => string; empregs =>> empreg; chefe => prof].pessoa[nome => string; nasc => data; idade

=> int].empreg[depto => depto; salario => int].publi[nome => string, autores =>>

{assist,prof}].prof[publi =>> publi; titulação *-> PhD; salario -> 50000].assist[publi =>> publi].data[ano=>int; mes=>int; dia=>int].Esquema: regras dedutivasD:data :- ... X:pessoa[idade -> I] :- ...meiaIdade(P) :- P:prof.meiaIdade(P) :- P.idade >= 30, P.idade <= 60.X:[jointPubli@Y->> P] :- X:{prof,assist}, Y:

{prof,assist}, X[publi ->> P], Y[publi ->>P].

Dadosbob:prof[nome -> “Bob”; nasc -> data[ano => 1960; mes => 01; dia => 02]; depto -> di, publi ->> {jacm,cacm}].mary:prof[nome -> “mary”; titulacao -> mestre depto => di, publi ->>

{jacm,cacm}]. phil:assist[nome -> “Phil”, depto => di, publi ->> {cacm}].john:assist[nome -> “John”, depto => di, publi ->> {jacm}].sally:assist[nome -> “Sally”, depto => di, publi ->> {jacm}].jacm:publi[nome -> “JACM”; autores ->> {bob, mary, john,

sally}].cacm:publi[nome -> “CAC”, autores ->> {bob, mary, phil}].

BD acadêmico: consultas em F-LogicBD acadêmico: consultas em F-Logic

?- meiaIdade(E), E:empreg[depto -> di[chefe -> E]].E = bob.?- mary[jointPubli@E ->> jacm].E = bobE = johnE = sally?- mary[jointPubli@phil ->> P].P = cacm

Recommended