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
Download

Modelo de objectos