Polimorfismo e seus tipos

por Trigo em 10/06/2013
Polimorfismo: basicamente significa que tipos diferentes de objetos respondem a uma mesma mensagem de maneiras diferentes. Seus tipos são:

A) Universal: é universal, ou seja, pode ser aplicado em diversos casos, trabalhando potencialmente num conjunto infinito de tipos de modo disciplinado. Pode ser de dois tipos:

   a1)  Paramétrico: No polimorfismo paramétrico, a definição de um elemento por si só é incompleta, ela precisa parametrizar o tipo para que ele exista. Por exemplo, uma List sozinha não representa nada, ela precisa ser declarada com um tipo, como List<String> por exemplo. Funções paramétricas também são chamadas de funções genéricas. Em Java seu uso se dá com o Generics.
         Exemplo:

              class Lista<E> {                      
                     public void add(E elemento) { // }  

                     public E get(int index) { // }  
              } 
              ...
             
              Lista<String> listaString = new Lista<String>();  
              Lista<Integer> listaInteira = new Lista<Integer>();
 
   a2)  Inclusão: É o polimorfismo básico, quando uma classe Pai aponta para um objeto da classe Filho.
          Exemplo:
            
              class Animal{ }
              class Mamifero extends Animal {}
              class Ave extends Animal {}
              ...
              Animal a1 = new Mamifero();
              Animal a2 = new Ave();
 
B) Ad-Hoc: É  uma forma limitada de polimorfismo. Ele é implementado quando queremos definir algo especifico. Diferentemente do universal, ele não pode ser usado em todo lugar. Pode ser de dois tipos:

   b1)  Coerção: é  meio para contornar a rigidez dos tipos monomórficos. Existe um mapeamento interno entre os tipos.
         Exemplo:

              Se o operador soma é definido como tendo 2 parâmetros reais e um inteiro e um real são passados como parâmetros, o inteiro é “coargido” para um real.
 
   b2)  Sobrecarga: possibilita termos mais de um método com o mesmo identificador, mas eles devem ter parâmetros diferentes.
          Exemplo:
            
              void somar(int x, int y){ ... }
              void somar(float x, float y){ ... }

 
Deixe seu comentário:
Ocorreu um erro na requisição, tente executar a operação novamente.