Polimorfismo - Uma visão em C++ e Java

Artigo que aborda o tema Polimorfismo e como é sua utilização em Programação Orientada a Objetos, com a implantação de exemplos em C++ e Java.

[ Hits: 51.854 ]

Por: Matheus Santana Lima em 27/11/2008


O que é Polimorfismo



Polimorfismo é um conceito abstrato que, de forma sucinta, diz que algo pode responder de formas diferentes para uma mesma situação.

Este mesmo conceito é aplicado em OOP, em que uma classe Pai/Super classe possui métodos que receberão implantações de formas diferentes, de acordo com a classe derivada.

Veja o exemplo a seguir para uma melhor compreensão de Polimorfismo:
Linux: Polimorfismo
Neste exemplo temos a classe Animal, esta possui a função Emite Som.

Temos também as classes Arara e Cascavel, que também são animais e herdam as características da classe Animal, e como tal emitem algum som.

Arara e Cascavel, apesar de ambos serem animais, emitem sons de formas diferentes.

Classes e métodos abstratos

A implementação de Polimorfismo se faz através de Classes e métodos abstratos. Um método abstrato é um método/procedimento sem um corpo, isto significa que a subclasse que herdar uma classe que contém métodos abstratos tem que, necessariamente, fornecer todo o corpo destes métodos, caso contrário ocorrerá um erro na compilação. Uma classe que contém métodos abstratos é chamada de classe abstrata.

As classes abstratas não podem ser usadas para instanciar objetos, porque são classes incompletas, em que seus métodos não estão totalmente definidos.

No uso de métodos abstratos, o computador é "enganado" e induzido a acreditar que a função esta definida, quando na verdade ela vai ser definida mais tarde. Os métodos abstratos, a grosso modo, "guardam o lugar" para a função real, que vai ser definida posteriormente.

A utilização de classes abstratas é interessante em algumas situações, como por exemplo, quando queremos forçar que determinada função seja definida ao ser herdada por uma classe derivada, ou ainda quando não faz sentido, ou não se deseja que a classe seja instanciada, como no caso do exemplo anterior, na classe Animal, que serve apenas como molde para as classes derivadas.

    Próxima página

Páginas do artigo
   1. O que é Polimorfismo
   2. Classes e métodos abstratos em Java e C++
   3. Implantação em C++
   4. Implantação em Java
Outros artigos deste autor

Rodando aplicações nativas de Windows em Linux pela Web

Fazendo montagens com o Gimp

VNC + Hamachi

Os segredos da criptografia com o Gcipher

Mulheres na Informática: O Movimento LinuxChix BR

Leitura recomendada

Certificação Java - 2 - Literals and Ranges of All Primitive Data Types (Exam Objective 4.6)

Certificação Java - 1 - Java Programming Language Keywords (Exam Objective 4.4)

Modelos de desenvolvimento

Introdução a eXtreme Programming (XP) e instalação do ANT + JUnit

180 dias sem solução

  
Comentários
[1] Comentário enviado por femars em 27/11/2008 - 17:36h

Opa... mto legal e bem feito... parabens!
[]'s
Xiiico/Libra!

[2] Comentário enviado por edgurgel em 08/12/2008 - 17:28h

Na implementação em C++, o construtor da classe abstrata deve ser protegido, pois ele só será chamado na hora da construção dos filhos. Não faz sentido ser public.

[3] Comentário enviado por matheusslima em 08/12/2008 - 21:04h

Sou obrigado a discordar de voce, os metodos declarados na classe base sao abstratos(funçao virtual pura) e consequentemente a classe base é uma classe abstrata, e como tal não pode ser instanciada como um objeto. Este é um dos conceitos base do Polimorfismo que você esqueceu.

[4] Comentário enviado por danltmz em 28/09/2009 - 21:34h

"Sou obrigado a discordar de voce, os metodos declarados na classe base sao abstratos(funçao virtual pura) e consequentemente a classe base é uma classe abstrata, e como tal não pode ser instanciada como um objeto. Este é um dos conceitos base do Polimorfismo que você esqueceu. "


Exato :)


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts