210 likes | 257 Views
SGBDOO. novos modelo e linguagem de dados SIM (Unysis) estender linguagem BD com capacidades OO Oracle, Informix, Ontos estender uma LP OO com capacidades BD Opal fornecer bibliotecas OO com funções de SGBD ObjectStore, Ontos, Versant
E N D
SGBDOO • novos modelo e linguagem de dados SIM (Unysis) • estender linguagem BD com capacidades OO Oracle, Informix, Ontos • estender uma LP OO com capacidades BD Opal • fornecer bibliotecas OO com funções de SGBD ObjectStore, Ontos, Versant • embeber construções de BDOO em linguagem hospedeira O2 • produtos para domínios específicos suportados por SGBDOO escritório inteligente • persistência • transacções • controlo da concorrência • recuperação • pesquisa • versões • integridade • segurança • desempenho • tipos de dados abstractos • herança • identidade dos objectos Funções SGBD Orientação por objectos Estratégias
Sistema de tipos • Tipos de base: inteiros, reais, booleanos, cadeias de caracteres • Construtores de tipos • estruturas de registos: dada uma lista de tipos T1, T2, …, Tn e a correspondente lista de nomes de campos c1, c2, …, cn, RECORDOF(c1:T1, c2:T2, …, cn:Tn) é um tipo registo com n componentes (struct) • tipos colecção: dado um tipo T, SETOF(T) é um tipo conjunto de elementos do tipo base T; para além dos conjuntos é habitual usar outras colecções, como multiconjuntos, listas, vectores • tipos referência: uma referência para um tipo T REF T é um tipo cujos valores são adequados para encontrar eficientemente um valor do tipo T: apontador para endereço de memória virtual, ou uma localização num disco de uma máquina (distribuição) — REF frequentemente omitido dá imagem de objectos contidos em objectos
Tipos, classes e objectos • Exemplo: Banco • CLASS Conta= RECORDOF( nr : inteiro; balanço : real titular : REF Cliente) CLASS Cliente= RECORDOF( nc : inteiro; nome : string; contas : SETOF(Conta)) • Conta • nr • balanço • titular - por iteração dos construtores obtêm-se estruturas arbitrariamente complexas - tipos + métodos = classe - os objectos de uma classe são constantes (objectos imutáveis) ou variáveis desse tipo (mutáveis) - {2,5,7} objecto imutável da classe CInt=SETOF(inteiro) - s:Cint é uma variável e pode guardar o conjunto {2,5,7} Cliente nc nome contas ... ... ...
Características dos objectos • Identidade dos objectos (OID) • cada objecto tem o seu OID cuja validade tem que acompanhar toda a vida do objecto • Métodos • são procedimentos ou funções associados a uma classe • têm sempre como alvo um objecto; podem ter outros argumentos • ex: calcular a soma dos números numa instância de Cint • ADT - Tipos de Dados Abstractos • encapsulamento das variáveis internas impõe disciplina no acesso à informação • obtém-se melhor qualidade e robustez ao software • elevada modularidade facilita a manutenção • capacidade expressiva contrasta com a fixidez do modelo relacional • Relação = SETOF( RECORDOF(c1:T1, c2:T2, …, cn:Tn ) ) • Classes organizam-se em hierarquias • subclasses herdam a estrutura do tipo e os métodos (reutilização) • podem estender a superclasse com mais propriedades ou redefinir as herdadas
Modelos de objectos complexos • modelos semanticamente ricos, próximos das construções dos formalismos de especificação (entidade-associação, OMT, etc.), mas várias das linguagens são ad hoc • objectos complexos baseados em valores • sem OID e sem referências • unicidade de um objecto depende apenas do estado (conjunto de valores atómicos das variáveis de instância) • espaço de objectos: florestas de árvores (semelhança com modelo hierárquico e modelo relacional não primeira forma normal) • espaço transitório versus espaço persistente [objectos na memória são caminhos (path) constituídos por atributos (selectores em tuplos) e chaves (selectores em conjuntos)] conjunto de tuplos {[Nome:Pedro, Idade:25], [Nome:João,Idade:7], [Nome:Maria, Idade:13]} relação encaixada {[Nome:Pedro, Filhos:{Max, Susana}], [Nome:João, Filhos:{Maria, Francisco}]} objectos atómicos 25, João, 1.3 conjunto {João, Maria, Susana} tuplo [Nome:Pedro, Idade:25] tuplo hierárquico [Nome:[Próprio: João, Apelido:Costa], Idade:25, Filhos: {Pedro, Paulo, Maria}]
Objectos complexos baseados em valores CLASS Nome= RECORDOF( proprio:string, apelido:string) CLASS Morada= RECORDOF( cidade:string, rua:string, no:inteiro) CLASS Pessoa = RECORDOF( nome:Nome, filhos:SETOF(Pessoa), endereço: Morada, esposo:Nome)) tuplo i conjunto Maria Nome Esposo Endereço Próprio Apelido Próprio Apelido Filhos Maria No Costa Cidade Costa Rua João i 34 João Braga Direita António Joana Nome Esposo Endereço Próprio Apelido Próprio Apelido Filhos No João Costa Cidade Costa Rua Maria i 34 Braga Direita António Joana
Objectos complexos com identidade (modelo baseado em FAD) • espaço de objectos complexos baseados em identidade (grafo dirigido) - conjunto de identificadores I, conjunto de atributos A - objecto é (identificador, tipo, valor); identificador Î I, tipo é atómico, conjunto ou tuplo tipo atómico — elemento de um domínio de valores atómicos do utilizador conjunto — {i1, i2,…, in}, ijÎ I, sem ordem e sem repetições tuplo — [ai:i1, a2:i2, …, an:in], ijÎ I, ajÎ A - notar a partilha referencial e os ciclos i1 Esposo i101 Nome Nome i2 i102 Endereço Próprio Filhos Apelido Apelido Próprio i4 No Cidade Rua i Costa João i3 Maria Costa 34 Braga Direita …
Igualdade • Objectos complexos baseados em valores 1. Dois objectos atómicos são iguais sse forem o mesmo. 2. Dois objectos tuplo são iguais sse os valores em cada atributo forem iguais. 3. Dois objectos conjunto S e S' são iguais sse para cada elemento de S (S') existir um elemento de S' (S) igual. • Objectos complexos baseados em identidade 1. Idênticos. Dois objectos têm identificadores idênticos sse forem o mesmo objecto. 2. Igualdade superficial (shallow equal). Dois objectos são superficialmente iguais sse têm o mesmo tipo e os valores do conteúdo são idênticos; • dois objectos atómicos são iguais se denotam o mesmo elemento no domínio de valores base. 3. Igualdade profunda (deep equal). Dois objectos são profundamente iguais sse têm o mesmo tipo e os valores do conteúdo são profundamente iguais; • Modelo híbrido • objectos atómicos (inteiros, reais, caracteres, booleanos, apontadores, datas) não precisam de uma identidade diferente do seu valor (Smalltalk, Java) — eficiência
Estes objectos são iguais? • Pessoa1 = Pessoa2 ? Claro • Pessoa1 = Pessoa3 ? Profundamente; não superficialmente • Filhos1 = Filhos2 ? Profundamente e superficialmente i1 esposo nome filhos endereço i2 i3 i4 i201 i próprio apelido cidade no rua João Costa Braga Direita 34 i401 i301 Pessoa1= i1 Pessoa2= i1 Pessoa3= i101 Filhos1= i3 Filhos2= i103 esposo apelido próprio i102 i103 i endereço filhos nome i101
Apoiantes da norma • Object Database Management Group • representa 90 % do mercado existente de SGBDO’s: • Object Design • Objectivity • O2 • Versant • Ontos • Servio • Itasca e liderado por Rick Cattell da SunSoft
Modelo de objectos • Modelo proposto pela ODMG (Object Database Management Group dirigido por Rick Cattell) para servir como norma (versão 2.0) para BDOO • Modelo abstracto — existem mapeamentos para C++, Smalltalk e Java • Arquitectura com três componentes • ODL - Object Definition Language — interesse para o projecto • OQL - Object Query Language — extracção de informação • OML - Object Manipulation Language — alteração dos dados; pouco desenvolvida na norma por ser específica de cada linguagem • ODL é uma extensão da IDL (Interface Description Language), a componente da CORBA que descreve as interfaces entre objectos
CORBA • Common Object Request Broker Architecture • norma desenvolvida pelo OMG (Object Management Group) para sistemas de objectos distribuídos • pretende tornar a distribuição transparente • e aumentar a interoperabilidade • fornece uma infraestrutura que permite encontrar um determinado objecto para lhe solicitar um serviço e que faz as conversões necessárias • cada objecto apresenta ao sistema uma interface com a sua descrição feita em IDL (Interface Description Language) • as aplicações ligam-se através dessa interface a uma espécie de barramento de dados • houve a preocupação de garantir que o modelo de objectos ODMG fosse um superconjunto do modelo de objectos OMG IDL IDL IDL CORBA
Linguagem de Definição de Objectos • em ODL o Mundo é constituído por objectos, com identidade, agrupados em classes • uma classe agrupa objectos que • correspondem a conceitos do mundo real semelhantes • têm todos as mesmas propriedades • propriedades: • atributos - têm tipos baseados em tipos primitivos, que não envolvam classes • associações - referência ou colecção de referências para objectos • métodos - funções aplicáveis aos objectos da classe • declaração de uma classe (muito ao estilo C++) interface <nome> { <lista de propriedades> }
Exemplo • As definições de classe em rigor têm uma interface e uma implementação (daí a designação) interface Filme { attribute string titulo; attribute integer ano; attribute integer comprimento; attribute enum Filme {cor, pretoBranco} tipoFilme; } • o quarto atributo é do tipo enumerado Filme, o qual é um conjunto com dois literais cor, pretoBranco interface Estrela { attribute string nome; attribute Struct Morada {string rua, string cidade} endereco; } • neste exemplo existe um atributo composto, mas sem referência
Associações • Representar as participações de estrelas em filmes • acrescenta uma linha a Filme com um conjunto (Set) de referências para Estrelas relationship Set<Estrela> estrelas; • ou acrescenta uma linha a Estrela, com uma referência para o Filme de que é a estrela principal relationship Set<Filme> filmes; Filme Estrela nome titulo morada ano rua comprimento cidade tipoFilme estrelas filmes
Associação inversa • é natural que se no objecto Jack Nicholson, no conjunto dos filmes constar o objecto Shinning, se espere ir encontrar no objecto Shinning uma referência ao Jack Nicholson • a manutenção da coerência em ambos os lados de uma associação pode ser feita automaticamente, desde que, numa classe, se indique qual o atributo que faz par na outra e é usado para garantir o inverso. interface Estrela { attribute string nome; attribute Struct Morada {string rua, string cidade} endereco; relationship Set<Filme> filmes inverse Filme::estrelas; } • em ODL, por ser abstracta, insiste-se na existência de inversa • permite percorrer os dados arbitrariamente nos vários sentidos • uma concretização numa linguagem OO, pode levar a só criar inversos em associações que o justifiquem.
Multiplicidade das associações • Muitos-para-muitos: é o caso da estrelas nos filmes; implementada com conjuntos de ambos os lados • Muitos-para-um: proprietário de um filme; implementada com um conjunto de um lado mais uma referência simples do outro interface Filme { 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;} interface Estudio { attribute string nome; attribute string endereco; relationship Set<Filme> possui inverse Filme::proprietario; } • Um-para-um: caso dos presidentes dos estúdios; implementada com uma referência simples quer de um lado quer do outro
Tipos em ODL • Tipos atómicos integer, float, character, string, boolean, enumeration • enumerações são listas de constantes vistas como sinónimos dos inteiros • Tipos interface na realidade são estruturas com componentes para os atributos e para as associações mas, uma vez definidos, podem também ser vistos como tipos base • Construtores de tipos • Set (conjunto) - sem repetidos e sem ordem {1, 2} • Bag (multiconjunto) - com repetidos e sem ordem {1,2,1}={2,1,1} • List (lista) - com repetidos e com ordem; string = List<char> (1,2,1) (2,1,1) • Array (vector) - com repetidos e com ordem, com dimensão definida; Array<char,10> denota as cadeias de caracteres de comprimento 10 • Struct (estrutura) - se T1, T2, …, Tn forem tipos e F1, F2, …, Fn nomes de campos Struct N{ T1 F1, T2 F2, …, Tn Fn } é uma estrutura • Colecções: Set, Bag, List, Array
Regras de uso dos tipos • Atributos - começam em tipos atómicos ou estruturas só com tipos atómicos e podem ser envolvidos por uma colecção (4 casos possíveis) • integer • Struct N {string campo1, integer campo2} • List<float> • Array<struct N {string campo1, integer campo2}> • Associações - tipo interface ou um tipo colecção aplicado a um tipo interface • possível: Filme; Bag<Estrelas> • impossível: • Struct N {Filme campo1, Estrela campo2} - envolve uma estrutura • Set<integer> - envolve só tipos atómicos • Set<Array<Estrela>> - envolve colecção de colecções
Princípios de projecto • Fidelidade às especificações • evitar a redundância • cada facto da realidade deve estar representado num único sítio no sistema • as relações inversas, se automaticamente mantidas, não implicam redundância • parcimónia e simplicidade • KISS (keep it simple, stupid) • escolha do elemento apropriado para representar a realidade • Declaração de chave (objectos continuam a ter identidade) • interface filme key( titulo, ano) {…}
Subclasses • por vezes ocorre que, numa dada classe, parte dos seus objectos tem, para além das características comuns a todos os outros, algumas propriedades específicas. Nesse caso faz sentido usar o conceito de subclasse. • Notação: pôr a seguir ao nome da classe a ser definida, dois pontos e respectiva superclasse interface Cartoon : Filme { relationship Set<Estrela> vozes; // inverse Estrela::personagensAnimação; } • a subclasse herda todas as propriedades de todos os que estão para cima na hierarquia • herança múltipla: se existir interface Policial : Filme {attribute string arma} interface Cartoon-policial : Cartoon, Policial {}; herda dos dois lados, mas para uma classe acessível por mais do que um caminho só herda uma vez (Filme que é superclasse duplamente)