Polimorfismo verdadeiro
Ocorre quando
- Estrutura de dados incorpora elementos de tipos diversos
- Aplica-se mesmo código sobre elementos de tipos diversos
Permite a programação genérica
Subtipos
- Paramétrico
- Inclusão
TAD Parametrizados
- Estrutura de Dados
- Subprogramas
Parâmetro adicional especifica o tipo
Exemplos
- Ada Generic Units
- Templates C++
- Java Generics
Característico de linguagens orientadas a objetos
Uso de hierarquia de tipos
Fundamentação
- Elemento de um subtipo é também elemento do supertipo
- Algoritmo para um supertipo pode ter elementos de subtipo
Mecanismos
- Herança
- Sobreescrita – Polimorfismo por sobrecarga
Permite a criação de código polimórfico
Subprogramas dependem do tipo do objeto
Exemplo
public void manter (Veiculo veiculo) {
veiculo.vistoria();
veiculo.conserto();
veiculo.limpeza();
}
Mecanismos relevantes
- Indentificação dinâmica de tipos
- Upcasting
- Downcasting
- Vinculação dinâmica (tardia) ou estática
Indentificação dinâmica de tipos
public void manter (Veiculo veiculo) {
veiculo.vistoria();
veiculo.conserto();
veiculo.limpeza();
}
Upcasting
Pessoa p = new Aluno();
Transporte[] transportes = new Transporte[3];
transportes[0] = new Navio();
transportes[1] = new Aviao();
transportes[2] = new Onibus();
- Métodos específicos da subclasse se tornam invisíveis
Downcasting
- Em geral, não é permitido implicitamente
- Requer conversão explícita
LinkedList listaI = new LinkedList(); for (int i = 0; i < 10; i++) listaI.add(new Integer(i)); for (int i=0; i < listaI.length; i++) Integer val1 = (Integer) listaI.getLast();