1 / 15

Objectivos

Objectivos. Objectivos promover normalização dos SGBDO’s para uma maior aceitação e divulgação garantir portabilidade de aplicações entre SGBDO’s definir interface portável ao nível de esquema de dados e linguagens de definição, manipulação e interrogação

egan
Download Presentation

Objectivos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Objectivos • Objectivos • promover normalização dos SGBDO’s para uma maior aceitação e divulgação • garantir portabilidade de aplicações entre SGBDO’s • definir interface portável ao nível de esquema de dados e linguagens de definição, manipulação e interrogação • conseguir forte integração das BD’s com as LP’s (p.e. com C++) • possibilitar interoperabilidade entre SGBDO’s

  2. Objectivos • Produtos Normalizados versus Produtos Iguais • a interface comum ao nível de esquema de dados e linguagens envolvidas permite a inovação em muitas outras áreas permitindo que os produtos se distingam a vários níveis: • performance • linguagens de programação suportadas • ambientes de desenvolvimento • ferramentas para construção de aplicações • redes • plataformas • bibliotecas de tipos • ferramentas para construção de interfaces gráficas • ferramentas para apoio ao projecto • etc.

  3. Hierarquia de Tipos Pré-definidos • Denotable_Object • Object • Atomic_Object • Type • Exception • Iterator • Structured_Object • Collection<T> • Set<T> • Bag<T> • List<T> String Bit_String • Array<T> • Structure<e1:T1...en:Tn> • Literal • Atomic_Literal • Integer • Float • Character • Boolean • Structured_Literal • Immutable_Collection<T> • Immutable_Set<T> • Immutable_Bag<T> • Immutable_List<T> Immutable_String Immutable_Bit_String • Immutable_Array<T> • Enumeration • Immutable_Structure<e1:T1...en:Tn> • Date • Time • DateTime • Interval • Characteristic • Property • Attribute • Relationship • Operation

  4. Diagrama de Classes OMT Capítulos título: string no: integer Documentos título: string revisão: date Pessoas bi: string nome: string nacionalidade: string idade: integer cpostal: char[4] obras autores Textos referencia:char[4] Programas linguagem: string Exemplo de modelo objecto • Definição de um Tipo • interface Documento : Atomic_Object • Extent(documentos); • key (título); • { • attribute string título; // deve ser único • attribute Date revisão; • relationship Set<Pessoas> autores inverse Pessoa::obras; • relationship Set<Capítulos> capítulos inverse Capítulo::parte_de; • gravar() raises (erro_de_gravação); • adicionar_capítulo(in capítulo: Capítulo); • };

  5. Exemplo de ODL • um exemplo de Objectstore/C++ com ODL • static os_List<Documento*> documentos; • class Documento { • public: • os_List<Pessoa*> autores inverse_member autorias; • os_List<Capitulo*> capitulos inverse_member pertence_a; • }; • class Pessoa { • public: • os_List<Documento*> autorias inverse_member autores; • ... • };

  6. OQL: Object Query Language • Princípios orientadores: • não ser computacionalmente completa, mas permitir fácil acesso a uma base de dados de objectos • ser declarativa • ter como base o modelo objecto ODMG • ter uma sintaxe abstracta • possuir semântica formal facilmente definível • ter construções idênticas às de SQL sem privilegiar a cláusula select-from-where • dispôr de primitivas para manipulação de conjuntos e também listas, vectores, bags, etc.

  7. Expressões • Expressões permitidas: • literais, aritméticas, comparações, lógicas • construtoras • acesso: ‘.’, ‘->‘, first(), last(), [] • conversão: listtoset(), element(), flatten(), explicita • conjuntos: intersect, union, except • colecções: • for all ... in ... : ... • exists ... in ... : ... • <elemento> in <colecção> • select-from-where • sort ... by ... • count(), sum(), min(), max(), avg() • group ... in ... by ... with ...

  8. Exemplos de OQL 1. Obter o conjunto dos nomes de todas as pessoas com nacionalidade portuguesa. select distinct x.nome from x in Pessoas where x.nacionalidade=“Portugal” 2. Obter o conjunto de nomes, moradas e códigos postais de todas as pessoas com nacionalidade portuguesa. select distinct struct(n: x.nome, m: x.morada, c: x.cpostal) from x in Pessoas where x.nacionalidade = “Portugal” 3. Obter a lista de nomes dos revisores portugueses dos textos revistos depois de 1 Jan de 1994. select x.nome from x in (select y.revisor from y in Textos where revisao > 1-1-94) where x.nacionalidade = “Portugal”

  9. Mais exemplos de OQL 4. Obter os nomes das 3 pessoas mais novas de nacionalidade portuguesa. select w.nome from w in (sort x in (select y from y in Pessoas where y.nacionalidade = “Portugal”) by x.idade)[0:2] 5. Obter os títulos dos documentos cujos autores são na sua totalidade de nacionalidade portuguesa. select x.titulo from x in Documentos where (for all y in x.autores: y.nacionalidade=“Portugal”)

  10. Último exemplo de OQL 6. Para cada uma das seguintes 3 gamas etárias (12-30,30-55,55-...) calcular o número de pessoas que se encontram nessa gama bem como a idade maior e menor encontrada nessa gama. group x in Pessoa by (jovens: x.idade >= 12 and x.idade < 30, experientes: x.idade >=30 and x.idade < 55, maduros: x.idade >= 55) with (numero: count(partition), menor_idade: min(select x.idade from x in partition) maior_idade: max(select x.idade from x in partition)) R: set<struct(jovens: boolean, experientes: boolean, maduros: boolean, numero: integer, menor_idade: integer, maior_idade: integer)>

  11. OQLversus SQL SQL select livros.titulo from livros where not exist ( select autor from autores, pessoas where autores.pessoa=pessoas.id and autores.livro=livros.id and not(pessoas.nacionalidade=“Portugal”)) OQL select x.titulo from x in Documentos where (for all y in x.autores: y.nacionalidade=“Portugal”)

  12. Exemplo de Objective-C com OQL Set autores; int idade; ... idade=65; autores = (select distinct y from x in Textos, y in x.autores where y.idade=idade); if(![autores empty]) reformar(autores);

  13. Objective-C com ODL/OML .... ... ... Pré-Processador de ODL/OML .... ... ... .... ... ... Ficheiros .h Objective-C Ficheiros .m Objective-C Compilador Objective-C Meta Informação .... ... ... .... ... ... Código Objecto da aplicação Código Objecto do SGBDO Linker Criação Aplicação Base de Dados de Objectos objectos Arquitectura ODMG

  14. Conclusões • simples de seguir • tem como base um modelo menos simples que o relacional mas muito mais poderoso • a linguagem de interrogação é fechada, completa, as construções possuem uma semântica bem definida, e tem um poder expressivo superior ao SQL. • diminui a impedância semântica entre LP’s e LI’s

  15. Manipulação • OML: Object Manipulation Language • não é definida pela proposta de norma, pelo que deverá ser definida por quem implementa a norma por forma a permitir criar, destruir, modificar e referenciar objectos. • Mapeamento da ODMG-93 para LP’s • A proposta define o mapeamento para C++ e Smalltalk • Um mapeamento deverá ser feito aos vários níveis: • modelo objecto ODMG • ODL, OML e OQL • hierarquia de tipos base • operações sobre bases de dados e transacções

More Related