Modelo orientado por objectos
Download
Report
Transcript Modelo orientado por objectos
SGBDOO
Funções persistência
SGBD
transacções
controlo da concorrência
recuperação
pesquisa
versões
integridade
segurança
desempenho
Orientação
por objectos
Estratégias
novos modelo e linguagem de dados
estender linguagem BD com capacidades OO
estender uma LP OO com capacidades BD
fornecer bibliotecas OO com funções de SGBD
embeber construções de BDOO em linguagem hospedeira
produtos para domínios específicos suportados por SGBDOO
tipos de dados abstractos
herança
identidade dos objectos
SIM (Unysis)
Oracle, Informix, Ontos
Opal
ObjectStore, Ontos, Versant
O2
escritório inteligente
Modelo de objectos - 1
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
Modelo de objectos - 2
Tipos, classes e objectos
Exemplo: Banco
CLASS Conta= RECORDOF(
nr : inteiro;
balanço : real
titular : REF Cliente)
- 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}
CLASS Cliente= RECORDOF(
nc : inteiro;
nome : string;
contas : SETOF(Conta))
Conta
nr
balanço
titular Cliente
nc
nome
contas ...
...
...
Modelo de objectos - 3
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
Modelo de objectos - 4
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)]
•
objectos atómicos
conjunto
tuplo
tuplo hierárquico
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}]}
25, João, 1.3
{João, Maria, Susana}
[Nome:Pedro, Idade:25]
[Nome:[Próprio: João, Apelido:Costa],
Idade:25, Filhos: {Pedro, Paulo, Maria}]
Modelo de objectos - 5
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
Próprio
Apelido
Maria
Costa
Esposo
Endereço
Filhos
i
Cidade Rua
João
Braga
Nome
Próprio
João
Apelido
Costa
Esposo
Endereço
Filhos
i
Cidade Rua
Braga
António
António
Próprio
Próprio
Apelido
No
João
Costa
Direita 34
Joana
Apelido
No
Maria
Costa
Direita 34
Joana
Modelo de objectos - 6
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
i2
Próprio
João
Esposo
Nome
i101
Nome
Endereço
Filhos
Apelido
Costa
i3
i
i4
Cidade Rua No
Braga
Direita 34
Próprio
i102
Apelido
Maria
Costa
…
Modelo de objectos - 7
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
Modelo de objectos - 8
Estes objectos são iguais?
i1
nome
i2
próprio
João
próprio
filhos
i3 i
i4
apelido
Costa
cidade rua
i401
i301
Braga
i103 i
nome
i201
no
Direita 34
esposo
apelido
i102
esposo
endereço
filhos
i101
endereço
Pessoa1= i1
Pessoa2= i1
Pessoa3= i101
Filhos1= i3
Filhos2= i103
Pessoa1 = Pessoa2 ?
Pessoa1 = Pessoa3 ?
Filhos1 = Filhos2 ?
Claro
Profundamente; não superficialmente
Profundamente e superficialmente
Modelo de objectos - 9
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 - 10
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
Modelo de objectos - 11
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
IDL
IDL
IDL
que o modelo de objectos ODMG
fosse um superconjunto do modelo
de objectos OMG
CORBA
Modelo de objectos - 12
Linguagem de Definição de Objectos
em ODL o Mundo é constituído por objectos, com identidade,
agrupados em classes
uma classe agrupa objectos que
propriedades:
correspondem a conceitos do mundo real semelhantes
têm todos as mesmas 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>
}
Modelo de objectos - 13
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
Modelo de objectos - 14
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;
Estrela
nome
morada
rua
cidade
filmes
Filme
titulo
ano
comprimento
tipoFilme
estrelas
Modelo de objectos - 15
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.
Modelo de objectos - 16
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
Modelo de objectos - 17
Tipos em ODL
Tipos atómicos integer, float, character, string, boolean, enumeration
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
enumerações são listas de constantes vistas como sinónimos dos inteiros
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
Modelo de objectos - 18
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
Modelo de objectos - 19
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)
{…}
Modelo de objectos - 20
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)
Modelo de objectos - 21