objectivos

15
Modelo de objectos - 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

Upload: egan

Post on 14-Jan-2016

29 views

Category:

Documents


3 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Objectivos

Modelo de objectos - 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

Page 2: Objectivos

Modelo de objectos - 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.

Page 3: Objectivos

Modelo de objectos - 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

Page 4: Objectivos

Modelo de objectos - 4

Exemplo de modelo objecto

Definição de um Tipo

interface Documento : Atomic_ObjectExtent(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);

};

Documentos

título: stringrevisão: date

Capítulos

título: stringno: integer

Textos

referencia:char[4]

Programas

linguagem: string

Diagrama de Classes OMTDiagrama de Classes OMT

Pessoasbi: stringnome: stringnacionalidade: stringidade: integercpostal: char[4]

autoresobras

Page 5: Objectivos

Modelo de objectos - 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;

...

};

Page 6: Objectivos

Modelo de objectos - 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.

Page 7: Objectivos

Modelo de objectos - 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 ...

Page 8: Objectivos

Modelo de objectos - 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 Pessoaswhere 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”

Page 9: Objectivos

Modelo de objectos - 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 Pessoaswhere 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.titulofrom x in Documentoswhere (for all y in x.autores: y.nacionalidade=“Portugal”)

Page 10: Objectivos

Modelo de objectos - 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)>

Page 11: Objectivos

Modelo de objectos - 11

OQL versus SQL

SQLselect livros.titulofrom livroswhere not exist (select autorfrom autores, pessoaswhere autores.pessoa=pessoas.id

and autores.livro=livros.idand not(pessoas.nacionalidade=“Portugal”))

OQLselect x.titulofrom x in Documentoswhere (for all y in x.autores: y.nacionalidade=“Portugal”)

Page 12: Objectivos

Modelo de objectos - 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);

Page 13: Objectivos

Modelo de objectos - 13

Arquitectura ODMG

....

...

...

Aplicação

Linker

Base de Dados de Objectos

Criação

....

...

...Código Objecto

do SGBDO

....

...

...

Objective-Ccom ODL/OML

Código Objectoda aplicação

Ficheiros .hObjective-C

....

...

...Ficheiros .mObjective-C

Compilador Objective-C

Pré-Processadorde ODL/OML

....

...

...

Meta Informação

objectos

Page 14: Objectivos

Modelo de objectos - 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

Page 15: Objectivos

Modelo de objectos - 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