Skip to content

Latest commit

 

History

History
106 lines (91 loc) · 2.45 KB

universal.org

File metadata and controls

106 lines (91 loc) · 2.45 KB

Polimorfismo Universal

1 Polimorfismo Universal

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

2 Paramétrico

TAD Parametrizados

  • Estrutura de Dados
  • Subprogramas

Parâmetro adicional especifica o tipo

Exemplos

  • Ada Generic Units
  • Templates C++
  • Java Generics

3 por Inclusão

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

4 por Inclusão

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();
}

5 por Inclusão

Mecanismos relevantes

  • Indentificação dinâmica de tipos
  • Upcasting
  • Downcasting
  • Vinculação dinâmica (tardia) ou estática

6 por Inclusão \small Mecanismos

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

7 por Inclusão \small Mecanismos

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();