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