03 principais conceitos da MOO

Propaganda
Orientação a Objetos
Edson Emílio Scalabrin
[email protected]
Telefone: 0xx-41-271-1746
Ementa
Linguagem UML:




Modelagem de casos de uso
Diagrama de classes
Organização de classes em pacotes
Diagramas:

27/05/03
Estados, seqüência, colaboração, atividades,
componentes e implantação (“deployment”)
Edson Scalabrin & Alcides Calsavara
2
Conceitos fundamentais








Objeto
Identidade
Sistema Orientado a Objetos
Encapsulamento
Classificação/Instanciação
Generalização/Especialização
Herança
Polimorfismo
27/05/03
Edson Scalabrin & Alcides Calsavara
3
Identidade
 Característica peculiar de um objeto que
denota a existência em separado do objeto,
mesmo que ele tenha os mesmos valores de
atributos de outro objeto
 Uma identificação única de cada objeto
27/05/03
Edson Scalabrin & Alcides Calsavara
4
Sistema Orientado a Objetos
 Um sistema orientado a objetos é uma
coleção de objetos que interagem entre si.
 Um objeto interage com outro através de
uma mensagem que causa um estímulo.
27/05/03
Edson Scalabrin & Alcides Calsavara
5
Interação entre Objetos
27/05/03
Edson Scalabrin & Alcides Calsavara
6
Objeto
 Um conceito, uma abstração, algo com limites e
significados definidos para o problema em questão
 Um objeto do mundo real
 Uma instância de uma classe
 Um objeto possui um comportamento e um estado:


27/05/03
o comportamento é forma como reage a estímulos
o estado modifica-se de acordo com o comportamento
Edson Scalabrin & Alcides Calsavara
7
Encapsulamento
 Técnica de modelagem e implementação que
separa os aspectos externos de um objeto
dos detalhes internos de implementação do
mesmo objeto
 O estado de um objeto somente é acessível a
partir da implementação de seu
comportamento
27/05/03
Edson Scalabrin & Alcides Calsavara
8
Comportamento e Estado
27/05/03
Edson Scalabrin & Alcides Calsavara
9
Guarantia de Encapsulamento
27/05/03
Edson Scalabrin & Alcides Calsavara
10
Comportamento
 O comportamento de um objeto é definido
por um conjunto de métodos
 Um estímulo causa a execução de um
método
 Um estímulo pode ser uma invocação
explícita de um método ou um evento
relevante para o objeto
27/05/03
Edson Scalabrin & Alcides Calsavara
11
Execução de Métodos
invocação
evento
e
m()
m()
27/05/03
m()
Edson Scalabrin & Alcides Calsavara
12
Estado
 O estado de um objeto é composto por um
conjunto de valores de atributos
27/05/03
Edson Scalabrin & Alcides Calsavara
13
Classe
 Uma classe descreve um conjunto de objetos:
as instâncias da classe
 Uma classe descreve o comportamento e a
composição do estado de todos os seus
objetos
 Cada classe deve ter um nome distinto
27/05/03
Edson Scalabrin & Alcides Calsavara
14
Classes e Objetos
27/05/03
Edson Scalabrin & Alcides Calsavara
15
Tipos
 Um tipo pode ser primitivo ou uma classe
 Uma classe é um tipo abstrato de dados
(ADT)
27/05/03
Edson Scalabrin & Alcides Calsavara
16
Tipos Primitivos em Java
 Os tipos primitivos incluem:




27/05/03
números inteiros: byte, short, int, long
números reais: float, double
valores lógicos: boolean
caracteres: char
Edson Scalabrin & Alcides Calsavara
17
Classes de Bibliotecas
 Exemplos:




27/05/03
String
Applet
Button
System
Edson Scalabrin & Alcides Calsavara
18
Método
 Cada método possui uma assinatura, um
tipo de retorno (primitivo ou classe) e uma
implementação
 A assinatura de um método é composta por
um nome e uma lista de parâmetros
 Cada parâmetro tem um nome e um tipo
