Este documento discute o conceito de polimorfismo na programação orientada a objetos. Explica que polimorfismo permite que objetos de classes derivadas sejam referenciados por suas classes base, e que isso possibilita programar de forma genérica em vez de específica. Também apresenta diferentes tipos de polimorfismo como sobrecarga, sobrescrita e auto-boxing/unboxing.
POO – Aula 01 – Plano de Ensino e Revisão de Programação Imperativa
POO - Aula 10 - Polimorfismo
1. Universidade Federal de Sergipe
Departamento de Computação
Programação Orientada a Objetos
Polimorfismo
Felipe J. R. Vieira
Última Atualização em Novembro de 2011
2. Recapitulando
103403 – Programação Orientada a Objetos 2
4. Polimorfismo
➢ Na herança, vimos que todo Gerente é um
Funcionario, pois é uma extensão deste.
➢
Podemos nos referir a um Gerente como sendo
um Funcionario.
➢
Pois Gerente é um Funcionario. Essa é a
semântica da herança.
103403 – Programação Orientada a Objetos 4
5. Polimorfismo
➢ Na herança, vimos que todo Gerente é um
Funcionario, pois é uma extensão deste.
➢
Podemos nos referir a um Gerente como sendo
um Funcionario.
➢
Pois Gerente é um Funcionario. Essa é a
semântica da herança.
103403 – Programação Orientada a Objetos 5
6. Polimorfismo
➢ Polimorfismo é a capacidade de um objeto
poder ser referenciado de várias formas;
➢
O polimorfismo permite programar no geral
em vez de programar no específico.
103403 – Programação Orientada a Objetos 6
7. Polimorfismo
➢ É a capacidade de tipos mais abstratos
representarem comportamentos de tipos mais
específicos;
➢ Com polimorfismo, podemos projetar e
implementar sistemas que são facilmente
extensíveis – novas classes podem ser
adicionadas a partes gerais do programa com
pouca ou nenhuma modificação, contanto que
as novas classes façam parte da hierarquia de
herança que o programa processa
genericamente.
103403 – Programação Orientada a Objetos 7
8. Polimorfismo
➢A ideia de polimorfismo só tem sentindo com a
existência do paradigma de herança;
➢
Consiste na possibilidade de que uma
referência a objetos de uma classe possa se
conectar também com objetos descendentes
desta.
103403 – Programação Orientada a Objetos 8
10. Polimorfismo
➢ Deve-se deixar claro que podemos acessar
apenas as operações pertencentes a classe
associada a referência. O resto das operações
do objeto não são acessíveis através desta
referência.
103403 – Programação Orientada a Objetos 10
11. Outros Tipos de Polimorfismo
●
Tipo Genérico - ao definir um elemento(que pode ser uma
classe, um método ou alguma outra estrutura da linguagem),
a definição do tipo sozinha ela é incompleta, ela precisa
parametrizar este tipo, ou seja, teoricamente não existiria o
tipo sozinho, o que sim existe e o tipo de alguma coisa de
alguma coisa;
public class Agenda {
public static void main(String[] args){
ArrayList<Pessoa> objetos = new ArrayList<Pessoa>();
Objetos.add(new Empregado());
Objetos.add(new Pessoa());
}
}
Polimorfismo 11
12. Tipos de Polimorfismo Estáticos
●
Polimorfismo estático normalmente é entendido como uma
característica da linguagem e não como uma forma de
polimorfismo.
●Sobrecarga - é a capacidade de poder definir dois, ou mais
métodos, numa mesma classe com o mesmo nome;
public class Agenda {
public int calculaIdade (int ano , int mes, int dia);
public int calculaIdade ( Date data ) ;
public int calculaIdade ( Calendar data ) ;
}
Polimorfismo 12
13. Tipos de Polimorfismo Estáticos
● Sobrescrita - é a capacidade de poder redefinir a
implementação de um método que já foi definido e
implementado em uma classe superior na hierarquia de
herança.
public class Somador {
public int calculaSoma ( int inicio, int fim ){
int soma = 0 ;
for ( int i = inicio ; i <= fim ; i++ ){
soma += i;
}
return soma;
}
}
public class SomadorInteligente extends Somador {
public int calculaSoma ( int inicio, int fim ){
int umAteInicio = inicio ( inicio+ 1 ) / 2 ;
int umAteFim = fim ( fim+ 1 ) / 2 ;
return umAteFim – umAteInicio;
}
}
Polimorfismo 13
14. Tipos de Polimorfismo Estáticos
●Sombreamento - é a capacidade de poder definir duas, ou
mais, variáveis com o mesmo nome em escopos diferentes;
public class Teste {
String nome; // variável no escopo “classe”
public void setName ( String nome ){ // variável no escopo “método”
this .nome = nome;
}
}
● Auto-boxing e Auto-unboxing - Em algumas situações é
necessário converter valores primitivos para objetos. Isso é
conhecido como boxing (colocar em caixas). O processo
inverso é chamado unboxing (retirar das caixas). Auto-boxing
e Auto-umboxing acontece quando próprio compilador faz
essa operação.
Polimorfismo 14
15. Referências
➢ Java: Como Programar 6ª Edição.
➢ Material da Caelum.
103403 – Programação Orientada a Objetos 15