Beruflich Dokumente
Kultur Dokumente
40 41
Polimorfismo Polimorfismo
42 43
Polimorfismo Polimorfismo
1
Polimorfismo Polimorfismo
if instrumentoFinanceiro = ContaCorrente
calcularSaldoContaCorrente()
if instrumentoFinanceiro = FundoAplicacao
calcularSaldoFundoAplic()
46 47
realização
48 Cubo, pirâmide e outras formas podem ser desenhados, deslocados, etc. Embora apresentem o mesmo 49
comportamento, a implementação pode ser totalmente diferente
Notação
Atributos são implicitamente públicos,
canônica static e final (constantes)
*se uma classe tem métodos abstratos, deve ser declarada como abstrata
*método abstrato é um método sem implementação
50
*modificador abstract não é usado com métodos de interface (implícito) 51
2
Classe de Interface Classe de interface
Exercício em sala
Solução >>>>
52 53
+getAparencia():String
A
+getPosicaoAtual():Point
+andar():Point
Classe
<<interface>>
Classe A implementa a classe de interface
54 55
3
Realização de interface: representação Realização de interface: representação
UML UML
<<interface>>
LimitesTabuleiro
~larguraTabuleiro: int=500 <<interface>>
~alturaTabuleiro: int=500 RatoDeTabuleiro
~totalLinhas: int=10
RatoDeLabirinto RatoDeCanto ~totalColunas: int=10
~alturaCelula:int= alturaPixels/totalLinhas
~larguraCelula:int=larguraPixels/totalColunas +getAparencia():String
+getPosicaoAtual():Point
+andar():Point
LimitesTabuleiro
RatoDeCanto
ou >>>>
58 59
Herança Herança
62 63
4
Herança Herança
64 65
Classe derivada
Contém as especificidades <<estereótipo>>
atributos e comportamentos que as tornam ClasseDerivada
diferentes da base e das irmãs Atributos específicos
Métodos específicos
66 67
Herança:
Exercício
representação UML do exemplo
Exercícios da apostila: 3 e 4
68 69
5
PARTE II: Java e OO Herança e polimorfismo
Herança e polimorfismo
Classes e métodos abstratos
70
71
72 73
74 75
6
Exercício rápido Exercício: solução
class JAoQuadradoDouble extends JAoQuadrado {
public double elevarQuadrado(double a) {
System.out.println("metodo elevarQuadrado de JAoQuadradoDouble ");
return (double)a*a;
} Ao encontrar 10, o compilador assume float
}
76 77
Muda a implementação
1. public class IPVACaminhao extends IPVA {
2. private int qtdEixos;
3. public float calcularIPVA() {
4. return vlrBase * qtdCavalos * qtdEixos;
5. }
De classe base para classe derivada 6. }
78 79
7
Exercício rápido: solução Exercício
class ClienteEspecial extends Cliente {
protected double desconto = 0.2;
ClienteEspecial(double desconto) {
desconto = desc;
Fazer número 5 da apostila
}
public double calcularDesconto(double valor) { IPVA (construção do diagrama de classes e
return valor * desconto; Sobrepõe o método
} indicar tipo de polimorfismo)
} de mesmo nome
da classe base
public class Cliente {
protected double desconto=0.1; // 10%
public double calcularDesconto(double valor) {
if (valor > 500) return valor * desconto;
else return 0.0;
}
super
1 public class Fatorial {
Referência a métodos e atributos da 2 private int num = 0; // último número calculado
3 private int res = 1; // último resultado obtido
superclasse 4
5 public int calcular(int n) {
super.<método>(<lista argumentos>) 6 if (n == num) return res;
7 else {
8 int res = 1;
9 for (int i=n; i>0; i--)
this 10
11
res = i * res;
12 // guarda resultado
Referência a métodos e atributos do objeto 13 this.res = res;
corrente 14
15
num = n;
return res;
16 }
17 }
18 }
84 85
8
Herança e construtores Herança: Ordem de chamada das construtoras
A
Métodos construtores não são herdados
pelas classes derivadas, Ao instanciar um objeto +A( )
de C:
C( )
mas o construtor default de uma classe super( )
B
+C( )
88 89
Exemplo Exercício
class C extends B {
int c; super();
C() {c = 3;} c = 3; Fazer o exercício 7 da apostila
}
Ordem da chamada das construtoras
class B extends A {
int b;
B() {b = 2;}
O que este programa imprime?
}
class A {
int a;
A() {a = 1;}
}
}
90 91
} JRevisaoOO\JExemConstrutoraChamadaImplicita
92 93
9
Exemplo classe abstrata Métodos abstratos
class Carro extends Veiculo {
public int numeroPassageiros = 5;
public double calcularIPVA() {
if (cavalos <= 100) Não podem ter corpo
return (cavalos * 1.5);
else Devem ser implementados pelas classes
return super.calcularIPVA();
} derivadas concretas (instanciáveis)
public double calcularSeguroObrigatorio() {
return numeroPassageiros * 100;
}
}
Não podem ser abstratos:
public abstract class Veiculo {
public String placa="AAA0000"; Métodos construtores (não são herdados)
public int cavalos;
public double calcularIPVA() { Métodos estáticos (são finais)
return cavalos * 2.0;
}
public abstract double calcularSeguroObrigatorio();
}
94
JRevisaoOO\JExemClasseAbstrata 95
Exercício Exercício
Baixe o código do programa Rato Exerc. 8 da apostila: classe abstrata,
de Tabuleiro. herança e polimorfismo
~tacla/RepositorioJava/JExercRatosInterface.zip
Destinatário Assinatura
Como você utilizaria classes Amigo []s
João de Almeida
abstratas para aumentar a
Colega de trabalho Atenciosamente,
reutilização de código? João de Almeida
Ramal 3455
98 99
JRevisaoOO\JExercHerancaAssinaturaEmail
10