(primitivo ou classe)
27/05/03
Edson Scalabrin & Alcides Calsavara
19
Atributo
 Cada atributo tem um nome e um tipo
(primitivo ou classe)
 Um objeto que possui um atributo cujo tipo é
uma classe é um objeto composto, pois
contém outro objeto
27/05/03
Edson Scalabrin & Alcides Calsavara
20
Atributos em
Classes e Objetos
A
boolean b
int k
B
int x
String s
x =10
b=true
k=7
27/05/03
s=
char[] v
v=Paris
Edson Scalabrin & Alcides Calsavara
String
21
Visibilidade e Encapsulamento
 Um atributo deve preferencialmente ser
qualificado como privado (private)
 Um método pode ser tanto qualificado como
privado como público (public)
 O conjunto de métodos públicos de uma
classe define a sua inteface
27/05/03
Edson Scalabrin & Alcides Calsavara
22
Estrutura de uma Classe
 Uma classe contém um conjunto de atributos
e um conjunto de métodos


os atributos devem ter nomes distintos
os métodos devem ter assinaturas distintas
 Cada objeto possui um conjunto próprio de
valores dos atributos e o conjunto de métodos
da classe
27/05/03
Edson Scalabrin & Alcides Calsavara
23
Classe e Encapsulamento
 Os valores dos atributos de um objeto
somente são acessíveis a partir dos seus
métodos
27/05/03
Edson Scalabrin & Alcides Calsavara
24
Exemplo
 Um veículo possui um código, um hodômetro, um
cronômetro e um relógio.
 O hodômetro registra a kilometragem do veículo, e
pode ser zerado a qualquer momento.
 O hodômetro exibe a kilometragem atual e a média
de kilômetros por segundo, desde o último instante
em que foi zerado
 A kilometragem registrada pelo hodômetro avança
a medida que o veículo avança.
27/05/03
Edson Scalabrin & Alcides Calsavara
25
Exemplo (cont.)
 O cronômetro já fica ativo no momento da sua
criação.
 O cronômetro pode ser parado e reativado a
qualquer instante.
 O cronômetro exibe o número de milisegundos
decorridos desde o instante da sua última ativação.
 O relógio exibe a hora atual, com precisão de
minutos.
27/05/03
Edson Scalabrin & Alcides Calsavara
26
:Veículo
:Hodometro
codigo = 13
hodometro
cronometro
relogio
kilometragem = 283
momentoZeragem
relogio
avance(distancia : int)
exiba()
comeceCronometro()
pareCronometro()
zereCronometro()
zereHodometro()
Veiculo(c : int)
“main”
zere()
kilometragemMedia() : double
avance(distancia : int)
exiba()
Hodometro(r : Relogio)
:Instante
T
diferenca(i : Instante) : int
digaHoras() : int
digaMinutos() : int
:Cronometro
:Relogio
exiba()
digaInstante() : Instante
ativo = true
momentoInicio
momentoParada
relogio
comece()
pare()
exiba()
Cronometro(r : Relogio)
:Date
:Instante
:Date
T
diferenca(i : Instante) : int
digaHoras() : int
digaMinutos() : int
:Instante
:Date
T
diferenca(i : Instante) : int
digaHoras() : int
digaMinutos() : int
Representação de Objetos (usando UML)
27/05/03
Edson Scalabrin & Alcides Calsavara
27
Exemplo de classe em UML
Nome da
classe
Atributos +
tipos
Métodos
27/05/03
MOTO
Marca:
cor:
estado:
String
String
boolean
ligaMotor(),
mostraAtributos()
Edson Scalabrin & Alcides Calsavara
28
Exemplo de classe definida em
Java
class MOTO{
private String marca, cor; boolean estadoMotor;
void ligaMotor() {
if (estadoMotor == true)
System.out.println(“O motor já esta ligado”);
else {
estadoMotor = true;
System.out.println(“Agora o motor já esta ligado”);
}
} // fim do método ligaMotor
void mostraAtributos() {
System.out.println(“Cor: “ + cor+ “ Marca: “ + marca +
“Estado: “ + estadoMotor);
}
27/05/03
Edson Scalabrin & Alcides Calsavara
29
Exemplo de classe definida em
Java (continuação)
class MOTO{
. . .
public static void main ( String args[] ){
MOTO m = new MOTO();
m.marca = “Yamaha RZ350”;
m.cor = “amarela”;
m.mostraAtributos();
m.ligaMotor();
m.mostraAtributos();
m.ligaMotor();
} // fim do método main
} // fim da classe MOTO
27/05/03
Edson Scalabrin & Alcides Calsavara
30
Generalização
 Relacionamento entre uma classe e uma ou mais
versões refinadas ou especializadas da classe
 Especialização: relacionamento inverso
 Superclasse: versão mais abstrata de outra
classe, a subclasse
 Subclasse: versão mais refinada de outra classe,
a superclasse
27/05/03
Edson Scalabrin & Alcides Calsavara
31
Herança
 Mecanismo baseado em objetos que permite
que as classes compartilhem atributos e
operações baseados em um relacionamento,
geralmente generalização
 Uma subclasse herda atributos e métodos da
superclasse
27/05/03
Edson Scalabrin & Alcides Calsavara
32
Polimorfismo
 Assume muitas formas
 A propriedade segundo a qual uma operação
(método) pode comportar-se diferentemente em
classes diferentes
 A subclasse redefine a implementação de um método
herdado da superclasse
 Onde se espera uma instância de um certa classe
pode aparecer uma instância de qualquer subclasse
daquela classe
27/05/03
Edson Scalabrin & Alcides Calsavara
33
Exemplo de
herança e polimorfismo
BOTÃO
Estado: boolean
cor:
Cores
x:
int
y:
int
desenhe(), aperte(),
desaperte(),
pegaEstado(),
mova(float x1, float x2)
BOTÃO QUADRADO
BOTÃO REDONDO
diagonal : int
raio : int
desenhe()
desenhe()
27/05/03
Edson Scalabrin & Alcides Calsavara
34
Implantação da classe Botão
class Botao
public void aperte()
{estado = true; }
public void desaperte()
{estado = false; }
public boolean pegaEstado()
{ return estado; }
public void desenhe()
{}
public void mova( float x1,
float y1)
{ x = x1; y = y1; }
{
boolean estado;
int cor;
float x, y;
public Botao(int cor)
{
estado = true;
this.cor = cor;
x = y = 0;
}
27/05/03
}
Edson Scalabrin & Alcides Calsavara
35
Implantação da classe
Botão Quadrado
class BotaoQuadrado extends Botao
{
float diagonal;
public BotaoQuadrado(int cor, float dia){
super( cor );
diagonal = dia;
}
public void desenhe(){
System.out.println("Desenhe Botão Quadrado");
}
}
27/05/03
Edson Scalabrin & Alcides Calsavara
36
Implantação da classe
Botão Redondo
class BotaoRedondo extends Botao
{
float raio;
public BotaoRedondo(int cor, float r){
super( cor );
raio = r;
}
public void desenhe(){
System.out.println("Desenhe Botão Redondo");
}
}
27/05/03
Edson Scalabrin & Alcides Calsavara
37
Implantação da classe Janela
class Janela
{
public static void main( String args[] )
{
BotaoQuadrado bq = new BotaoQuadrado(1, (float)4.5);
bq.desenhe();
BotaoRedondo br = new BotaoRedondo(1, (float)5.0);
br.desenhe();
}
}
27/05/03
Edson Scalabrin & Alcides Calsavara
38
Exercício
(Aparelho de troca de calor)
nome = E302
fabricante = Brown
peso = 5000 kg
preço = $20000
área da superfície diâmetro do tubo = 2 cm
comprimento do tubo = 6 m
pressão do tubo = 15 atm
pressão da concha = 1,7 atm
(Tanque de teto flutuante)
nome = T111
fabricante = Simplex
peso = 10000 kg
preço = $50000
volume = 400000 L
pressão = 1,1 atm
diâmetro = 8 m
(Bomba de diafragma)
altura = 9m
nome = P101
fabricante = Simplex
peso = 100 kg
preço = $5000
Escreva um diagrama de classes
pressão de sucção = 1,1 atm
para estas 3 (três) instâncias. Não é
presssão de descarga = 3,3 atm
necessário incluir métodos.
taxa de fluxo = 300 I/h
material do diafragma = Teflon
27/05/03
Edson Scalabrin & Alcides Calsavara
39
Notação:
Multiplicidade e Ordenação
UML
OMT
Classe A
Classe A
1
Classe A
Classe A
0..*
Classe A
Classe A
0..1
Classe A
1+
Classe A
1..*
Classe A
2-5,10
Classe A
2-5,10
Classe A
27/05/03
{ordenado}
Classe A
Edson Scalabrin & Alcides Calsavara
0..* {ordenado}
40
Ligação
 Uma conexão física ou conceitual entre objetos
 Exemplo: O país Brasil tem como capital a cidade
de Brasília.
 Exemplo: O funcionário João trabalha na empresa
Transamérica S.A.
 Exemplo: O artigo “OO Solutions” foi publicado na
conferencia OOPSLA’99.
27/05/03
Edson Scalabrin & Alcides Calsavara
41
Associação
 Relacionamento entre instâncias de duas ou mais
classes descrevendo um grupo de ligações com
estrutura e semântica comuns.
 Exemplo: Um país tem como capital uma cidade.
 Exemplo: Um funcionário trabalha numa empresa.
27/05/03
Edson Scalabrin & Alcides Calsavara
42
Agregação
 Forma especial de associação, entre o todo e suas
partes, na qual o todo é composto pelas partes
 Também chamada de herança horizontal
 Exemplo: Um artigo é publicado em uma
conferência, isto é, o artigo faz parte da conferência
(ou dos anais da conferência).
27/05/03
Edson Scalabrin & Alcides Calsavara
43
Multiplicidade e Papel
 Multiplicidade: Número de instâncias de
uma classe que podem se relacionar a uma
única instância de um classe associada (ou
agregada).
 Papel: nome que identifica inequivocamente
uma extremidade de uma associação.
27/05/03
Edson Scalabrin & Alcides Calsavara
44
Classe Pessoa
Diagrama de instâncias
Cônjuge
(Pessoa) mãe
uma avó
filho
(Pessoa)
uma tia
Irmão
27/05/03
filho
(Pessoa)
seu pai
Cônjuge
pai
filho
mãe
filho
(Pessoa)
um primo
(Pessoa)
um avô
pai
Primo
(Pessoa)
sua mãe
mãe
(Pessoa) filho
você
Edson Scalabrin & Alcides Calsavara
45
Atributo de Ligação
 Um valor de dados presente em cada ligação (nível
de instâncias) de uma associação (nível de classes)
 Uma propriedade da ligação entre objetos, e não dos
objetos ligados, propriamente ditos
 Exemplos: permissão de acesso que um usuário
possui para a um arquivo; o salário de uma pessoa
em um emprego em uma companhia
27/05/03
Edson Scalabrin & Alcides Calsavara
46
Atributo de Ligação
Exemplo: Muitos para Muitos
Arquivo
String : nome
Acessível por
Usuário
String : nome
Integer : permissão
/etc/termcap
/etc/termcap
/usr/doe/.login
27/05/03
( leitura )
( leitura-escrita )
( leitura-escrita )
Edson Scalabrin & Alcides Calsavara
John Doe
Mary Brown
John Doe
47
Atributo de Ligação
Exemplo: Um para Muitos
Pessoa
String : nome
String : telefone
Trabalha-para
Empresa
String : nome
String : endereço
chefe
Float : salário
String : cargo
trabalhador
Gerencia
Float : desempenho
27/05/03
Edson Scalabrin & Alcides Calsavara
48
Associação como uma Classe
 Cada ligação de uma associação é uma instância de
uma classe
 Uma ligação é um objeto, com atributos e métodos
 Útil quando ligações podem participar em
associações com outros objetos
 Útil quando ligações sofrem operações
 Exemplo: autorização para usuários em estações de
trabalho
27/05/03
Edson Scalabrin & Alcides Calsavara
49
Associação como uma Classe
Exemplo
Pessoa
String : nome
String : telefone
Estação Trabalho
String : IP
Autorizado
Usuário
Integer : prioridade
Integer : privilégios
IniciarSessao() : void
Diretório
String : nome
Diretório
básico
27/05/03
Edson Scalabrin & Alcides Calsavara
50
Associação Ternária
 Representa ligações entre 3 objetos
 Não pode ser dividida em associações binárias
sem que haja perda de informações
 Associações de grau maior que 3 são raras e
devem ser evitadas devido a complexidade de
entendimento e implementação
 Exemplo: pessoas que são programadoras usam
linguagens de programação em projetos
27/05/03
Edson Scalabrin & Alcides Calsavara
51
Associação Ternária + Papel
Pessoa
String : nome comprador
String : telefone 1
Veículo
objeto String : marca
1. .*String : cor
vendedor 1
Concessionária
String : nome
String : endereço
27/05/03
Edson Scalabrin & Alcides Calsavara
Compra
Data : data
52
Associação Ternária + Papel
Pessoa
vendedor
String : nome
String : telefone 1
Veículo
objeto String : marca
1. .* String : cor
comprador 1
Concessionária
String : nome
String : endereço
27/05/03
Edson Scalabrin & Alcides Calsavara
Venda
Data : data
53
Exercício
Pessoa
nome : String
idade : Int
ID empregador 1 : ?
ID empregador 2 : ?
ID empregador 3 : ?
endereço : String
ID Pessoa : ?
Carro
ID proprietário : ?
ID carro : ?
tipo proprietário : ?
modelo : String
ano : Int
Empréstimo
ID proprietário : ?
ID cliente : ?
número de conta : Int
ID banco : ?
juro : Real
saldo atual : Real
tipo proprietário : ?
Empresa
nome : String
ID Empresa : ?
Banco
nome : String
ID banco : ?
Estas classes possuem atributos que são ponteiros para outras classes de objetos.
Estes ponteiros podem ser substituídos por associações. Considerando que:
• cada pessoa pode ter até três empregos em empresas diferentes.
• cada pessoa, carro, empresa e banco possui o seu próprio identificador (ID).
• o proprietário de um carro pode ser: uma pessoa, uma empresa ou um banco.
• em um empréstimo, o carro é o objeto penhorado (ou comprado).
Prepare um diagrama de classes, onde os ponteiros são substituídos por relações.
Pode haver a necessidade de acrescentar uma ou mais classes. Elimine todos os ID.
Certos atributos podem ser transformados em discriminantes *.
* Um discriminante é um atributo do tipo enumeração que indica que uma propriedade de
um objeto tornou-se abstrata através de uma relação de generalização.
27/05/03
Edson Scalabrin & Alcides Calsavara
54
Ordenação em Associações
 Em alguns casos o conjunto de objetos associados a
um certo objeto apresenta uma ordem
 A palavra "ordenado" deve aparecer junto à
multiplicade "muitos" de uma associação para
indicar que existe uma ordem entre os objetos
ligados
 Exemplos: as janelas visíveis em uma tela possuem
uma ordem; os vértices de um polígono
27/05/03
Edson Scalabrin & Alcides Calsavara
55
Exercício
(Ponto)
-10
10
Tem
Tem
(Ponto)
10
10
(Polígono)
(Ponto)
-10
-10
Tem
Tem
(Ponto)
10
-10
• Prepare um diagrama de classes a partir do diagrama de instâncias em
questão. Explique suas decisões de multiplicidade. Cada ponto tem uma
coordenada x e uma coordenada y. Qual é o menor número de pontos
necessários para a construção de um polígono? Faz alguma diferença se
um ponta pode ou não ser compartilhado por diversos polígonos? Como
você pode expressar o fato de que os pontos estão em seqüência?
27/05/03
Edson Scalabrin & Alcides Calsavara
56
Exercício
(Ponto)
-10
10
próximo
(Ponto)
-10
-10
(Ponto)
10
10
próximo
último
(Polígono)
primeiro
próximo
(Ponto)
10
-10
próximo
• Prepare um diagrama de classes e implemente-o (numa linguagem de
programação de computadores orienta a objetos) a partir do diagrama de
instâncias da figura acima. Explique suas decisões de multiplicidade. Como
o seu diagrama expressa o fato de que os pontos estão em seqüência?
27/05/03
Edson Scalabrin & Alcides Calsavara
57
Uso de Agregação




Na dúvida, use associação!
Herança não representa o relacionamento parte-todo
Agregados recursivos são freqüentes
Agregação normalmente implica em propagação de
operações
27/05/03
Edson Scalabrin & Alcides Calsavara
58
Uso de Agregação
Exemplo
Pessoa
Possui
cópia
cópia
Documento
Parágrafo
Sentença
cópia() : void
cópia() : void
cópia() : void
Efeito: Propagação de operação
27/05/03
Edson Scalabrin & Alcides Calsavara
59
Uso de Agregação
Exemplo
Microcomputador
Monitor
Chassis
27/05/03
Caixa do Sistema
C.P.U
Mouse
R.A.M
Edson Scalabrin & Alcides Calsavara
Teclado
Ventoinha
60
Uso de Agregação
Exercício
 Prepare um diagrama de classes a partir do diagrama de
instâncias de um documento geométrico mostrado na
seqüência. Esse documento tem 4 páginas. A primeira
página tem um ponto vermelho e um quadrado amarelo
desenhados nela. A segunda página contém uma linha e
uma elipse. Um arco, um círculo e um retângulo
aparecem nas duas últimas páginas. Ao preparar seu
diagrama, utilize exatamente um relacionamento de
agregação e um ou mais relacionamentos de
generalização
27/05/03
Edson Scalabrin & Alcides Calsavara
61
Uso de Agregação
Exercício
(Ponto)
dimensões = 0
cor = vermelho
posição = (5,4)
(Página)
N. página = 1
(Quadrado)
dimensões = 2
cor = amarelo
posição = (54,88)
orientação = 22 graus
largura = 10
altura = 10
27/05/03
(Linha)
dimensões = 1
cor = azul
posição = (12,9)
orientação = 36 graus
comprimento = 7
(Página)
N. página = 2
(Arco)
dimensões = 1
cor = verde
posição = (25,36)
orientação = 45 graus
diâmetro = 13
(Página)
N. página = 3
(Elipse)
dimensões = 2
cor = marrom
posição = (-300,49)
orientação = 0 graus
largura = 100
altura = 50
Edson Scalabrin & Alcides Calsavara
(Círculo)
dimensões = 2
cor = laranja
posição = (10,78)
largura = 5
altura = 5
(Página)
N. página = 4
(Retângulo)
dimensões = 2
cor = azul
posição = (102,158)
orientação = 30 graus
largura = 5
altura = 10
62
Classes Abstratas e Concretas
 Classe abstrata: classe que não pode ter
instâncias diretas, mas cujos descendentes sim;
organizam características comuns a diversas
classes; mecanismo para reutilizar código; pode
definir operações abstratas (sem um
correspondente método)
 Classe concreta: classe que pode ter instâncias
diretas; não pode definir operações abstratas
27/05/03
Edson Scalabrin & Alcides Calsavara
63
Cancelamento para extensão
 A nova operação é igual à operação herdada,
exceto pelo fato de acrescentar alguns
detalhes de comportamento, normalmente
afetando novos atributos da subclasse.
27/05/03
Edson Scalabrin & Alcides Calsavara
64
Cancelamento para restrição
 A nova operação restringe o protocolo
(assinatura da operação), podendo reduzir os
tipos de argumentos.
 A operação herdada fica fechada (restrita)
dentro de cada subclasse específica.
27/05/03
Edson Scalabrin & Alcides Calsavara
65
Cancelamento para otimização
 O novo método tem o mesmo protocolo
externo e apresenta o mesmos resultados
 A implementação do novo método (algoritmo
utilizado) pode ser completamente diferente
27/05/03
Edson Scalabrin & Alcides Calsavara
66
Herança Múltipla
 Uma classe possui mais de uma subclasse e herda
características de todos os seus ancestrais
 Maior capacidade de especificação de classes
 Maior oportunidade de reutilização
 Perda em simplicidade conceitual e de
implementação
 Surgem classes de junção
27/05/03
Edson Scalabrin & Alcides Calsavara
67
Exercício
Automóvel
Cor
Número de passageiros
Velocidade máxima
Peso máximo
Número de portas
Entrar passageiro
Sair passageiro
Utilitário
Cor
Número de passageiros
Velocidade máxima
Peso máximo
Volume
Número de portas
Entrar passageiro
Sair passageiro
Carregar
Descarregar
Caminhão
Cor
Velocidade máxima
Peso máximo
Volume
Número de portas
Número de eixos
Carregar
Descarregar
Faça um diagrama de classes que represente estes veículos.
27/05/03
Edson Scalabrin & Alcides Calsavara
68
Mapeamento
Classes, Instâncias vs. Tabelas, Ocorrências
27/05/03
Edson Scalabrin & Alcides
Calsavara
69
Mapeamento de classes de objetos em tabelas
 Cada classe é mapeada em uma ou mais tabelas (uma tabela
também pode corresponder a mais de uma classe).
 Ex. A classe Pessoa com os atributos:
nome da pessoa e endereço
 O modelo de tabelas listas esses atributos e acrescenta IDs.
27/05/03
Edson Scalabrin & Alcides Calsavara
70
Mapeamento de classes de objetos em tabelas
Partição horizontal e vertical de tabelas
Horizontal
ID-da-pessoa
1
5
nome-da-pessoa
José da Silva
Paula Pires
endereço
Rua XV, 1247
Rua 24 Maio, 2
ID-da-pessoa
999
nome-da-pessoa
João Antunes
endereço
Rua 13 Maio, 9
vertical
ID-da-pessoa
1
5
999
27/05/03
nome-da-pessoa
José da Silva
Paula Pires
João Antunes
ID-da-pessoa
1
5
999
Edson Scalabrin & Alcides Calsavara
endereço
Rua XV, 1247
Rua 24 Maio, 2
Rua 13 Maio, 9
71
Mapeamento de classes de objetos em tabelas
Modelo de
Objetos
Modelo de
Tabelas
Pessoa
nome da pessoa
endereço
Nome do atributo
ID-da-pessoa
nome-da-pessoa
endereço
Nulos?
N
N
S
Domínio
ID
nome
endereço
Chave candidata: (ID-da-pessoa), Chave primária: (ID-da-pessoa)
Acessado freqüentemente: (ID-da-pessoa)(nome-da-pessoa)
Código
SQL
27/05/03
CREATE TABLE Pessoa (ID-de-pessoa ID
not null,
nome-da-pessoa char ( 30 ) not null,
endereço
char ( 30 )
,
PRIMARY KEY (ID-de-pessoa));
CREATE SECONDARY INDEX Indice-nome da pessoa
ON Pessoa (nome-da-pessoa);
Edson Scalabrin & Alcides Calsavara
72
Mapeamento de classes de objetos em
tabelas: Binária
Modelo de
Objetos
Empresa
nome
endereço
Nome do atributo
ID-da-pessoa
nome-da-pessoa
endereço
Modelo de
Tabelas
Possui-estoque
número de ações
Nulos?
N
N
S
Pessoa
nome
endereço
Domínio
ID
nome
endereço
Chave candidata: (ID-da-pessoa), Chave primária: (ID-da-pessoa)
Acessado freqüentemente: (ID-da-pessoa)(nome-da-pessoa)
Nome do atributo
Nulos?
Domínio
ID-da-empresa
N
ID
nome-da-empresa N
nome
endereço
S
endereço
Chave candidata: (ID-da-empresa), Chave primária: (ID-da-empresa)
Acessado freqüentemente: (ID-da-empresa)(nome-da-empresa)
27/05/03
Edson Scalabrin & Alcides Calsavara
73
Mapeamento de classes de objetos em
tabelas: Binária e M:N
Código
SQL
CREATE TABLE Possui-ações
(ID-de-empresa
ID
not null,
ID-de-pessoa
ID
not null,
número-de-ações integer
,
endereço
char ( 30 )
,
PRIMARY KEY (ID-da-empresa, ID-de-pessoa),
FOREIGN KEY (ID-da-empresa) REFERENCES Empresa,
FOREIGN KEY (ID-da-pessoa) REFERENCES pessoa));
CREATE SECONDARY INDEX índice-empresa-possui-ações
ON Possui-ações (ID-da-empresa);
CREATE SECONDARY INDEX índice-possui-possui-ações
ON Possui-ações (ID-da-pessoa);
27/05/03
Edson Scalabrin & Alcides Calsavara
74
Mapeamento de classes de objetos em tabelas:
Ternária
Modelo de
Objetos
Equipe
Pessoa
nome
endereço
Lançador
Ano
ano
vitórias
derrotas
Chave candidata: (ID-do-lançador, ID-da-equipe, ID-do-ano)
Modelo de Tabelas
Nome do atributo
ID-do-lançador
ID-da-equipe
ID-do-ano
vitórias
derrotas
27/05/03
Nulos?
N
N
N
Y
Y
Domínio
ID
ID
ID
jogos
jogos
Chave candidata: (ID-da-lançador,
ID-da-equipe, ID-do-ano),
Chave primária: (ID-da-lançador,
ID-da-equipe, ID-do-ano),
Acessado freqüentemente:
(ID-do-lançador)(ID-da-equipe)
(ID-do-ano)
Edson Scalabrin & Alcides Calsavara
75
Mapeamento de classes de objetos em tabelas:
Ternária
Criar as tabelas para Equipes, Pessoa e Ano
...
Código
SQL
CREATE TABLE Pessoa-Equipe-Ano-ternária
(ID-do-lançador
ID
not null,
ID-da-equipe
ID
not null,
ID-da-ano
ID
not null,
vitórias
inteiro
,
derrotas
inteiro
,
PRIMARY KEY (ID-do-lançador, ID-da-equipe, ID-do-ano),
FOREIGN KEY (ID-do-lançador) REFERENCES Pessoa,
FOREIGN KEY (ID-da-equipe) REFERENCES Equipe));
FOREIGN KEY (ID-do-ano) REFERENCES Ano));
Criar também os índices . . .
27/05/03
Edson Scalabrin & Alcides Calsavara
76
Modelo de tabelas para a generalização
Modelo de
Objetos
Equipamento
nome do equipamento
preço
Bomba
pressão de sucção
pressão de descarga
27/05/03
Dissipador de calor
Área da superfície
Edson Scalabrin & Alcides Calsavara
77
Modelo de tabelas para a generalização
Modelo de Tabelas
(Equipamento, Bomba, Dissipador de Calor)
Nome do atributo
ID-do-equipamento
nome-do-equipamento
preço
tipo-do-equipamento
Nulos?
N
N
Y
N
Chave candidata:
Chave primária:
Acessado freqüentemente:
27/05/03
Domínio
ID
nome
dinheiro
tipo-de-equipamento
(ID-do-equipamento) (nome-do-equipamento)
(ID-do-equipamento)
(ID-do-equipamento) (nome-do-equipamento)
Edson Scalabrin & Alcides Calsavara
78
Modelo de tabelas para a generalização
Bomba
Nome do atributo
ID-do-equipamento
pressão-de-sucção
pressão-de-descarga
Nulos?
N
Y
Y
Domínio
ID
pressão
pressão
Chave candidata:
(ID-do-equipamento)
Chave primária:
(ID-do-equipamento)
Acessado freqüentemente: (ID-do-equipamento)
Dissipador de calor
Nome do atributo
ID-do-equipamento
área-da-superfície
Nulos?
N
Y
Domínio
ID
área
Chave candidata:
(ID-do-equipamento)
Chave primária:
(ID-do-equipamento)
Acessado freqüentemente: (ID-do-equipamento)
27/05/03
Edson Scalabrin & Alcides Calsavara
79
Download