730 likes | 929 Views
SGBDOO - Padrão ODMG. Componentes: Modelo de objetos Linguagem de especificação dos objetos ODL - Object Definition Language Linguagem de Consulta OQL - Object Query Language Declarativa, não procedural para consulta e atualização da base de dados Baseada no SQL
E N D
SGBDOO - Padrão ODMG • Componentes: • Modelo de objetos • Linguagem de especificação dos objetos • ODL - Object Definition Language • Linguagem de Consulta • OQL - Object Query Language • Declarativa, não procedural para consulta e atualização da base de dados • Baseada no SQL • Ligações (bindings) com LPOO • C++, Smalltalk e Java 3. Padrão ODMG
Declarações ODL Aplicação em LPOO Compilador Processador ODL Runtime SGBDOO Binário da Aplicação metadados Linker BD Aplicação Executável SGBDOO - Padrão ODMG Arquitetura 3. Padrão ODMG
Modelo de Objetos ODMGTipos • Primitivas básicas: • Objeto: possui identificador único • Literal: não possui identificador • Tanto objetos quanto literais podem ser categorizados por um tipo • Estado de Objeto • Definido pelo conjunto de propriedades: atributos e relacionamentos 3. Padrão ODMG
especificação implementação Java implementação C++ Modelo de Objetos ODMGTipos • Tipo: dois aspectos • uma especificação externa - definição abstrata de • operações que podem ser chamadas • propriedades de cada objeto • exceções que podem ser sinalizadas • uma ou mais implementações • cada uma define como as operações estão implementadas e outros detalhes internos 3. Padrão ODMG
interface classe literal operações (comportamento) estado (propriedades) Modelo de Objetos ODMGTipos • Tipos de Especificações • Definição de Interface • define apenas comportamento e não possui instâncias • ex.: interface Empregado {...}; • Definição de literal • define apenas estado e possui instâncias • inclui a definição do tipo struct e dos tipos primitivos boolean, char, short, long, float, double, octet, string, any • ex.: struct Complexo {float re; float mi}; 3. Padrão ODMG
Modelo de Objetos ODMGTipos • Tipos de Especificações (cont.) • Definição de Classe • define comportamento e estado • possui instâncias • ex.: class Pessoa {...}; • Tipos de Implementação • Representação da especificação em uma linguagem específica de programação • Definição de um método para cada operação abstrata definida na especificação 3. Padrão ODMG
Herança IS-A (é um) Exemplos: interface Empregado {...}; interface Professor: Empregado {...}; class Professor_Titular: Professor {...}; Pode haver herança múltipla Apenas a interface é herdada (comportamento) classes podem herdar de interfaces interfaces podem herdar de interfaces Modelo de Objetos ODMGTipos - Herança Empregado Professor Professor Titular 3. Padrão ODMG
Modelo de Objetos ODMGTipos - Herança • Herança de Estado (extends) • Semelhante a herança em LPOO • Não admite herança múltipla • Somente entre classes: • class Pessoa { • attribute string nome; • attribute Date dataNasc}; • class EmpregadoPess extends Pessoa : Empregado { • attribute Date dataContr; • attribute Currency sal;...}; herança extends (estado + comportamento) herança IS-A (de comportamento) 3. Padrão ODMG
Modelo de Objetos ODMGTipos • Extensão de um tipo (extent) • conjunto de todas as instâncias do tipo que existem no BD • equivalente ao conceito de tabela no modelo relacional • lista mantida automaticamente pelo BD • Chave • apesar do modelo OO não conter o conceito de chave, ele é útil em SGBD • Chave = um ou mais atributos cujos valores identificam uma instância dentro de uma extensão 3. Padrão ODMG
Modelo de Objetos ODMGTipos • Métodos do objeto • new( ): usado para criação de objetos • same_as( ): verifica se dois objetos tem o mesmo identificador • copy( ): faz uma cópia do objeto em questão • delete( ): remove o objeto da memória e do BD • Nome de Objeto • identificador fornecido pelo usuário • serve para dar nomes a objetos “raiz” 3. Padrão ODMG
Modelo de Objetos ODMGTipos • Objetos persistentes e transientes • objetos de mesmo tipo podem ser persistentes ou transientes • podem ser manipulados com as mesmas operações • Coleções: • Set <t> (conjunto) • sem ordenação e sem duplicatas • Bag <t> (“sacola”) • sem ordenação e admite duplicatas • List <t> (lista ordenada) • com ordenação e admite duplicatas 3. Padrão ODMG
3.1 Modelo de Objetos ODMGTipos • Coleções: • Array <t> (arranjo) • com ordenação e admite duplicatas • localiza elementos por posição • Dictionary <t,v> (lista indexada) • com ordenação e admite duplicatas • localização por chave associada a cada elemento • Tipos estruturados (structured_object) • Date, Interval, Time, TimeStamp 3. Padrão ODMG
Modelo de Objetos ODMGTipos • Literal • atomic literal • boolean, char, short, long, float, double, octet, string, any • enum (enumeração) • attribute enum sexo (masculino, feminino) • collection literal • sem OID • set, bag, list, array, dictionary • tipo Table (tabela) • equivalente a uma tabela no modelo relacional • mesmo que uma coleção de struct 3. Padrão ODMG
Modelo de Objetos ODMGTipos • Literal • structured literal • Pré-definidos: date, interval, time, timestamp • Definidos pelo usuário: struct endereço{ string rua; string no; string complemento} • null literal • exemplo: nullable_float, nullable_set,... 3. Padrão ODMG
Linguagem de Definição - ODLEstado e Comportamento de tipos • Estado • Atributo • valor pertence a um tipo • não tem propriedade nem participa de relacionamentos • não pode ser especializado interface Pessoa{ attribute short idade; attribute string nome; attribute enum sexo (masculino, feminino); attribute address home_address; attribute set <Phone_no> phones; attribute Department dept }; atributo literal atômico atributo objeto (referência a um OID) 3. Padrão ODMG
Linguagem de Definição - ODLEstado e Comportamento de tipos • Estado • Relacionamento • somente relacionamentos binários: 1:1, 1:n, m:n • definido sobre dois tipos • cada tipo participante tem que possuir OID (literais não participam) • relacionamento não é um objeto • relacionamento é definido implicitamente por caminhos de travessia entre objetos • integridade referencial é mantida automaticamente pelo SGBD 3. Padrão ODMG
Linguagem de Definição - ODLEstado e Comportamento de tipos • Estado interface Professor { ... relationshipSet<Curso> ministra inverse Curso :: ehministrado_por; ...}; interface Curso { ... relationship Professor eh_ministrado_por inverse Professor::ministra; ...}; para muitos (set) para um 3. Padrão ODMG
Linguagem de Definição - ODLEstado e Comportamento de tipos • Atributo Referência • referência a um objeto (relacionamento unidirecional) • não é relacionamento ODMG interface Pessoa{ attributeshort idade; attributestring nome; attributeenum sexo (masculino, feminino); attribute address home_address; attributeset <Phone_no> phones; attribute Department dept }; atributo objeto (referência a um objeto - OID) 3. Padrão ODMG
Linguagem de Definição - ODLEstado e Comportamento de tipos • Operações • Além de atributos e relacionamentos, o restante da especificação do tipo contém um conjunto de assinaturas de operação • Assinatura de operação: • nome da operação • nome e tipo de cada argumento • tipo de valor retornado • exceções que podem ser sinalizadas pela operação 3. Padrão ODMG
Linguagem de Definição - ODLExemplo ODL - Universidade Salário Estudante Empregado <<extends>> <<extends>> Professor Monitor IF_Estudante auxilia pré-req matrícula Disciplina Parte partes ministra 3. Padrão ODMG
Linguagem de Definição - ODLExemplo ODL - Universidade class Disciplina (extent disciplinas) { attributestring nome; attributestring numero; relationshiplist<Parte> asPartes inverse Parte:: aDiscip; relationshipset<Disciplina> temPreReq inverse Disciplina:: ePreReq; relationshipset<Disciplina> ePreReq inverse Disciplina:: temPreReq; relationshipset<IF_Estudante> osEstud inverse ID_Estudante::asDiscip; boolean oferecer (in unsigned short semestre) raises (ja_oferec); boolean cancelar (in unsigned short semestre) raises (nao_oferec); }; 3. Padrão ODMG
Linguagem de Definição - ODLExemplo ODL - Universidade • class Parte • (extent partes) • { • attributestring numero; • relationship Monitor oMonitor • inverse Monitor:: asPartes; • relationship ProfessoroProf • inverse Professor:: asPartes; • relationship Disciplina aDiscip • inverse Disciplina:: asPartes; • }; 3. Padrão ODMG
Linguagem de Definição - ODLExemplo ODL - Universidade • class Salario • { • attributefloat base; • attributefloat hora_extra; • attributefloat bonus; • }; 3. Padrão ODMG
Linguagem de Definição - ODLExemplo ODL - Universidade • class Empregado • (extent empregados) • { • attributestring nome; • attributeshort id; • relationship Salario oSalario; • void contratar(); • void demitir() raises (não_existe_emp); • }; 3. Padrão ODMG
Linguagem de Definição - ODLExemplo ODL - Universidade • class Professor • (extent professores) • { • attributeenum • Nivel(titular, adjunto, assistente) nivel; • relationship set<Parte> asPartes • inverse Parte :: oProf; • void promocao() raises (inelegivel_promo); • }; 3. Padrão ODMG
Linguagem de Definição - ODLExemplo ODL - Universidade • interface IF_Estudante • { • struct Endereco { • string casa; • string numero;} • attribute Endereco end_dorm; • attributestring nome; • attributestring id; • relationshipset<Disciplina> asDiscip; • inverse Disciplina :: osEstud; • boolean inscreve_disc(in Disciplina discip) • raises (sem_pre_req, sem_vagas); • void cancela_disc(in Disciplina discip) • raises (não_inscrito); • ); 3. Padrão ODMG
3.2 Linguagem de Definição - ODLExemplo ODL - Universidade • class Monitor extends Empregado : IF_Estudante • { • attribute Endereco end_dorm; • attributestring nome; • attributestring id; • relationshipset<Disciplina> asDiscip; • inverse Disciplina :: osEstud; • relationshipset<Parte> asPartes; • inverse Parte :: oMonitor; • ); • class Estudante : IF_Estudante • (extent estudantes) • { • attribute Endereco end_dorm; • attributestring nome; • attributestring id; • relationshipset<Disciplina> asDiscip; • inverse Disciplina :: osEstud; • }; estado é redefinido, já que IF_Estudante é uma interface (não especifica estado) 3. Padrão ODMG
3.2 Linguagem de Definição - ODLExemplo ODL - BD Genealogia class Pessoa (extent pessoas) { attributestring nome; attributestruct Address {unsigned short numero, string rua, Cidade cidade} endereco; relationship Pessoa conjuge inverse Pessoa :: conjuge; relationshipset<Pessoa> filhos inverse Pessoa :: pais; relationshiplist<Pessoa> pais inverse Pessoa :: filhos; void nascim (in string nome_pessoa; boolean casamento (in string nome_pessoa) raises (não_há_pessoa); unsigned short descendentes (out set<Pessoa> todos_desc) raises (não_há_pessoa); }; 3. Padrão ODMG
3.2 Linguagem de Definição - ODLExemplo ODL - BD Genealogia class Cidade (extent cidades key cep) { attributeunsigned short cep; attribute string nome; attribute set<Pessoa> população; }; 3. Padrão ODMG
Exercício - ODLCriar as Classes Pessoa Funcionário Aluno n n 1 usa usa gerencia 1 n Escritório Prédio Sala n n n Sala de Aula comp. de
3.3. Linguagem de Consulta OQL Visão Geral • Características de OQL - Object Query Language • linguagem associativa de consultas • a consulta é especificada no SGBD através de uma expressão • SGBD passa ao usuário apenas os objetos que resolvem a consulta • baseada no modelo de objetos do ODMG • baseada em SQL-92 com extensões de orientação a objetos • provê primitivas para manipular coleções • linguagem funcional com expressões aninhadas 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Características de OQL - Object Query Language • não é linguagem completa para desenvolvimento de aplicações • baseada no mesmo sistema de tipos de uma LPOO • consultas OQL podem ser embutidas na LPOO • consultas OQL podem chamar operações programadas na LPOO • não possui comandos de alteração • uso da LPOO para alterações • Objeto consultado: coleções • objetos com nomes (pontos de entrada no BD) • extensões de classes (extent) 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Modelo para exemplos: • extent de Pessoa é pessoas • extent de Empregado é empregados • Presidente é nome de um objeto de pessoa subordinação 1 Pessoa Empregado subordinados nome data_nasc sexo salário 0..* nível() idade() 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Conjunto no resultado • select distinct p.idade • from Pessoas p • where p.nome = “José” • Obtém um conjunto com as diferentes idades de pessoas com nome = “José” • o resultado é do tipo set<integer> • cláusula distinct faz com que seja obtido set e não bag 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Estrutura no resultado, uso de operação • select distinct struct (id:p.idade, sx:p.sexo) • from Pessoas p • Obtém um par com a idade e o sexo de cada pessoa • o resultado é do tipo set<struct> • uso da operação idade() na consulta OQL como se fosse atributo 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Consulta aninhada no resultado select distinct struct (nome:emp.nome, altos_emp: (select s from emp.subordinados s where s.salario > 5000)) from Empregados emp • Para cada empregado, obter um par formado por seu nome e pelo conjunto dos empregados que a ele estão subordinados e cujo salário é maior que 5.000 • tipo do resultado: • set<struct(nome:string, altos_emp:bag<Empregado>)> 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Consulta aninhada no resultado select distinct struct (nome:emp.nome, altos_emp: (select s from emp.subordinados s where s.salario > 5000)) from Empregados emp Empregado é especialização de pessoa herança de propriedades distinct = set consulta aninhada no resultado relacionamento subordinados de emp retorna conjunto de subordinados sem distinct = bag 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Consulta aninhada no from select struct (id:emp_grad.idade, sx:emp_grad.sexo) from (select emp from Empregados emp where emp.nível = 10) as emp_grad where emp_grad.salario > 1000 • Obtém a idade e o sexo de cada empregado de nível 10 com salário > 1000 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Consultas sem select • Nomes de objetos ou de extents podem ser usados diretamente • Exemplos: • Obter o presidente: Presidente • Obter os subordinados do presidente: Presidente.subordinados • Obter o conjunto de todas as pessoas: Pessoas 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Objetos e literais no resultado da consulta • OID do objeto pode ser • OID do objeto no BD select emp from Empregados... • OID gerado pelo processador de consultas select Pessoa(nome:..., data_nasc:...)... 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Expressões de caminho - path expression • notações: • pess.conjuge • pess->conjuge • exemplo (BD genealógico) pess.conjuge.endereco.cidade.nome um atributo nome uma cidade, navegação de relacionamento um atributo endereço outra pessoa, obtida por navegação de relacionamento uma pessoa 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Path Expressions e relacionamentos N:N • pess.filhos.nome • consulta incorreta pois: • pess.filhos é um conjunto de pessoas (set<Pessoa>) • a lista não tem o atributo nome, e sim cada elemento da lista • Forma correta: select filho.nome from pess.filhos as filho • Resultado: bag<string> 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Cláusula From com várias coleções select filho.endereço from Pessoas pess, Pess.filhos filho • Os dois elementos do from são interrelacionaods • Pessoas pess indica que a consulta varre todo o extent de Pessoa • pess.filhos filho indica que, para cada pessoa pess, será varrido o conjunto de seus filhos (pess.filhos) 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Cláusula WHERE - relação entre coleções • select fil.endereço • from Pessoas pess, • Pess.filhos fil • where pess.endereco.rua= “Beco das Tamancas” • and count(pess.filhos) > 1 • and pess.endereco.cidade = fil.endereco.cidade • Obtém o conjunto de endereços dos filhos de pessoas com mais de um filho que vivem (pais) no Beco das Tamancas e cujos filhos vivem na mesma cidade 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Cláusula WHERE - Junção • select pess • from Pessoas pess, Cidades cid • where pess.nome = cid.nome • Obtém as pessoas cujo nome é idêntico a um nome de cidade 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Tratamento de valores vazios - (nil) • o resultado do acesso a nil é UNDEFINED • Regras: • . ou -> aplicado sobre UNDEFINED resulta UNDEFINED • comparação (=, !=, <,...) com operandos UNDEFINED resulta em FALSE • is_defined(predicado) e is_undefined(predicado) testam se um predicado é definido ou não • qualquer outra operação sobre UNDEFINED resulta em erro de execução 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Tratamento de valores vazios - (nil) • Exemplo 1: obter os empregados de Curitiba select emp from Empregados emp where emp.endereco.cidade = “Curitiba” • Exemplo 2: erro - um dos empregados não possui endereço select emp.endereco.cidade from Empregados emp • Exemplo 3: forma correta select emp.endereco.cidade from Empregados emp whereis_defined(emp.endereco.cidade) 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Chamada de Operações • Operações podem ser referenciadas na mesma posição em que atributos são usados • o usuário não necessita saber se a chamada é a um atributo ou método (a menos que existam parâmetros) • Exemplo: • selectmax( select filho.idade • from pess.filhos filho) • from Pessoas pess • where pess.nome = “José da Silva” referência a uma operação 3. Padrão ODMG
3.3. Linguagem de Consulta OQL Visão Geral • Chamada de Operações • Supor que • primogênito() é um método de pessoa que retorna uma instância de pessoa • vive_em(string) retorna true se a pessoa vive na cidade dada como parâmetro • select pess.primogenito.endereco.rua • from Pessoas pess • where pess.vive_em(“Curitiba”) and • count(pess.filhos) > 0 referência a uma operação 3. Padrão ODMG
Pessoa atividades() Estudante Empregado atividades() média() atividades() 3.3. Linguagem de Consulta OQL Visão Geral • Polimorfismo • O método a ser chamado é decidido em tempo de execução (late binding) select pess.atividades from Pessoas pess 3. Padrão ODMG