Polimorfismo: Sobreposição e Sobrecarga – Marcio Victorino

No dicionário Houaiss polimorfismo é definido como “qualidade ou estado de ser capaz de assumir diferentes formas”. No domínio da engenharia de software Erich et al.(2000, p.333) definem polimorfismo como “capacidade de substituir objetos com interfaces coincidentes por um outro objeto em tempo de execução” este conceito também é conhecido por ligação dinâmica (dynamic binding) (ERICH et al. ; 2000, p.29) ou ligação tardia (late binding) (HORSTMANN; CORNELL, 2001, p.153).
Segundo Booch, Rumbauch e Jacobson (2006, p.131) “a UML faz uma diferença entre operação e método.
Uma operação especifica um serviço que pode ser solicitado por qualquer objeto da classe para afetar o comportamento; um método é a implementação de uma operação”. Os autores ainda afirmam que toda operação não abstrata de uma classe deve ter um método, que fornece um algoritmo executável com um corpo. Em uma estrutura de herança, poderá haver muitos métodos para a mesma operação e o polimorfismo seleciona qual método existente na hierarquia é empregado em tempo de execução.
Horstmann e Cornell (2001, p.153) afirmam que a chave para fazer o polimorfismo funcionar é a ligação tardia. O mecanismo de chamada de método tradicional é chamado de ligação estática ( static binding ou early binding), pois o método a ser executado é totalmente determinado em tempo de compilação. Segundo os autores, a ligação estática depende apenas do tipo de variável; já a ligação dinâmica depende do tipo do objeto real em tempo de execução. Os autores concluem que “o polimorfismo em uma hierarquia de heranças é algumas vezes chamado de polimorfismo verdadeiro. A idéia é distingui-lo do tipo mais limitado de sobrecarga que não é resolvido dinamicamente, mas
estaticamente em tempo de compilação”.
Deitel e Deitel (2000, p. 405) afirmam que o polimorfismo promove extensibilidade do software e associam o polimorfismo à ligação dinâmica de método.
Sierra e Bates (p. 66) afirmam que “o polimorfismo não se importa com o fato de o método ser sobrecarregado (overloading)” e concluem que o polimorfismo é uma peculiaridade dos métodos sobrescritos (overriding).
No contexto apresentado, poder-se-ia concluir que o polimorfismo só existe quando há sobreposição de métodos. No entanto, pesquisando outras bibliografias pode-se encontrar autores que definem dois tipos de polimorfismo: o estático (ad-hoc ou ocasional) e o dinâmico (verdadeiro ou universal), nestas definições sobrecarga também é considerado polimorfismo.
Niemeyer e Knudsen (2000, p.52) afirmam que “todos os métodos em Java podem ser sobrecarregados; esse é um aspecto do princípio de polimorfismo da programação orientada a objetos. Os autores denominam sobrecarga como “polimorfismo ocasional” (NIEMEYER; KNUDSEN, 2000, p.132). Já Stuckey e Sulzmann (2002) definem sobrecarga como “polimorfismo ad-hoc”. Finalmente, Cardelli e Wegner (1985) fazem uma profunda análise sobre os tipos de polimorfismo na qual a sobrecarga é considerada “polimorfismo ad-hoc” e a sobreposição é considerada “polimorfismo universal” ou “verdadeiro polimorfismo”.
Do exposto, pode-se concluir que o objetivo principal do polimorfismo é possibilitar a extensibilidade de software e que só a sobreposição é capaz de proporcionar tal característica. No entanto, é possível encontrar em bibliografias renomadas o conceito de polimorfismo ad-hoc, estático ou ocasional, no qual se enquadra a sobrecarga. Conclui-se que não existe um consenso sobre o assunto.
Referências Bibliográficas

»crosslinked«

Você pode gostar...

1 Resultado

  1. anônimo disse:

    Texto bom, porém mal formatado… dá até desânimo de ler…

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *