Escolar Documentos
Profissional Documentos
Cultura Documentos
Orientada a Objetos
HER A NÇA E PO LIMOR FISMO
Programação Orientada a Objetos
Polimorfismo
“Classes derivadas de uma única classe base são capazes de invocar métodos que, embora
apresentem a mesma assinatura, comportam-se de maneira diferente para cada uma das
classes derivadas”
Fonte: BALBO Wellington – Conceitos e Exemplos – Polimorfismo: Programação Orientada a Objetos. Devmedia
Atributos e objetos podem ser utilizados por objetos distintos, com implementações lógicas
diferentes
Exemplo:
Bola de futebol Artigos Esportivos Cálculo das vendas diferente
Camisa de um time
Programação Orientada a Objetos
Polimorfismo
Outro exemplo:
Vendedor Pessoas Calcular Vendas
Gerente
CalcularVendas
Implementado na classe base e com comportamento
diferente nas chamadas das classes Método Polimórfico
Programação Orientada a Objetos
Polimorfismo
class TestaGerente {
static void main(String[] args) {
Gerente gerente = new Gerente();
A classe Gerente herda atributos e métodos da classe mãe, inclusive os privados, mas não
acessa-os diretamente
Programação Orientada a Objetos
Herança
protected!
class Funcionario {
protected String nome;
protected String cpf;
protected double salario;
// métodos devem vir aqui
}
Programação Orientada a Objetos
Herança
Programação Orientada a Objetos
Reescrevendo Métodos
class Funcionario {
classe Gerente vai herdar o método getBonificacao:
protected String nome;
protected String cpf;
Gerente gerente = new Gerente();
protected double salario;
gerente.setSalario(5000.0);
System.out.println(gerente.getBonificacao());
public double getBonificacao() {
return this.salario * 0.10;
}
// métodos
}
Quanto o gerente vai receber de bônus?
Quanto ele deveria receber?
Programação Orientada a Objetos
Melhorando
.......
@Override
public double getBonificacao() {
return this.salario * 0.15;
}
Programação Orientada a Objetos
Como chamar um método reescrito
500,00 ou 750,00 ?
class ControleDeBonificacoes {
private double totalDeBonificacoes = 0;
funcionario1.setSalario(5000.0);
controle.registra(funcionario1);
controle.registra(funcionario2);
System.out.println(controle.getTotalDeBonificacoes());
Não!
Polimorfismo!
Acoplamento = Dependência
Relação entre classes mãe e filha é forte
Programador das classes filhas tenha que conhecer a implementação da classe pai e vice-versa
Se quiséssemos mudar alguma coisa na Classe Funcionário, mas não para todos os
Funcionários? Teríamos que verificar se todas as classes filhas se comportam como deveriam.