A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota

Apresentações semelhantes


Apresentação em tema: "Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota"— Transcrição da apresentação:

1

2 Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota acm@cin.ufpe.br http://www.cin.ufpe.br/~acm

3 Redefinição de Métodos e Ligação Dinâmica

4 Subtipos: Verificação Dinâmica com instanceof... Conta c = this.procurar(”567-8"); if (c instanceof Poupanca) ((Poupanca) c).renderJuros(0.01); else System.out.print("Poupança inexistente!");...

5 Verificação Dinâmica de Tipos Casts e instanceof : –((Tipo) variável) –variável instanceof Tipo –O tipo de variável deve ser supertipo de Tipo –O Cast “((Tipo) variável)” gera uma exceção se “variável instanceof Tipo” retornar false –Casts são essenciais para verificação estática de tipos (compilação)

6 Número Saldo 21.342-7 875,32 Crédito Débito Objeto Conta Especial R. Bônus Bônus 11,60

7 Número Saldo 21.342-7 875,32 Crédito Débito Estados de uma Conta Especial Número Bônus Saldo 21.342-7 11,80 895,32 Crédito Débito Número Bônus Saldo 21.342-7 11,60 875,32 Crédito Débito Crédito(20) R. Bônus

8 Número Saldo 21.342-7 875,32 Crédito Débito Estados de uma Conta Especial Número Bônus Saldo 21.342-7 0,00 887,12 Crédito Débito Número Bônus Saldo 21.342-7 11,80 875,32 Crédito Débito R. Bônus() R. Bônus

9 Contas Especiais: Assinatura public class ContaEspecial extends Conta { public ContaEspecial(String numero) {} public void renderBonus() {} public double getBonus() {} public void creditar(double valor) {} }

10 Contas Especiais: Descrição public class ContaEspecial extends Conta { private double bonus; public ContaEspecial(String numero) { super (numero); bonus = 0.0; }

11 public void creditar(double valor) { bonus = bonus + (valor * 0.01); super.creditar(valor); } public void renderBonus() { super.creditar(bonus); bonus = 0; } public double getBonus() { return bonus; }

12 Redefinição de Métodos Preservação da assinatura: tipos dos argumentos e resultados da redefinição têm que ser iguais aos tipos da definição Semântica e Visibilidade dos métodos redefinidos deve ser preservada Só é possível acessar a definição dos métodos da superclasse imediata (via super )

13 Usando Contas Especiais... ContaEspecial contae; contae = new ContaEspecial("21.342-7"); contae.creditar(200.00); contae.debitar(100.00); contae.renderBonus(); System.out.print(contae.getSaldo());...

14 Ligações Dinâmicas... Conta conta; conta = new ContaEspecial("21.342-7"); ((Conta)conta).creditar(200.00); conta.debitar(100.00); ((ContaEspecial) conta).renderBonus(); System.out.print(conta.getSaldo());...

15 Ligações Dinâmicas Conta conta; conta = new ContaEspecial("21.342-7"); ((Conta)conta).creditar(200.00); “Como existe uma redefinição do método creditar na classe ContaEspecial,o Cast serve para informar a Java qual definição estamos interessados.”

16 Ligações Dinâmicas Conta conta; conta = new ContaEspecial("21.342-7"); conta.debitar(100.00); “Já o método debitar só existe na classe Conta, então Java acessa sua definição diretamente.”

17 Ligações Dinâmicas Conta conta; conta = new ContaEspecial("21.342-7"); ((ContaEspecial) conta).renderBonus(); “Finalmente, o método renderBonus só existe na classe ContaEspecial. Nesse caso, Java deve ser informado através de um Cast onde localizar sua definição. Se isso não for feito, uma exceção será gerada.”

18 Ligações Dinâmicas Dois métodos com o mesmo nome e tipo: –definição e redefinição, qual usar? O código é escolhido dinamicamente (em tempo de execução) e não estaticamente (em tempo de compilação) Escolha se dá baseado na classe do objeto associado à variável destino do método

19 Exercício Modifique a classe Banco para que seja possível computar o bônus de uma conta especial. Foi necessário redefinir algum método de Banco? Justifique a sua resposta.

20 Classe Banco: Assinatura public class Banco { public Banco () {} public void cadastrar(Conta conta) {} public void creditar(String numero, double valor) {} public void debitar(String numero, double valor) {} public double getSaldo(String numero) {} public void transferir(String contaOrigem, String contaDestino, double valor) {} }

21 Leitura Páginas 20 a 24, e 116 a 120 do livro Dominando o Java (de Patrick Naughton) Seções 1.10.1, 3.1 a 3.6, 5.13 a 5.20, e 8.5 a 8.8 do livro The Java Programming Language (de Ken Arnold e James Gosling)


Carregar ppt "Orientação a Objetos e Java Graduação em Ciência da Computação  Centro de Informática, UFPE Alexandre Mota"

Apresentações semelhantes


Anúncios Google