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 Modelo de objectos - 1 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. Modelo de objectos - 2 Hierarquia de Tipos Pré-definidos Denotable_Object Object Atomic_Object Type Exception Iterator Literal Structured_Object Collection<T> Set<T> Bag<T> List<T> String Bit_String Array<T> Structure<e1:T1...en:Tn> Atomic_Literal Characteristic 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 Property Integer Float Character Boolean Attribute Relationship Operation Modelo de objectos - 3 Exemplo de modelo objecto Definição de um Tipo Diagrama de Classes OMT Capítulos Documentos título: string no: integer título: string revisão: date Textos obras autores Pessoas bi: string nome: string nacionalidade: string idade: integer cpostal: char[4] Programas interface Documento : Atomic_Object referencia:char[4] linguagem: string 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); }; Modelo de objectos - 4 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; ... }; Modelo de objectos - 5 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. Modelo de objectos - 6 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 ... Modelo de objectos - 7 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” Modelo de objectos - 8 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”) Modelo de objectos - 9 Ú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)> Modelo de objectos - 10 OQL versus 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”) Modelo de objectos - 11 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); Modelo de objectos - 12 Arquitectura ODMG 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 Base de Dados de Objectos Aplicação objectos Modelo de objectos - 13 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 Modelo de objectos - 14 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 Modelo de objectos - 15