220 likes | 345 Views
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).
E N D
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 propriedadese comportamento • possui instâncias (com OID - objetos)
Interfaces e Literais em ODL interface 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 ODL class 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); ... };
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 ODL Classe 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 ODL class 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ço from e in Empregados select e.rua from e in EndereçosAmigos variável de iteração
Resultados de Consultas • Literais, objetos, conjuntos de literais ou de objetos select e.* MeuEndereço from e in Empregados select struct ( nome: d.nome empsRicos:(select e.* from e in d.funcionários where e.salário > 5000)) from d in Departamentos literal conjunto de objetos 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ção from 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.nome from d in Departamentos, f in d.funcionários where 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.nome from c in Cidades, c1 in Cidades where c1.estado = c.estado and 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.nome from e in Empregados where e.idade > 50 select d.código, d.nroHorasAtendimento from 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 Empregados where e.salário > 3000
Funções de Agregação • Aplicadas sobre qualquer conjunto de dados • Exemplos avg(select p.salário from p in Professores where p.depto.código = ‘INE’) select d.código, d.nome from d in Departamentos where count (d.funcionários) > 30