Modelo de objectos 3

Propaganda
Modelo Objecto

Modelo Objecto ODMG
 objecto: primitiva base
 tipo: definição das propriedades e comportamento comuns a um conjunto de objectos
 propriedades: estado (atributos ou associações)
 operações: comportamento
 herança: hierarquias de generalização
ODMG
1
Métodos

BDOO: integração linguagem de dados e linguagem hospedeira

ODL suporta definição de assinaturas de métodos
 implementação na linguagem hospedeira (Smalltalk, C++, Java); na interface fica só a assinatura,
i.e., nomes e tipos dos parâmetros e da função
 ligação forte entre ODL e a linguagem hospedeira, com tradução directa e acesso às mesmas
variáveis
 OQL define as interrogações mais baseadas em conjuntos (“relacionais”) e os métodos são mais
virados para o objecto individual
 métodos sempre definidos numa classe e executados relativamente a um objecto dessa classe que
funciona como parâmetro implícito
 métodos podem ser vistos como atributos especiais

Métodos
 estilo declaração de função C++ (suporta polimorfismo)
 parâmetros são declarados in (entrada), out (saída) ou inout (entrada-saída) -- dois últimos
passados por referência
 levantamento de excepções, para tratamento de situações anormais ou inesperadas que são
tratadas pelo chamador fora da sequência normal de chamada resposta
ODMG
2
Exemplo de declaração de métodos
interface Filme
(extent Filmes
key (titulo, ano))
{
attribute string titulo;
attribute integer ano;
attribute integer comprimento;
attribute enum Filme {cor, pretoBranco} tipoFilme;
relationship Set<Estrela> estrelas inverse Estrela::filmes;
relationship Estudio proprietario inverse Estudio::possui;
float comprimentoHoras() raises(semDuracao);
nomesActores( out Set<string> );
outrosFilmes( in string, out Set<Filme> ) raises (estrelaInexistente);
};

a declaração extent nomeia o conjunto de instâncias da classe existentes no
momento - funciona como uma relação
 as perguntas em OQL referem-se à extensão e não ao nome da classe
ODMG
3
Estender LPOO com capacidades BD

Extensões à linguagem: OPAL é uma extensão do Smalltalk com classes e
primitivas de gestão de BD
 colecções com restrições para armazenar grandes quantidades de dados
 blocos de selecção especiais com capacidade para usar índices, onde os haja

Fornecimento de bibliotecas de gestão de BD para uso de linguagem standard
(C++)
 Ontos, Objectivity, Object Store usa compiladores standard
 distinção entre preprocessamento e uso de bibliotecas é ténue

Objectivos:
 eliminar a impedância entre as linguagens especializadas de BD e as de uso geral
 reduzir o abismo semântico para a especificação do problema

Resultado ainda é mais navegacional e menos declarativo do que o modelo
relacional forneceu
ODMG
4
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
ODMG
5
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.
ODMG
6
Hierarquia de Tipos Pré-definidos

Denotable_Object

Object

Atomic_Object




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



Type
Exception
Iterator
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
ODMG
7
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.
ODMG
8
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 ...
ODMG
9
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”
ODMG
10
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”)
ODMG
11
Ú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)>
ODMG
12
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”)
ODMG
13
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
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
ODMG
15
Download