Modelo de objectos 2

Propaganda
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 - 1
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 - 2
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 - 3
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 - 4
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 - 5
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 - 6
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 - 7
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 - 8
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 - 9
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 - 10
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 - 11
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 - 12
Exemplo dos Internamentos
Considere o seguinte esquema de uma BD de um hospital. O hospital
organiza-se em serviços, cada qual com a designação da respectiva
especialidade e o número de camas onde pode internar doentes. Os
doentes são pessoas adicionalmente descritas pelo organismo de
segurança social e respectivo número. Relativamente a cada
internamento, regista-se o momento de entrada no serviço, o motivo, o
respectivo momento de alta, o estado à saída e o médico responsável;
uma transferência de serviço corresponde a uma alta do primeiro em
simultâneo com um novo internamento no segundo. Os funcionários
são pessoas com um vencimento e o serviço a que estão adstritos. Os
médicos são funcionários com uma especialidade e os enfermeiros são
também funcionários com uma categoria e que pertencem a uma
equipa.

Obtenha o modelo de objectos (em ODL) da situação descrita.
Modelo de objectos - 13
Resolução
Object
Servico
Pessoa
Funcionario
Enfermeiro
Doente
*
Internamento
*
refere objecto
Medico
refere conjunto de internamentos (e de
funcionarios no caso dos Servicos)
subclasse
associação com atributo inverso
Equipa
*
associação sem manutenção automática
de atributo inverso (conjuntos têm os
correntes; Internamento os históricos)
Modelo de objectos - 14
Algumas classes
interface Servico {
attribute string designacao;
attribute int camas;
relationship Set<Funcionario> pessoal
inverse Funcionario::serviço;
relationship Set<Internamento> internados
}

a associação pessoal tem uma inversa na
classe de Funcionarios chamada serviço de
forma a garantir a consistência da sua
representação em ambas as classes, i.e.,
que se um funcionário indica a pertença a
um serviço, então esse serviço tem que o
referir como parte do seu pessoal (idem
para Internamento::internado)
interface Internamento {
relationship Doente internado inverse
Doente::internamentos;
attribute date entrada;
attribute date alta;
attribute string motivo;
attribute string estado;
relationship Servico servico;
relationship Medico medico;
}
 a associação Serviço::internados não tem
inversa; no conjunto só se incluem os
internamentos correntes; do lado dos
internamentos, mantém-se o registo
completo, incluindo o histórico, dos
internamentos, pelo que há referências a
objectos serviço sem que nestes existam as
correspondentes ligações a internamentos
(apagadas quando o doente teve alta)
Modelo de objectos - 15
Download