Polimorfismo

Olá pessoal! Hoje encerramos a nossa série sobre orientação a objetos… sim, como eu disse lá no primeiro post, esta série é bem mais curta que a nossa primeira, sobre Programação para Iniciantes. Mas acredito que ao longo destes 5 posts, foi possível pelo menos dar uma noção sobre orientação a objetos. Obviamente, não tratei de conceitos complexos (afinal eu nem sou autoridade no assunto pra abordar tópicos muito avançados).

Então, sem mais delongas, vamos falar sobre o tal do Polimorfismo. Sim… um nome “feio”, mas nem por isso é complicado. Praticamente, todo o conceito que envolve o polimorfismo já foi visto no último post, sobre métodos e classes abstratas.

Mas o que vem a ser o polimorfismo (polymorphism, em inglês) é uma técnica que permite que referências de tipos de classes mais abstratas representem o comportamento das classes concretas que referenciam. Dessa forma, é possível tratar vários tipos de maneira homogênea (através da interface do tipo mais abstrato).

Resumidamente, podemos dizer que o polimorfismo busca obter um comportamento específico através de uma mesma interface da classe. Neste post, veremos duas formas de utilizar o polimorfismo.

A primeira forma que veremos, é a utilização de uma superclasse abstrata, que terá seus métodos implementados pelas subclasses. A partir disso, acessaremos os métodos implementados pelas subclasses através da interface da superclasse. Parece confuso, mas deve ficar mais claro no código.

Como sempre, primeiro em C++…

…e depois em Java…

Como podemos ver em nosso exemplo, criamos uma classe abstrata chamada Animal, que possui as implementações Gato e Cachorro. Acredito que a única “novidade” neste código é o fato de chamarmos o construtor da superclasse em cada uma das implementações. Percebam que, em C++, devemos colocar : em frente ao construtor da subclasse e fazermos a chamada a ela. Já no Java, a superclasse é sempre referenciada pela palavra-chave super, de forma que chamamos seu construtor chamando super() e passando seus parâmetros.

Na parte executável do programa, nós criamos uma lista (em C++ um vector – nada mais que um vetor dinâmico, e em Java um ArrayList) de objetos, declarando como tipo a classe Animal, mais genérica. Dessa forma, apesar de ser um tipo abstrato, os objetos que compõem a lista são as implementações que fizemos (no caso, Gato e Cachorro). Com isso, temos uma interface padrão pra acesso aos objetos, independente de seu tipo, já que definimos os objetos pela interface Animal, e não pelas implementações específicas. Isso é polimorfismo: acessando uma mesma interface, podemos obter comportamentos diferentes. Assim, se adicionarmos novas implementações da classe Animal, elas também responderão a esse comportamento específico.

Outra forma de utilizarmos o polimorfismo é através de sobrecarga de funções / métodos. Dessa forma, uma determinada função pode ter um comportamento específico de acordo com seus parâmetros. Vamos ver um exemplo em C++…

…e em Java…

Neste exemplo, criamos um (ou melhor, alguns) método chamado vetTipo que se comporta de acordo com o tipo de dado que ele recebe. Dessa forma, este método tem um comportamento polimórfico, ajustando o seu comportamento de acordo com o dado recebido. Bacana, não?

Bom pessoal, é isso. Espero que tenham gostado da série sobre orientação a objetos, e que tenha servido pra ajudar a compreender esses conceitos tão básicos. A partir dele, poderemos trabalhar com coisas mais elaboradas aqui no blog! Aguardem, pois vem bastante coisa legal por aí…

Abraço e até o próximo post! 😀

Um comentário sobre “Polimorfismo

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s

Este site utiliza o Akismet para reduzir spam. Saiba como seus dados em comentários são processados.