350 likes | 492 Views
Banco de Dados Dedutivos, Programação em Lógica, Banco de Dados Dedutivos Orientado a Objetos e FLORID. Departamento de Informática UFPE Jeferson Valadares (jlfv@di.ufpe.br) Recife, fevereiro de 1999. Roteiro. Linguagens de consulta de banco de dados x linguagens de programação
E N D
Banco de Dados Dedutivos, Programação em Lógica, Banco de Dados Dedutivos Orientado a Objetos e FLORID Departamento de Informática UFPE Jeferson Valadares (jlfv@di.ufpe.br) Recife, fevereiro de 1999
Roteiro • Linguagens de consulta de banco de dados x linguagens de programação • Banco de dados dedutivo e programação em lógica • Banco de dados orientado a objetos • Banco de dados dedutivo orientado a objetos • F-Logic e FLORID • Exemplo introdutório: O banco de dados acadêmico em FLORID • Objetos, nomes de objetos, métodos, átomos-F, moléculas-F • Classes, assinaturas e herança • Predicados, átomos-P e BD extensional • Regras, consultas e BD intencional
Linguagens de consulta de banco de dadosxLinguagens de programação • Linguagens de consultas de banco de dados: • persistência • acesso otimizado à memória secundária • concorrência • recuperação • segurança • maneira declarativa de recuperar e atualizar a informação • ausência de representação procedimental • atomicidade das transações • estruturas fixas de dados
Linguagens de consulta de banco de dadosxLinguagens de programação • Linguagens de programação: • uso geral • comportamento dinâmico • permitem daemons, gatilhos para manutenção de integridade • geralmente não implementam as características desejáveis de um BD
Banco de dados dedutivos e programação em lógica • Programação em lógica: • conceito de lógica como linguagem de programação • extensão do BD relacional • prolog • Banco de dados dedutivos (BDD): • programas lógicos sem funções (como em prolog), mas onde todos os fatos devem ser instanciados • ancestor (adão, X) • modelo de interpretação do BD é finito • BD relacional é um caso especial de BDD • datalog
Orientação a objetos • Características importantes: • abstração (estrutural e comportamental) de dados • objetos semanticamente similares são classificados em classes, que são organizadas em hierarquias de classes (é-um) • encapsulamento • objetos complexos • herança não-monotônica • noção de tipo • Uso de linguagens orientadas a objeto com BD • sonho antigo de usar a mesma linguagem para escrever as aplicações e para recuperar informação do BD
Banco de dados orientado a objetos (BDOO) • Manifesto BDOO [1] • Características obrigatórias: • objetos complexos • identidade de objetos • encapsulamento • tipos e classes (organizados em hierarquias) • overriding, overloading e late binding • completude computacional • extensibilidade • persistência • gerenciamento de armazenamento secundário • concorrência • recuperação • facilidade de consulta sob demanda
Banco de dados orientado a objetos • Características opcionais: • herança múltipla • verificação e inferência de tipos • distribuição • transações longas • versões • Escolhas em aberto: • paradigma de programação • sistema de representação • sistema de tipos • uniformidade
Banco de dados orientado a objetos • Características essenciais para um linguagem de manipulação de BD não são implementadas pelas linguagens orientadas a objetos tradicionais • Necessidade de uma linguagem que capture tanto orientação a objetos quanto as operações necessárias para manter a integridade de um BD
Banco de dados dedutivo orientado a objetos (BDDOO) • BDD: • alta capacidade de inferência • fundamentos formais • pobre poder de modelagem • BDOO: • rica capacidade de modelagem • alta extensibilidade • falta de consenso sobre o modelo de dados • baixa capacidade de inferência • fundamentos não tão bem formalizados quando os de BDD • BDDOO: • deve combinar as vantagens dos dois métodos acima
F-logic e FLORID • F-logic (Frame logic) [2]: • desenvolvida para capturar os bons aspectos de OO em um framework lógico • provê uma teoria bem fundamentada para BDDOO e programação em lógica • lógica pode ser usada como formalismo computacional e como linguagem de descrição - F-logic é adequada para definir, acessar e manipular esquemas de BD • FLORID [3]: • implementação em C++ de F-logic com algumas extensões • interface web • expressões regulares • expressões de caminho
A hierarquia é-um: empl::person student::person child(person)::person faculty::empl manager::empl yuppie::young yuppie::midaged article::report cacm::article jacm::article john:student john:empl sally:student sally:empl alice:child(john) mary:faculty bob:faculty bob:manager phil:empl 20:young 30:yuppie 40:midaged O banco de dados acadêmico em FLORID • codd70:cacm • flogic94:jacm • cs1:dept • cs2:dept • integer:datatype • string:datatype • “CS”:string • “Mary”:string • “Bob”:string • ms:degree • phd:degree
O banco de dados acadêmico em FLORID • Fatos da base (BD extensional) • 1. Bob is 40 and is the manager of the CS department. • 2. His assistants are John and Sally. • bob [name-> “Bob”; age->40; affiliation->cs1[dname-> “CS”; mngr ->bob; assistants->> {john, sally}]] • 3. Mary’s highest degree is an MS. • 4. She works at the CS department and is friend to Bob and Sally. • mary [name-> “Mary”; highestDegree->ms; friends->>{bob, sally} affiliation->cs2[dname->”CS”]]
O banco de dados acadêmico em FLORID • Informações gerais das classes: • 5. Every faculty is a midaged person who writes articles, makes in the average $50,000 a year and owns a degree of some kind, typically a PhD. • 6. A faculty’s boss is both a faculty and a manager. • faculty [boss=>(faculty, manager); age=>midaged; highestDegree=>degree; papers->>article; highestDegree*->phd; avgSalary->50000]
O banco de dados acadêmico em FLORID • Informações gerais das classes (cont.): • 7. 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); • 8. 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; jointWorks@empl=>>report]
O banco de dados acadêmico em FLORID • Informações gerais das classes (cont.): • 9. Every department has a manager who is an employee and assistants who are both employees and students. • dept [assistants=>>(student, empl); mngr=>empl] • Regras dedutivas: • 10. 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]] • 11. A joint work is a paper that is written by two faculties. • X [jointWorks@Y->>Z] :- Y:faculty ^ X:faculty ^ Y [papers->>Z] ^ X [papers->>Z]
O banco de dados acadêmico em FLORID • Consultas: • 0a: 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”]]. • 0b: Who published jointly with Mary in the Journal of the ACM? • ?- mary[jointWorks@Y->>jacm90]. • 0c: Where did Mary published joint work with Phil? • ?- mary[jointWorks@phil->>Z].
Objetos • Construtores básicos de FLORID • Modelam entidades do mundo real • Representados internamente por identificadores • Acessados por nomes • cada nome identifica apenas um objeto • um objeto pode ter mais de um nome
Nomes de objetos • Nomes de objetos e nomes de variáveis: id-terms • Nomes de objeto sempre começam com letras minúsculas • bob, alice, child • Nomes de variáveis sempre começam com letras maiúsculas ou underscore • Z, Method, _11 • Dois nomes de objetos built-in: • inteiros • +3, 3, -3 • strings (sempre entre aspas) • “Bob”, “Mary”
Métodos • Representam relações entre objetos • Aplicação de um método a um objeto: átomo-F de dados • id-term hospedeiro, método e resultado • objetos podem aparecer em qualquer posição • variáveis podem ser usadas na posição método • Métodos funcionais ou escalares (resultam em apenas um objeto • bob[boss->john]. • Métodos multivalorados (podem resultar em mais de um objeto) • mary[friends->>{bob,sally}].
Métodos • A posição resultado de um método multivalorado pode ser o conjunto vazio • bob[friends->>{ }]. • pode também ser vista como uma declaração do método friends • Métodos com parâmetros • mary [ jointWorks@(phil)->>{jacm90,cacm92}; jointWorks@(jacques)->>{aaai92, cacm92}]. • mary [ jointWorks@(phil,1)->>jacm90; jointWorks@(phil,2)->>cacm92].
Métodos • Consultas com métodos multivaloradas • ?- mary [friends->>X] X/bob X/sally • importante notar que variáveis não se instanciam com conjuntos de dados (já que as consultas verificam pertinência e não igualdade): • X/ {bob,sally} • ?- mary[friends->>{bob,sally}]. true • ?- mary[friends->>{bob}]. true • ?- mary[friends->>{ }]. true
Átomos-F • Expressa exatamente uma propriedade de um objeto (a que classe ele pertence, a especificação de um método) • bob:empl. • bob[boss->>{john}]. • bob[boss->>{sally}].
Moléculas-F • Métodos representam relações entre objetos, que são organizados em classes • Esta informação sobre os objetos é encapsulada através de moléculas-F • bob:empl[boss->>{john,sally}]. • Moléculas-F sem propriedades: • sally[ ]. • “Açúcar sintático” da linguagem
Classes • Átomos-F do tipo é-um: classe à qual o objeto pertence • john:student • sally:empl • Átomos-F de subclasse: relação de subclasse entre duas classes • empl::person • faculty::empl • F-logic também suporta overloading de métodos • empl [jointWorks@empl=>>report]. • empl [jointWorks@(empl, integer)=>>report].
Assinaturas • Átomos-F de assinatura definem os métodos aplicáveis para instâncias de certas classes • Restringem o tipo dos parâmetros e dos resultados destes métodos • faculty[boss=>(faculty)]. • faculty[boss=>(manager)]. • person[friends=>>person]. • empl[jointWorks@empl=>>report]. • dept[assistants=>(student, empl)]. • Pode-se também declarar métodos sem restrições de tipo • person[believes_in=>( )].
Herança • F-logic permite herança múltipla • Dois tipos de herança: • Herança estrutural • propagação de uma restrição de tipo de um método de uma superclasse para suas subclasses (Átomos-F de subclasse) • Herança comportamental • propagação dos resultados da aplicação de um método de uma classe para suas instâncias e subclasses • Métodos herdáveis expressam herança comportamental: • person[believes_in*->god] • bob [believes_in->god] • john [believes_in->god] • empl [believes_in*->god]
Herança e regras • Resolução da herança • john:king. • peter:king. • king[lives*->palace]. • peter[lives->abroad] :- john[lives->palace]. • john[lives->abroad] :- peter[lives->palace]. • ?- sys.eval[]. • Begin semi-naive evaluation • End evaluation • ?- X[lives->Y]. • Answer to query : ?- X[lives -> Y]. • X/john Y/palace • X/peter Y/abroad • 2 output(s) printed
Overriding • Regras lógicas tem prioridade sobre a herança: • abraham:person[believes_in->god; descendant->>{isaac:person}]. • ahab:person. • person[believes_in*->baal]. • X[believes_in->god] :- abraham[descendant->>X:person]. • god[loves->>X] :- X[believes_in->god]. • ?- sys.eval[]. • Begin semi-naive evaluation • End evaluation • ?- god[loves->>X]. • Answer to query : ?- god[loves ->> {X}]. • X/abraham • X/isaac • 2 output(s) printed
Predicados e Átomos-P • Em F-logic, predicados são usados da mesma maneira do que em datalog • Um predicado seguido de um ou mais id-terms separados por vírgulas e incluído nos parênteses é chamado de Átomo-P • friends(bob,mary). • empl(john). • person(bob). • true. • Os predicados (fatos) formam o BD extensional
Átomos-P • Informação expressa em átomos-P pode ser representada por átomos-F, obtendo-se uma modelagem mais natural • mary[friends_with->>bob]. • bob:empl. • mary[jointWorks@(bob)->>jacm94]. • Similarmente às moléculas-F, moléculas-P podem ser construídas aninhando-se átomos-F ou moléculas-F em átomos-P • friends(mary[affiliation->cs1], bob:empl). • Átomos-F e moléculas-F podem ser aninhados em átomos-P, mas o inverso não é verdadeiro • empl(bob)[friends(bob,sally)].
Regras • Baseadas em uma dada base de objetos (que pode ser considerada um conjunto de fatos), as regras oferecem a possibilidade de se derivar nova informação • Guardam informação genérica da forma: • sempre que a pre-condição for verificada, a conclusão também será • X[manager->>Y] :- X[boss->>Y]. • Formam o BD Intencional
Consultas • Podem ser consideradas um tipo de regra especial com a primeira parte vazia • ?- mary[friends->>Y:empl]. • A resposta de uma consulta consiste de todas as variáveis tal que a instância da regra com aquela variável seja verdadeira na base de objetos • Y/bob Y/sally
Variáveis “don’t care” • Variáveis para resultados intermediários que não aparecem no resultado • ?- X:empl[boss->_Y], _Y[friends->>sally]. • A variável “_”: • cada ocorrência desta variável é considerada uma variável “don’t care” distinta
Referências • 1. The object-oriented database system manifesto - Atkinson, Bancilhon, DeWitt, Dittrich, Maier and Zdonik • 2. Logical foundations of object-oriented and frame-based languages - Kifer, Lausen and Wu • 3. How to write F-logic programs in FLORI D - Frohn, Himmeröder, Kandzia and Schlepphorst