150 likes | 309 Views
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
E N D
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
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.
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
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); • };
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; • ... • };
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.
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 ...
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”
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”)
Ú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)>
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”)
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);
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
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
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