POO - O polimorfismo

Março 2017

Definição do polimorfismo

A palavra polimorfismo vem do grego e significa aquilo que pode tomar várias formas. Esta característica é um dos conceitos essenciais da programação orientada para o objeto. Enquanto que a herança se refere às classes (e à sua hierarquia), o polimorfismo diz respeito aos métodos dos objetos.

Distinguem-se geralmente três tipos de polimorfismo:

O polimorfismo ad hoc que quer dizer sobrecarga ou em inglês overloading
O polimorfismo paramétrico que quer dizer modelo com uma estrutura predefinida ou template em inglês
O polimorfismo de herança que quer dizer redefinição, especialização ou em inglês overriding

Veja em imagem os diferentes tipos de poliformismo:


Vamos agora tentar entender mais precisamente tudo isto, mas saiba que existe muita confusão quando se trata de diferenciar todos os tipos de polimorfismo.

O polimorfismo ad hoc

O polimorfismo ad hoc permite que funções tenham o mesmo nome, com funcionalidades similares, em classes sem nenhuma relação entre elas (a não ser, claro, serem originárias da classe objeto). Por exemplo, a classe complexa, a classe imagem e a classe relação podem ter funções particulares para serem exibidas. Desta forma, não precisamos nos preocupar com o tipo do objeto que temos para mostrar na tela.


O polimorfismo ad hoc permite, quanto à ele, definir operadores cuja utilização será diferente de acordo com o tipo dos parâmetros que lhes são próprios. Por essa razão é possível, por exemplo, sobrecarregar o operador e fazê-lo realizar ações diferentes para cada uma das operação entre duas totalidades (adição) ou entre duas cadeias de caracteres (concatenação).

O polimorfismo paramétrico

O polimorfismo paramétrico representa a possibilidade de definir várias funções do mesmo nome, porém com parâmetros diferentes (em número e/ou tipo). O polimorfismo paramétrico torna possível a escolha automática do método a ser adotado em função do tipo de dado transformado em parâmetro. Pode-se, por exemplo, definir vários métodos homônimos adição () efetuando uma soma de valores:


O método int addition (int, int) (na adição) poderá dar a soma de duas totalidades
O método float addition (float, float) (adição de flutuantes) poderá dar a soma de dois flutuantes
O método char addition (char, char) (adição de caracteres) poderá definir a soma de dois caracteres
etc.

Chama-se assinatura o número e o tipo (estáticos) dos argumentos de uma função. Por esta razão ela é a assinatura de um método que determina como o tipo será chamado.

O polimorfismo de herança

A possibilidade de transformar um método em classes que são herdeiras de uma classe básica chama-se a especialização. É possível chamar o método de um objeto sem preocupar-se com o seu tipo intrínseco: trata-se do polimorfismo de herança. Este fato permite fazer abstração dos detalhes das classes especializadas de uma família de objeto, mascarando-os com uma interface comum, chamada de classe básica.

Imagine um jogo de xadrez que contém os objetos rei, rainha, louco, cavaleiro, torre e peão que herdam cada um do objeto peça. O método movimento () poderá, graças ao polimorfismo de herança, efetuar o movimento adequado em função da classe do objeto a cada chamada. Isto permitirá que o programa diga peça.movimento sem ter de se preocupar com a classe da peça.

Veja também


OOP - Polymorphism
OOP - Polymorphism
OOP - Polimorfismo
OOP - Polimorfismo
OOP - Der Polymorphismus
OOP - Der Polymorphismus
POO - Le polymorphisme
POO - Le polymorphisme
OOP - Il polimorfismo
OOP - Il polimorfismo
Este documento, intitulado 'POO - O polimorfismo', está disponível sob a licença Creative Commons. Você pode copiar e/ou modificar o conteúdo desta página com base nas condições estipuladas pela licença. Não se esqueça de creditar o CCM (br.ccm.net) ao utilizar este artigo.