Polimorfismo. - WordPress.com

Propaganda
Programação Orientada a
Objetos
Herança e polimorfismo
"O homem absurdo é aquele que nunca muda.“
- Georges Clemenceau
1.
2.
3.
4.
5.
Composição, agregação, associação
Herança
Reescrita
Sobrecarga
Polimorfismo
2
Composição, Agregação e Associação
• Composição
– Um trem é formado por 1
locomotiva e n vagões;
– Relacionamento tem-um;
• Agregação
– Uma locomotiva (todo)
tem um farol (parte), mas
não deixa de existir se
não o tiver;
• Associação
– Um trem usa uma estrada
de ferro (a estrada não faz
parte do trem, mas ele
depende dela).
3
Herança
• Objetivo 1: reuso de código.
• Praticando! (5 minutos)
• Imagine o sistema de um banco... Nesse
sistema precisamos armazenar dados de
funcionários (que podem exercer diferentes
funções, ex.: secretário ou gerente) e clientes.
– Vamos modelar essa parte do sistema! 
4
Herança
• Relacionamento É-UM  em java, instanceof
5
6
Herança
• Objetivos:
1. Reuso de código;
2. Polimorfismo.
• Palavras-chave:
– extends: para herdar as caraterísticas de uma
classe;
– Instanceof: para testar relacionamentos É-UM
entre objetos
7
Se não houvesse herança em Java, como você
poderia reaproveitar o código de outra classe?
Quais seriam as implicações dessa nova
abordagem?
8
Overriding
• Outros nomes: sobrescrever (overwriting),
reescrever, sobrepor...
• Praticando! (5 minutos)
– No exemplo anterior, suponha que os funcionários, de
modo geral, ganhem uma bonificação de 10%. Mas,
devido o fato do gerente ter mais responsabilidade,
seria justo que ele ganhasse uma bonificação de 20%
de seu salário. Como nós alteraríamos o nosso
modelo para satisfazer essa nova especificação?
(modele/implemente apenas as classes Funcionário e
Gerente)
10
Overriding
11
Overriding
• Objetivo: especializar um método herdado.
• Regras para sobrescrever um método:
1. A assinatura deve ser igual ou bem similar:
1.
2.
3.
Lista de argumentos exatamente igual;
Tipo de retorno deve ser “igual” (lembrar da relação É-UM, pois
subtipos também são aceitos);
Modificador de acesso pode ser menos restritivo;
2. Para haver reescrita deve, primeiramente, haver herança.
Mais regras em: Livro de Certificação Java
• SCJP Sun Certified Programmer for Java 6
• OCP Java SE 6 Programmer
12
Overloading
• Outro nome: sobrecarregar, ...
13
Overloading
• Objetivo: prover ao usuário a possibilidade de executar uma
funcionalidade do sistema passando diferentes inputs (tipos de
dados)
• É basicamente uma outra implementação de um método já existente
mas com argumentos diferentes.
• Regras para sobrecarregar um método...
1.
2.
3.
4.
Os métodos sobrecarregados devem alterar a lista de argumentos;
Os métodos sobrecarregados podem alterar o tipo de retorno;
Os métodos sobrecarregados podem alterar o modificador de acesso;
Um método pode ser sobrecarregado na mesma classe ou em uma subclasse.
• Também é possível sobrecarregar um construtor.
Mais regras em: Livro de Certificação Java
• SCJP Sun Certified Programmer for Java 6
• OCP Java SE 6 Programmer
14
Polimorfismo
Polivárias
morfoformas
• O que guarda uma variável do tipo Funcionário?
– Uma referência para um funcionário... 
Gerente g = new Gerente();
Funcionario f = g;
f.setSalario(1000);
Gerente
Gerente
g
get/setNome()
get/setIdade()
get/setSalario()
Senha
numFuncionariosGerenciados
getBonificacao()
Autentica()
Funcionario
f
15
Polimorfismo
• O que guarda uma variável do tipo Funcionário?
– Uma referência para um funcionário.
Gerente g = new Gerente();
Funcionario f = g;
f.setSalario(1000);
System.out.println(f.getBonificacao());
Gerente
g
Gerente
get/setNome()
get/setIdade()
get/setSalario()
Senha
numFuncionariosGerenci
ados
getBonificacao()
Autentica()
Decidido em tempo de
execução
Funcionario
f
16
Polimorfismo
• Por que polimorfismo?
class ControleDeBonificacoes {
private double totalDeBonificacoes = 0;
public void registra(Funcionario funcionario) {
this.totalDeBonificacoes += funcionario.getBonificacao();
}
public double getTotalDeBonificacoes() {
return this.totalDeBonificacoes;
}
}
17
Polimorfismo
• Por que polimorfismo?
• O que acontece se futuramente precisarmos
criar outros tipos de funcionários?
ControleDeBonificacoes controle = new ControleDeBonificacoes();
Gerente funcionario1 = new Gerente();
funcionario1.setSalario(1000);
controle.registra(funcionario1);
Funcionario funcionario2 = new Funcionario();
funcionario2.setSalario(1000);
controle.registra(funcionario2);
System.out.println(controle.getTotalDeBonificacoes());
18
Polimorfismo
• Dicas sobre polimorfismo:
• Não
importa
como
nos
referenciamos a um objeto, o
método que será invocado é
sempre o do objeto em questão.
• Programe sempre pra uma
superclasse!
19
Polimorfismo
• Implemente o seguinte modelo: (5 minutos)
20
Polimorfismo
• Crie uma classe Zoologico composta por 5
jaulas (array), onde cada uma terá um animal
diferente. Depois percorra cada jaula e
“cutuque o animal” (emitirSom) e, se o animal
souber correr, dê uma carreira nele (correr).
• (7 minutos)
21
Referências
• Essa aula
utilizou
alguns exemplos
modificados das apostilas caelum além de
alguns conceitos e exemplos abordados na
apostilas para certificação java (SCJP e OCJP).
• Ahhh, alguns destes exemplos também saíram
da minha cabeça. 
22
Download