ODMG - Object Database Management Group
• Padrão para SGBDOO• Consórcio de pesquisadores e fabricantes• Objetivo
– integração e padronização de funcionalidades de BD a uma LPOO
• Componentes do padrão– modelo de objetos– linguagem de definição de dados (ODL)– linguagem de consulta (OQL)
Modelo de Objetos e ODL• Modelo de objetos – conceitos
– dados (objetos e literais)– tipos (interfaces, classes de objetos e literais)– herança– OID e chave
• Especificados em ODL
Dados• Duas formas de dados são possíveis
– objetos e literais• Objetos
– possuem valor e OID– são instâncias de classes
• Literais– possuem valor e não possuem OID– não são instâncias de uma classe
• objetos isolados • objetos componentes de outros objetos
Literais• Três tipos
– atômicos, estruturados e de coleção• Literais atômicos
– tipos de dados básicos (predefinidos)• boolean, char, short, long, float, double, string, ...
• Literais estruturados– tipos de dados estruturados (alguns predefinidos)
• date, time, timestamp, ... ou definidos pelo usuário• Literais de coleção
– tipos de agrupamento de dados (predefinidos)• set<t>, bag<t>, array<t>, ...
– t é tipo de objeto ou valor
Definição de Dados - ODL
• Três formas– interface, literal ou classe
• Interface– define apenas comportamento (assinatura)– não possui instâncias
• Literal– define apenas propriedades – possui instâncias (sem OID)
• Classe – define propriedades e comportamento– possui instâncias (com OID - objetos)
Interfaces e Literais em ODLinterface Pessoa {short idade();
boolean ehMenor(); void casou(Pessoa p) raises(jahEhCasado); ...};
struct Endereço {attribute string rua;attribute short número;attribute string cidade;
};
set<Endereço> EndereçosAmigos;
Endereço MeuEndereço;
Classes em ODLclass Departamento (extent Departamentos) {
attribute string nome;attribute short código;
attribute Endereço localização; attribute struct atendimento{
horaInício time, horaTérmino time} horário; attribute Empregado chefe; relationship set<Empregado> funcionários inverse Empregado:: depto;
void adicionaEmp(short RG) raises (jahTrabalha, RGInexistente);
...};
conjunto de instâncias
atributo literal atômico
atributo literal estruturado
atributo de referência a objeto
relacionamento
Herança• Duas formas
– herança IS-A– herança extends
• Herança IS-A– herança de interface– pode ser interfaceinterface ou interfaceclasse– permite herança múltipla
• Herança extends– herança de propriedades– ocorre somente entre classes (classeclasse)– não permite herança múltipla
Herança em ODLClasse Empregado (extent Empregados) { attribute short RG; attribute string nome;attribute enum gênero{M,F} sexo;attribute Date DN;
attribute Endereço residência;attribute float salário;
relationship Departamento depto inverse Departamento:: funcionários; ...};
Classe Professor (extent Professores) extends Empregado : Pessoa {attribute string titulação;attribute string areaAtuação;...};
herança extends
herança IS-A
OID e Chave• OID
– identificador do objeto• Chave
– uma ou mais propriedades cujos valores devem ser únicos
class Departamentos class Cidades( extent todosDeptos (key (estado,nome)) key código) {{ attribute string
estado;attribute string nome; attribute string nome;attribute short código; ...... }};
Exemplo – Pacientes em ODLclass Paciente (extent Pacientes key CPF) {
attribute long CPF;
attribute long RG;
attribute string nome;
relationship Leito leito
inverse Leito:: paciente;
attribute struct responsabilidade {relationship Médico médico
inverse Médico:: responsável,horárioVisita time} responsável;
relationship set<Médico> tratamento
inverse Médico:: tratamento;
};
Exemplo – Médicos em ODL
class Médico (extent Médicos key CRM) {
attribute long CRM;
attribute string nome;
attribute float salário;
attribute Especialidade atuação;
attribute set<Especialidade> formação;
relationship set<Paciente> responsável
inverse Paciente:: responsável.médico;
relationship set<Paciente> tratamento
inverse Paciente:: tratamento;
};
Consultas em BDOOs• Duas abordagens
– navegacional• navegação entre objetos através de suas referências
(controlada pelo programa da aplicação ou SGBDOO)– declarativa
• uso de uma linguagem de consulta do SGBDOO• violação de encapsulamento
– maior flexibilidade para formulação de consultas
• Não há DML, apenas linguagem de consulta– métodos implementam operações de atualização
• Linguagem de consulta do padrão ODMG– OQL (Object Query Language)
OQL• Linguagem de consulta declarativa• Extensão da linguagem SQL com suporte
ao tratamento de– objetos complexos– junções por valor ou por OID– invocação de métodos
• suporta late binding (polimorfismo)– herança
Ponto de Partida de uma Consulta• Objeto ou conjunto de objetos
– extensão de classe (extent)– literal ou conjunto de literais
select e.nome MeuEndereçofrom e in Empregados
select e.ruafrom e in EndereçosAmigos
variável de iteração
Resultados de Consultas• Literais, objetos, conjuntos de literais ou de objetos
select e.* MeuEndereçofrom e in Empregados
select struct ( nome: d.nomeempsRicos:(select e.* from e in d.funcionários where e.salário > 5000))
from d in Departamentos
conjunto de objetos literal
conjunto de literais (estrutura complexa)
Expressões de Caminho• Permitem a navegação entre objetos
– caminhamento através de atributos de referência e relacionamentos
– utiliza-se a notação de ponto (“.”)• Exemplo
select p.nome, p.titulaçãofrom p in Professores
where p.depto.código = ‘INE’
Expressões de Caminho• Variáveis de iteração são definidas para a
navegação em coleções de objetos referenciados (referências 1:N)– a variável de iteração associa-se com cada elemento da
coleção referenciada• Exemplo
select f.nomefrom d in Departamentos, f in d.funcionárioswhere d.código = ‘INE’and f.salário > 5000
Junções• Junções entre conjuntos de objetos ou de
literais são permitidas, como em BDRs• Junções de objetos tanto por valor quanto
por OID são permitidas• Exemplo
select c1.nomefrom c in Cidades, c1 in Cidadeswhere c1.estado = c.estadoand c.nome = ‘Florianopólis’
and c.estado = ‘SC’
Invocação de Métodos• Métodos podem ser declarados em consultas
da mesma forma que propriedades• Exemplos
select e.nomefrom e in Empregadoswhere e.idade > 50
select d.código, d.nroHorasAtendimentofrom d in Departamentos
Consultas em Hierarquias de Classes
• Consultas aplicadas a uma classe processam objetos da classe e de suas subclasses
• Restrições podem ser especificadas• Exemplo
select (Professores, Pesquisadores)e.nome
from e in Empregadoswhere e.salário > 3000
Funções de Agregação• Aplicadas sobre qualquer conjunto de dados• Exemplos
avg(select p.saláriofrom p in Professoreswhere p.depto.código = ‘INE’)
select d.código, d.nomefrom d in Departamentoswhere count (d.funcionários) > 30
Top Related