1-ODL

Propaganda
II- Padrão ODMG
Object Definifion Language - ODL
II.1 O Modelo de
Objeto
Conceitos
Classe
Interface
Atributo
Relacionamento
Atributo
Assinatura de
Método
Chave
Assinatura de
Método
Repositório
Herança
Herança
Classe e Interface
• Toda classe é concreta
– Repositório
• Toda interface é abstrata
– Classe abstrata (UML)
Atributo Coleção
• Uma coleção pode ser set, bag, list, array
– Um conjunto (set) tem elementos desordenados,
e somente uma ocorrência de cada elemento
– Um bag permite mais de uma ocorrência de um
elemento, mas as ocorrências ainda são
desordenadas
– Uma lista (list) permite mais de uma ocorrência
de um elemento, mas as ocorrências são
ordenadas
– Um array é uma lista com tamanho máximo prédeterminado
Atributo Coleção
Ordem
Repetição Tamanho
Set
Bag

List


Array



Atributo Coleção
• {1, 2, 1} e {2, 1, 1} são um mesmo bag
• {1, 2, 1} e {2, 1, 1} não são a mesma
lista
Relacionamento
• Relacionamentos são entre classes e
binários
– Dois objetos de classes diferentes ou da
mesma classe são associados de alguma
forma
– Explicitamente representados por um
par de referências inversas
Relacionamento (2)
Método
• Somente assinatura de métodos (nome do
método, parâmetros, exceções) é conceito
do modelo
– O corpo de um método pode ser implementado
usando qualquer linguagem de programação OO
(Java, C++, PL/SQL etc)
• Métodos do tipo get_atributo()
(métodos observer) e do tipo
set_atributo() (métodos mutator) são
implicitamente definidos
Chave
• Uma classe pode ter uma ou mais
chaves (key(s))
• Uma chave pode também ser definida
por um relacionamento ou um método
– Um relacionamento ou um método podem
fazer parte de uma chave composta
Repositório
• A toda classe, deve ser definido um
repositório (extent)
Herança
• Uma classe pode herdar de uma única
classe (class extends class)
• Uma classe pode herdar de múltiplas
interfaces (class implements
interface)
• Uma forma limitada de herança
múltipla
–
Uma classe e várias interfaces
Herança (2)
Herança (3)
Omissões do Modelo
• Não tem o conceito de relacionamento
agregação / composição
• Não tem o conceito de relacionamento
ternário
• Não tem o conceito de método de classe
• Conceito limitado de herança múltipla
• Não tem o conceito de classe de associação
II.2 A Linguagem ODL
• Interface
interface Métodos_Filme
{
float duração_em_horas()
raises(duração não encontrada)
/* converte duração em min para duração em hh:min */;
nomes_estrelas(out Set<Estrela>)
/* retorna o conjunto das estrelas de um filme */;
nome_estúdio(out string)
raises (estúdio não encontrado)
/* retorna o nome do estúdio que realizou o filme */;
...
};
Classe
• Classes nativas
–
–
–
–
–
–
–
–
Integer
Float
String
Boolean
Date
Enumeration
Struct
Collection
Classe (2)
class Filme : Métodos_Filme
(extent Filmes key (título, ano))
{
attribute string título;
attribute integer ano;
attribute integer duração;
attribute enumeration Cor{colorido, preto-e-branco}
corfilme;
relationship Set<Estrela> estrelado_por
inverse Estrela::estrelou_em;
relationship Estúdio realizado_por inverse
Estúdio::realizou;
}
Classe (3)
• A classe Filme podia ter sido definida
sem a interface, isto é, com todos os
métodos definidos dentro da classe
Classe (4)
class Estrela : Métodos_Estrela
(extent Estrelas key nome)
{
attribute string nome;
attribute Struct
End {string rua, string cidade} endereço;
relationship Set<Filme> estrelou_em
inverse Filme::estrelado_por;
}
Classe (5)
class Estúdio : Métodos_Estúdio
(extent Estúdios key nome)
{
attribute string nome;
attribute Estrela::End endereço;
relationship Set<Filme> realizou inverse
Filme::realizado_por;
}
Classe (6)
• Pergunta: A estrutura End poderia
ser definida como uma interface?
Como?
Atributo Coleção
• Attribute Bag<tipo_do_elemento>
atrib
• Attribute List<tipo_do_elemento>
atrib
• Attribute Array<tipo_do_elem, N>
atrib
Atributo versus
Relacionamento
•
•
•
•
•
Attribute List<float> é legal
Relationship List<float> é ilegal
Attribute List<Filme> é ilegal
Relationship List<Filme> é legal
Relationship só pode envolver classe
definida pelo usuário (classe), por
exemplo Relationship List<Filme>
• Attribute só pode envolver classes
nativas
Relacionamento
Ternário?
Relacionamento
Ternário? (2)
• Definição da classe Contrato
Class Contrato
(extent Contratos key (o_filme, a_estrela,
o_estudio))
{
attribute float valor;
relationship Filme o_filme inverse …;
relationship Estrela a_estrela inverse …;
relationship Estudio o_estudio inverse …;
};
Relacionamento
Ternário? (3)
• Na classe Filme
Relationship Set<Contrato> contratos
inverse Contrato::o_filme;
Relacionamento
Ternário? (4)
• De um modo geral
– Suponha uma relacionamento ternário R
entre as classes C1, C2 e C3. Podemos
substituir R por uma classe C e 3
relacionamentos binários N:1 de C (N)
para cada uma das Ci (1). Os atributos
de C são os atributos do relacionamento
ternário. C também se relaciona com
cada Ci
Herança de Classe
class Des_Animado extends Filme
{...
relationship Set<Estrela> dublado_por;
...};
• Como interpretar o relacionamento
Des_Animado estrelado-por Estrela?
Herança de Classe /
Interface
• Class C2 : I1 : I2 : I3 extends C1
Regras de Integridade
• Chave. Dado o conjunto de atributoschave de uma classe, não pode haver
dois objetos da classe com o mesmo
valor da chave, e o valor da chave
deve ser obrigatoriamente informado,
quando da criação do objeto
Regras de Integridade
(2)
• Valor opcional. Todos os
atributos/relacionamentos de uma classe
que não são chave são opcionais, isto é,
seus valores não precisam ser
obrigatoriamente informados. Cabe aos
projetistas definir como indicar que o valor
de um atributo não é informado
– enumeration Cor{preto_e_branco, colorido, null}
corfilme
– integer duração /* um valor negativo informa
que a duração de um objeto da classe Filme não
é informada */
Regras de Integridade
(3)
• Par de Referências Inversas. Garante
que, se um objeto x de uma classe A
aponta para um objeto y de uma
classe B  A e B não
necessariamente diferentes  então
y aponta para x, e y não apontará
para nenhum objeto da classe A que
não aponte para ele. O par de
referências inversas permite a
correta navegação de A para B, e de
B para A
Regras de Integridade
(4)
• Integridade Referencial. A única
forma de garantir integridade
referencial é definindo pares de
referências inversas. A garantia é
restrita: se dois objetos apontam um
para o outro (ciclo), nenhum dos dois
pode ser destruído individualmente,
pois romperia o ciclo; a única
possibilidade é a destruição dos dois
‘ao mesmo tempo’ (dentro de uma
transação)
Regras de Integridade
(5)
• Integridade de domínio. Classes nativas e
classes definidas pelo usuário
• Regras Gerais. ODL não tem nada como
uma linguagem de definição de regras
gerais de integridade (por exemplo,
"salário maior que o mínimo", "um gerente
não pode ganhar menos que seus
subordinados", etc). As regras de
integridade devem ser embutidas, pelos
projetistas, nos corpos dos métodos
Exercícios
• Suponha que conceitualmente você
tem um array, mas o modelo lógico
objeto-relacional só oferece o tipo
tabela, que é um bag ou um conjunto.
Explique como você simularia o array
Exercícios (2)
• Dado um pedido de compra
Código
Cliente
Data_emissão Data_entrega
Linha Item Quantidade Total Parcial
xx
xxx
xx
xx.xxx,xx
xx
xxx
xx
xx.xxx,xx
...
xx
xxx
xx
xx.xxx,xx
Total Geral: xxx.xxx,xx
definir a classe ODL PedidoDeCompra
Exercícios (3)
• Descreva em ODL a classe
Empregado, com os atributos
matricula, nome, salario e gerente. A
classe deve ter obrigatoriamente um
método que encontra a matrícula, o
nome e o salário do gerente de um
empregado
Exercícios (4)
• Considere o seguinte diagrama
UML
Imagine que A é Fornecedor, B é Produto,
e Associação é Fornecimento. Descreva este
diagrama de classes em ODL. Este exercício serve
para mostrar que Classe Associação é um conceito
dispensável, ou não essencial
Exercícios (5)
• Crie uma classe-ODL, Calendário, fazendo
observar as particularidades dos
ambientes onde um calendário é aplicado.
Exemplos:
– Calendário comercial - Dias úteis: de segunda a
sexta, menos os feriados;
– Calendário hospitalar - Dias úteis: todos os
dias;
– Calendário escolar - de segunda a sexta, menos
os feriados, e eventualmente sábado; exceções:
todo o mês de janeiro e todo o mês de julho
Exercícios (6)
• Defina a classe Pessoa, incluindo a
árvore genealógica
Download