Capítulo 8: BDs Orientadas a Objectos. Necessidade de Tipos de Dados Complexos O Modelo de Dados Orientado para Objectos Linguagens Orientadas para Objectos Linguagens de Programação Persistentes Linguagem de definição de dados ODMG Linguagem de manipulação de dados ODMG. - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Os métodos são programas com as seguintes características: Só se podem usar (directamente) variáveis do próprio objecto
Dados noutros objectos só podem ser acedidos por envio de mensagens.
Os métodos podem ser read-only ou de actualização Métodos read-only não alteram o valor do objecto
Levado à regra, em bases de dados cada atributo duma entidade tem que ser representado por uma variável (que guarda o valor) e dois métodos (um para ler o valor, e outro para o alterar) e.g., o atributo morada é representado pela variável morada e
dois métodos get-morada e set-morada.
Para facilitar, muitos dos modelos de objectos permitem acesso directo às variáveis de outros objectos.
E.g., A classe dos clientes dum banco é semelhante à dos empregados do banco, embora hajam diferenças. Partilham algumas variáveis e mensagens, e.g., nome and morada.
Mas há variáveis e mensagens específicas a cada uma das classes e.g., salario (só) para empregados e limite_crédito (só) para clientes.
Todo o empregado é uma pessoa: empregados é uma especialização de pessoas
clientes é também uma especialização de pessoas.
Criar classes: pessoas, empregados e clientes Associam-se a pessoas as variáveis e mensagem aplicáveis quer a
empregados quer a clientes.
As variáveis/mensagens específicas de empregados associam-se directamente a essa classe; idem para clientes
Com herança múltipla, uma classe pode ter mais do que uma superclasse. A relação classe/subclasse é representada por um grafo dirigido acíclico
(DAG) Especialmente útil quando há objectos que podem ser definidos de formas
diversas, independentes entre si. E.g. temporário/permanente é independente de gerente/secretaria/caixa Criar uma subclasse para cada combinação
– Não é necessário criar subclasses para as combinações que não são possíveis nos dados a modelas
Cada classe herda as variáveis e métodos de todas as suas superclasses
Pode haver conflito (ambiguidade) quando uma variável/mensagem com o mesmo nome é herdada de duas superclasses distintas A e B Não há problema se a variável/mensagem tiver sido definida numa
superclasse comum a A e B Caso contrário:
flag assinalando erro, ou renomear variáveis (A.N e B.N), ou escolher uma delas.
Mais exemplos de Herança MúltiplaMais exemplos de Herança Múltipla
Conceptualmente, um objecto pode pertencer a várias subclasses de uma mesma classe E.g. uma pessoa pode ser simultaneamente cliente e empregado
do banco
Pode usar-se herança múltipla para modelizar “papéis” dum objecto
No entanto, muito sistemas obrigam a quem cada objecto esteja sempre associado a uma classe mais específica I.e. tem que haver uma classe à qual o objecto pertence que é
subclasse de todas as outras classes a que o objecto pertence
Criar subclasse, e.g. cliente_empregado, para estas combinações
Quando há muitas combinações possíveis, criar tantas subclasses pode ser difícil de gerir
Estes conceitos de objectos podem ser usados de diversas formas: Usar apenas como ferramenta na fase de design, e na
implementação usa-se, e.g., uma base de dados relacional
Semelhante ao uso que fizemos de diagramas ER (que depois se passavam para conjunto de relações)
Incorporar as noções de objectos no sistema que manipula a base de dados:
Linguagens persistentes – generalizam (com conceitos de persistência e colecções) linguagens de programação object-oriented para permitir lidar com bases de dados.
Sistemas objecto-relacional – adiciona tipos complexos e noções de objectos a linguagem relacional.
Permitem criar e armazenar objectos em bases de dados , e usá-los directamente a partir da linguagem de programação (object-oriented, claro!) Permite que os dados sejam manipulados directamente a partir do
programa
Programas em que os dados ficam de uma sessão para outra. sendo isto feito de forma transparente para o utilizador
Desvantagens: Dada a expressividade das linguagens, é fácil cair em erros (de
programação) que violam consistência dos dados.
Tornam muito difícil (senão impossível) optimização de pesquisas.
Não suportam formulação declarativa de perguntas (como acontece em bases de dados relacionais)
Há várias abordagens para tornar os objectos persistentes Persistência por Classe – declara-se que todos os objectos duma
classe são persistentes; simples mas inflexível.
Persistência por Criação – estender a sintaxe de criação de objectos, para se poder especificar se são ou não persistentes.
Persistência por Marcação – todo o objecto que se pretende que persista para além da execução do programa, é marcado antes do programa terminar.
Persistência por Reachability – declara-se uma raiz de objectos persistentes; os objectos que persistem são aqueles que se conseguem atingir (directa ou indirectamente) a partir dessa raiz.
Facilita a vida ao programador, mas põe um overhead grande na base de dados
A cada objecto persistente é associado um identificador.
Há vários níveis de permanência da identidade de objectos: Intraprocedure – a identidade persiste apenas durante a
execução dum procedimento
Intraprogram – a identidade persiste apenas durante a execução dum programa ou pergunta.
Interprogram – a identidade persiste duma execução dum programa para outra, mas pode mudar se a forma de armazenar os dados for alterada
Persistente – a identidade persiste entre execuções de programas e entre reorganizações de dados; esta é o nível necessário para sistemas de bases de dados de objectos.
O C++ permite que se adicione suporte para objectos persistentes, sem alterar a linguagem Declarar uma classe Persistent_Object com atributos e métodos de
suporte a persistência
Usar overloading para redefinir funções e operadores standard
Template classes ajudam a construir um sistemas de tipos de suporte a colecções e tipos persistentes.
Suporte a persistência sem estender a linguagem C++ é fácil de implementar
complexo de usar
Há sistemas C++ Persistentes já definidos e implementados
Linguagem de Definição de Objectos (ODL) da Linguagem de Definição de Objectos (ODL) da ODMGODMG
Object Database Management Group: consórcio industrial que definiu definir standards para bases de dados orientadas para objectos Standards de linguagens de programação persistentes
Inclui standards para C++, Smalltalk e Java
ODMG-93
ODMG-2.0 e 3.0 (extensão do 2.0 para Java)
O standard ODMG C++ não altera a linguagem C++ Fornece funcionalidade para persistência via template classes e
Linguagem de Manipulação de Objecto (OML) Linguagem de Manipulação de Objecto (OML) ODMG C++ODMG C++
Usa versões persistentes de operadores C++
d_Ref<Account> account = new(bank_db, “Account”) Account; Guarda o objecto na base de dados, em vez de na memória.
O segundo argumento (“Account”) denota o nome usado na base de dados.
O operador -> quando aplicado a d_Ref<Account> começa por carregar o objecto em memória (se não estiver já lá) antes de aplicar a desreferenciação usual do C++.