Banco de Dados Dedutivos Orientados a Objetos e
Banco de Dados Dedutivos Orientados a Objetos e FLORA Sérgio Queiroz srmq@di. ufpe. br CIn - UFPE Recife, dezembro de 1999
Roteiro * * * * Bancos de dados orientados a objetos DOOD: bancos de dados dedutivos orientado a objetos F-Logic, FLORID e FLORA Exemplo introdutório: O banco de dados acadêmico em F-Logic Objetos, nomes de objetos, métodos, átomos-F, moléculas. F e BD extensional Classes, assinaturas, herança e esquemas de BD Predicados e átomos-P * * * * Regras, consultas e BD intencional Negação e restrições de segurança na conclusão das regras Interação herança-dedução Verificação de tipos e Metaprogramação FLORA x SQL FLORA x Data. Log FLORA x LIFE
Problemas enfrentados pela área de banco de dados * Aplicações não-tradicionais (“non-business type”) • • * * CAD, GIS, AI Necessidade de manusear grandes quantidades de dados Dados complexos Evolução do esquema Mudanças significativas na relação de custo memória/disco Impedance mismatch entre linguagens de programação e linguagens de consultas em banco de dados
Bancos de Dados Orientados a Objetos * * * Combina o paradigma OO com a tecnologia de BD Modelo de dados OO Requisitos obrigatórios para ser considerado OO (manifesto): • • • Objetos complexos Identidade de objetos Encapsulamento Tipos ou Classes Herança Overriding, Overloading e Late Binding • Completude computacional • Extensibilidade Características gerais de BDs 3 Persistência 3 Gerenciamento de memória secundária 3 Concorrência 3 Recuperação 3 Consultas Ad-hoc
BD Dedutivo Orientado a Objetos BDOO: éidentidade de objetos éobjetos complexos éclasses éencapsulamento éherança éoverriding, overloading e late binding éextensibilidade êlinguagem de consulta declarativa êembasamento teórico Bancos de Dados Dedutivos éfundamentação lógica élinguagem declarativa poderosa com mecanismo de dedução êtipos abstratos de dados êidentidade de objetos êmodelo de dados flat BDDOO
Estratégias para construção de um DOOD éUtilização da linguagem declarativa existente êIntegração da linguagem declarativa existente às novas extensões orientadas a objetos éTempo de adaptação à linguagem êFlexibilidade da integração: bidirecional, unidirecional. êImpedance Mismatch éSemântica éUma Formal única linguagem êReconstrução total do sistema
Frame-logic (F-logic) * * Tentativas de estender BD dedutivo com funcionalidades OO ou vice-versa tendem a sacrificar características lógicas ou orientadas a objetos importantes F-Logic (1995) • Lógica completa para representar os conceitos do paradigma orientado a objetos t Objetos complexos; t Identidade de objetos (oid); t Herança; t Polimorfismo; t Encapsulamento; t etc. • Apropriada para definir, consultar e manipular esquemas de bancos de dados
FLORID e FLORA FLORID (U. Freiburg, 1997) * implementação de F-logic em C++ com algumas extensões * avaliação bottom-up * interface web * expressões regulares * expressões de caminho * nenhuma integração com C++ * apenas linguagem de consulta em memória central * nenhum outros serviços em BD * sem encapsulamento FLORA (SUNY, 1999) * implementação de F-logic sob XSB * avaliação top-down * expressões de caminho * integração (quase) completa e bi-direcional com XSB * mais eficiente que Florid compilação via “tabling” * apenas linguagem de consulta em memória central * nenhum outros serviços em BD * sem encapsulamento
BD Acadêmico em F-Logic: hierarquia “é um” person degree ms child(person) phd empl john child(john) dept phil sally cs 2 cs 1 student faculty alice mary manager bob . . . report young article cacm codd 70 jacm 20 flogic 94 midaged yuppie datatype 40 string 30 "CS" "Mary" empl : : person student : : person faculty : : empl child(person) : : person john : student john : empl cs 1 : dept integer "Bob" yuppie : : young 20 : young 30 : yuppie 40 : midaged "CS" : string "Bob" : string alice : child(john) . . .
BD Acadêmico em F-logic: fatos * Bob is 40 and is the manager of the CS department. His assistants are John and Sally . bob[name -> "Bob"; age -> 40; affiliation -> cs 1[dname -> "CS"; mngr -> bob; assistants ->> {john, sally}]] * Mary's highest degree is an MS. She works at the CS department and is friend to Bob and Sally. mary[name -> "Mary"; highest. Degree -> ms; friends ->> {bob, sally}; affiliation -> cs 2[dname -> "CS"]] . . .
BD Acadêmico em F-logic: informações gerais das classes * Every faculty is a midaged person who writes article, makes in the average $50, 000 a year and owns a degree of some kind, typically a Ph. D. A faculty's boss is both a faculty and a manager. faculty[boss => (faculty, manager); age => midaged; highest. Degree => degree; papers =>> article; highest. Degree *-> phd; avg. Salary -> 50000] * Every employee is affiliated to some department, has a boss who is also an employee and joint work on reports with other employees. empl[affiliation => dept; boss => empl; joint. Works@empl =>> report] * Every person has a name, friends who must be persons and children who also must be persons. person[name => string; friends =>> person; children =>> child(person)] . . .
BD Acadêmico em F-logic: regras dedutivas * A boss is an employee who is the manager of another employee of the same department. E[boss -> M] <- E: empl D: dept E[affiliation -> D[mngr -> M: empl]] * A joint work is a paper that is written by two faculties. X[joint. Works@Y ->> Z] <- Y: faculty X: faculty Y[papers ->> Z] X[papers ->> Z]
BD Acadêmico em F-logic: consultas * Who are the midaged employees of the CS department and who are their boss? ? - X: empl X[boss -> Y; age -> Z: midaged; affiliation -> D[dname->"CS"]] * Who published jointly with Mary in the Journal of the ACM? ? - mary[joint. Works@Y ->> jacm 90] * Where did Mary published joint work with Phil? ? - mary[joint. Works@phil ->> Z]
Sintaxe de F-logic Alfabeto de F-logic : * Conjunto de Símbolos de funções (F) * Conjunto Símbolos de predicados (P) * Variáveis (V) * Distincao entre P, F e V seguindo mesmas convencoes de que Prolog Termos ID * Termos de 1ª ordem sobre F e V * Nomes de objetos, métodos e classes Oid (Object Identifier): * Termos ID sem variáveis Fórmulas atômicas * átomos de 1ª ordem • ex, p(X 1, . . . , Xn) * O: C • O instância de C * C : : D • C subclasse de D * Hierarquia de classe e objetos não precisa ser um reticulado
Sintaxe de F-logic: metodos e assinaturas Fórmulas atômicas (cont. ) * * * O[M->R 0] • Método escalar M(O) = R 0 O[M->>{R 1, . . . , Rn}] • Método multivalorado M O[M@(Arg 1, . . . , Arg. N) -> R 0] • Método parametrizado C[M=>T] • Assinatura. • M aplicado a objetos da classe C deve retornar objeto de classe T C[M=>>T] • Assinatura do método M, multivalorado.
F-átomos e F-moléculas * F-átomos • Representam exatamente uma propriedade de um objeto, tal como uma relação de classe ou definição de método t t * isaac: man. isaac[father->abraham]. isaac[son->>{jacob}]. isaac[son->>{esau}]. F-moléculas • F-átomos podem ser aninhado em F-moléculas t t t C: : D ou O: C, onde C, D e O são termos-id. Uma molécula da forma O[lista de métodos separadas por ; ]. Ex. : isaac: man[father->abraham; son->>{jacob, esau}]
Predicados, Átomos-P e Moléculas-P * Átomo-P: predicado com termos-id como argumentos. • father(isaac, abraham). • woman(rebekah). • married(isaac, rebekah). * Molécula-P: predicado com átomos-F ou moléculas-F aninhado nos seus argumentos. t * married(isaac[father->abraham], rebekah: woman). Aninhamento inverso proibido: predicados não podem ser aninhados em átomos-F ou moléculas-F. Átomos e Moléculas (F e P) representam os fatos Banco de dados extensional
Expressões de Caminho * Facilidade sintática da linguagem, permitindo acesso elegante a objetos através de métodos de outros objetos. • O. M O[M->Ro] • O. . M O[M->>{Ri}] * Presente em outras linguagems • Ex. : cars = john. cars(); • Normalmente só é possível uma dimensão t * E se quiséssemos or carros vermelhos fabricados em 1998 que John possui? Expressoes de FLORID e FLORA permiten: • caminhar ao longo de 2 dimensões: • referenciar propriedades dos objetos no caminho, sem sair dele.
Expressões de Caminho * Exemplo %% Declaração da hierarquia person : : object. company : : object. john: employee. bob: person. employee : : person. manager : : employee. vehicle : : object[color*->black; produced*=>europe]. germany : europe. italy : europe. ferrari : : vehicle[color*->red; produced*->italy]. bmw : : vehicle[produced*->germany]. mercedes : : vehicle[produced*->germany]. audi : : vehicle[produced*->germany]. porsche : : vehicle[produced*->germany]. f 50 : ferrari. boxster. S : porsche. a 6 : audi. z 8 : bmw. c 280 : mercedes.
Expressões de Caminho * Exemplo (cont. ) Numa linguagem do tipo SQL: SELECT X, Y %% Fatos FROM X in{c 280, employee karl: employee[vehicles->> a 6, f 50, boxter. S}; FROM Y in X. vehicles works. For->siemens]. FROM Z in europe jamesbond: person[vehicles->>z 8]. WHERE X. works. For. president = X siemens: company[country -> germany; AND Y. color = black president -> karl]. AND Y. produced = Z X[self->X]. %% Consulta X: employee[works. For -> _[president -> X]]. . vehicles[color->black; produced->_: europe; self->Z].
Negação em FLORA * * * Negação através de “well-founded semantics”, implementada no XSB Especificada através do operador tnot Atualmente, tnot só pode ser aplicado a predicados Prolog (não pode ser usado com moléculas-F) : - table aux/1. aux(X, Y) : - a[m->>X; a->Y]. d[f->Z] : - e[w->Z; v->f(X, Y)], tnot(aux(X, Y)). * Restrição devido ao sistema XSB • Todas as variáveis em predicados negados têm que ser instanciadas antes da chamada a tnot.
Herança * Tipos • Herança Estrutural t Propagação das restrições de tipos de métodos (assinaturas) de uma superclasse para suas subclasses. student: : person[name=>string]. ? - student[name => X] X = string. • Herança Comportamental t t t Propagação do resultado da aplicação de um método de uma classe para suas instâncias e subclasses Métodos herdáveis são indicados por *-> e *->> Permite overriding Não monotônica
Herança Comportamental * Exemplo de comportamento não-monotônico elephant[color *-> gray; group *-> mammal]. royal. Elephant : : elephant. clyde : royal. Elephant. ? - clyde[color->X]. X/gray royal. Elephant[color *-> white]. ? - clyde[color->X]. X/white
Herança Comportamental * * Caso mais complexos envolvem herança múltipla ou herança junto com dedução Exemplo: b[m *->> c]. a : b. a [m ->> d] : - a[m ->> c]. • Podemos deduzir que a[m->{c, d}] • Não podemos deduzir nada • F-logic recomenda a 1ª interpretação; FLORA utiliza a 2ª t a 1ª é muito difícil de implementar utilizando-se um mecanismo de dedução top-down.
Metaprogramação * Sintaxe de F-logic permite metaprogramação naturalmente %% ? - * Todas as classes que John é membro john : X. Todas as superclasses de student : : X Metavariável: pode ser instanciada com métodos de qualquer aridade • Sintaxe: @M (M segue a sintaxe de nome de variável) • =. . é usado para transformar Metavariáveis em uma lista contendo o nome do métodos e seus argumentos (bidirecional) • @M representa um método (não um objeto) não pode ser passada diretamente como argumento para predicados e métodos
Metaprogramação: exemplos * Exemplo 1: Copia os métodos de aridade 2 de o 1 para o 2 : - import length/2 from basics. o 1[m 1@(a 1) -> r 1]. o 1[m 2@(b 1, b 2) -> r 2]. o 1[m 3 -> r 3]. o 1[m 4@(c 1, c 2, c 3) -> r 4]. o 2[@M -> R] : - o 1[@M -> R], @M =. . [Mth|Args], length(Args, 2). * Execução ? - o 2[@M -> R]. @M = m 2@(b 1, b 2) R = r 2 Yes. * Exemplo 2: Usando =. . para passar Metavariáveis como argumentos ? - mary[@Met -> V], @Meth =. . Param, foo(Param). foo(P) : - @M =. . P, abc[@M ->> 123].
Verificação de tipos * * FLORA não automaticamente verifica conformidade das instâncias e sub-classes com as assinaturas de classes. Metaprogramação permite implementar essa verificação em poucas regras scalar. Type. Incorrect(O, M, R) : - O[X -> R], O: C, C[X=>D], tnot(R: D). ? - scalar. Type. Incorrect(obj, method, Result). * Útil para checar dados semi-estruturados.
Comparações: exemplo dos estudantes/cursos * * Tabelas Consultas • Nome dos estudantes junior que fizeram os cursos cs 101 e cs 143 • Nome e nota dos estudantes junior que fizeram o curso cs 131 nota maior que 3. 0
FLORA * Definição joedoe: student[name->”Joe Doe”; major->cs; year->senior; took->>{[cs 123, 2. 7]}]. jimjones: student[name->”Jim Jones”; major->cs; year->junior; took->>{[cs 101, 3. 0], [cs 143, 3. 3]}]. jimblack: student[name->”Jim Black”; major->ee; year->junior; took->>{[cs 143, 3. 3], [cs 101, 2. 7])]. Consultas _: student[name->X; took->>{[cs 143, _], [cs 101, _]}]. _: student[name->X; year->junior; took->>[cs 131, Y]], Y > 3. 0. *
DATALOG * Definição student(‘Joe Doe’, cs, senior). student(‘Jim Jones’, cs, junior). student(‘Jim Black’, ee, junior). took(‘Joe Doe’, cs 123, 2. 7). took(‘Jim Jones’, cs 101, 3. 0). took(‘Jim Jones’, cs 143, 3. 3). took(‘Jim Black’, cs 101, 2. 7). * Consultas student(Name, _, junior), took(Name, cs 101, _), took(Name, cs 143, _). took(Name, cs 131, Grade), Grade > 3. 0, student(Name, _, junior).
SQL * Definição • Criação das tabelas CREATE TABLE student (Name char(20), Major char(2), Year int); CREAT TABLE took (Name char(20), Course char(5), Grade decimal(2, 1)); • Adição dos valores INSERT INTO student VALUES <tuplas>; INSERT INTO took VALUES <tuplas>; * Consultas SELECT t. Name FROM took t, took u, student s WHERE t. Course = ‘cs 101’ AND u. Course = ‘cs 143’ AND t. Name = u. Name AND s. Year = ‘junior’ AND s. Name = t. Name SELECT t. Name, t. Grade FROM took t, student s WHERE t. Course = ‘cs 131’ AND s. Year = ‘junior’ AND s. Name = t. Name AND s. Grade > 3. 0
FLORA x LIFE * Vantagens de FLORA sobre LIFE • distinção classe/objeto • herança (método herdável/não-herdável • atributo de classe • regra mólecula-F : - mólecula -F; em life não há regra do tipo -term : - -term, só pred( -term) : - pred( term) • Metaprogramação • Integração quase completa com o XSB e seus módulos * Vantagens de LIFE sobre FLORA • interface x-windows built-in • paradigma funcional (conhecimento inerentemente procedimental) • sem limitação sobre regras recursivas e ocorrência de variáveis livres (fatos universais) • programação por restrições • poderosa DCG integrada
- Slides: 32