ODMG Object Database Management Group Padro para SGBDOO
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, 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 ODL interface Pessoa { short idade(); boolean eh. Menor(); void casou(Pessoa p) raises(jah. Eh. Casado); . . . }; struct Endereço { attribute string rua; attribute short número; attribute string cidade; }; set<Endereço> Endereços. Amigos; Endereço Meu. Endereço;
Classes em ODL class Departamento (extent Departamentos) { attribute string nome; attribute short código; attribute Endereço localização; attribute struct atendimento{ hora. Início time, hora. Término time} horário; attribute Empregado chefe; relationship set<Empregado> funcionários inverse Empregado: : depto; void adiciona. Emp(short RG) raises (jah. Trabalha, RGInexistente); . . . atributo literal estruturado }; conjunto de instâncias atributo de referência a objeto atributo literal atômico relacionamento
Herança • Duas formas – herança IS-A – herança extends • Herança IS-A – herança de interface – pode ser interface ou interface classe – permite herança múltipla • Herança extends – herança de propriedades – ocorre somente entre classes (classe) – 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; . . . }; herança extends Classe Professor (extent Professores) extends Empregado : Pessoa { herança IS-A attribute string titulação; attribute string area. Atuação; . . . };
OID e Chave • OID – identificador do objeto • Chave – uma ou mais propriedades cujos valores devem ser únicos class Departamentos ( extent todos. Deptos key código) { attribute string nome; attribute short código; . . . }; class Cidades (key (estado, nome)) { attribute string estado; attribute string nome; . . . }
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ário. Visita 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 from e in Empregados variável de iteração select e. rua from e in Endereços. Amigos Meu. Endereço
Resultados de Consultas • Literais, objetos, conjuntos de literais ou de objetos conjunto de objetos select e. * from e in Empregados literal Meu. Endereço select struct ( conjunto de literais (estrutura complexa) nome: d. nome emps. Ricos: (select e. * from e in d. funcionários where e. salário > 5000)) from d in Departamentos
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 c 1. nome from c in Cidades, c 1 in Cidades where c 1. 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. nro. Horas. Atendimento 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
- Slides: 22