Minicursos - Programação Orientada a Objetos

Polimorfismo


Polimorfismo é um assunto muito simples, mas de enorme utilidade para a POO. Seu nome já é bastante intuitivo, significando “muitas formas”. Basicamente o polimorfismo é a habilidade de uma entidade receber um objeto gerado a partir de uma subclasse e trata-lo de forma genérica, como se fosse um objeto da superclasse.

O interessante é que como os objetos recebidos são diferentes, mas sempre do mesmo tipo da superclasse, isso faz com que ele reaja de maneira diferente de acordo com o objeto que está recebendo.

É mais fácil do que parece! Demonstrarei isso funcionando com um exemplo bem simples. Criarei uma estrutura de classes, conforme a figura abaixo:

Polimorfismo - Programação Orientada a Objetos - POO

Fiz um esquema bastante simples, onde nenhum atributo está presente nas classes, apenas um método.

Polimorfismo - Programação Orientada a Objetos - POO

O importante a ser observado já nesse esquema é que estamos lidando com 3 classes herdeiras e uma superclasse. Tanto Cachorro quanto Gato quanto Galinha são animais, ou seja, são classes do tipo Animal. É importante que isso seja lembrado o tempo todo, pois o polimorfismo começa a partir dessa afirmação, conforme explicarei abaixo.

Criarei uma classe chamada "Animal", que será a nossa superclasse. Seu código ficará da seguinte forma:

Polimorfismo - Programação Orientada a Objetos - POO

Fazendo uma revisão dos conceitos de classes e métodos abstratos, a classe acima, por ser abstrata, não permite instanciação, ou seja, não será possível criar um objeto do tipo Animal, mas sim gerar classes herdeiras dela. Também seremos obrigados a criar, em cada classe herdeira, um método chamado emiteSom(), já que temos um método abstrato nessa superclasse e, todos os métodos abstratos devem ter, obrigatoriamente, implementação nas subclasses.

Bem, terminada essa revisão de conceitos, vamos continuar! Criarei outras 3 classes, que serão "Cachorro", "Gato" e "Galinha", todas herdeiras da classe "Animal".

Classe Cachorro:

Polimorfismo - Programação Orientada a Objetos - POO

Classe Gato:

Polimorfismo - Programação Orientada a Objetos - POO

Classe Galinha:

Polimorfismo - Programação Orientada a Objetos - POO

Percebam que a implementação das 3 classes só difere no que será impresso pelo método.

Criei também uma simples interface com 3 radiobuttons e um botão, como mostra a imagem abaixo:

Polimorfismo - Programação Orientada a Objetos - POO

A ideia é que, a partir do que estiver selecionado no radiobutton, o sistema, ao receber o clique no botão “Emitir Som”, instancie o objeto adequado e emita o som (imprima na tela) correto referente ao animal selecionado.

Vou executar e clicar em cada um dos botões para ilustrar o resultado. Primeiro com a opção Cachorro selecionada, teremos:

Polimorfismo - Programação Orientada a Objetos - POO

Depois com a opção Gato selecionada:

Polimorfismo - Programação Orientada a Objetos - POO

E por último com a opção Galinha selecionada:

Polimorfismo - Programação Orientada a Objetos - POO

Como vocês puderam perceber, a partir da seleção no conjunto de radiobuttons, o texto adequado era exibido. Bem, a mágica do polimorfismo começará a aparecer quando eu disser que isso aconteceu chamando sempre um mesmo método, que é o emiteSom(), presente na superclasse Animal e exibido no diagrama de classes ao lado. Mas, se um mesmo método estava sendo chamado, como foi possível alterar o texto exibido? Vejam como é simples e interessante: eu disse, no início do tópico, que era importante lembrar que tanto Cachorro quanto Gato quanto Galinha eram, também, classes do tipo Animal. E, se todo Cachorro, Gato ou Galinha são do tipo Animal, podemos criar associações como essas abaixo:

Polimorfismo - Programação Orientada a Objetos - POO

Então, partindo desse princípio, o código que criei para a execução da pequena aplicação acima foi:

Polimorfismo - Programação Orientada a Objetos - POO

De acordo com o radiobutton selecionado uma subclasse era instanciada e associada ao objeto do tipo Animal. A essência do polimorfismo está nos trechos destacados pelos retângulos coloridos. Objetos do tipo Animal, que chamei de "objAnimal", recebem objetos do tipo Cachorro, Gato e Galinha sem o menor problema. Na segunda linha de cada bloco, o método emiteSom() é chamado, mas em cada uma delas trata-se de um método com implementação diferente, ou seja, são comportamentos diferentes para um mesmo método e, qual comportamento será executado é decidido dinamicamente, durante a execução do programa. Isso é polimorfismo! A lógica por trás disso é muito, muito simples! Vejam:

Todo Cachorro é um Animal, assim como todo Gato e toda Galinha. Por essa razão a atribuição abaixo é possível:

Animal objAnimal = new Cachorro();

A imagem abaixo resume muito bem o que é esse importante pilar da POO:

Polimorfismo - Programação Orientada a Objetos - POO

Caso você ainda tenha dúvidas sobre esse importante conceito, eu tenho outro exemplo. Vamos criar um vetor de objetos do tipo Animal, cujo código será:

Animal[] vetorAnimais = new Animal[3];
vetorAnimais[0] = new Cachorro();
vetorAnimais[1] = new Gato();
vetorAnimais[2] = new Galinha();

Comentando o código...

Polimorfismo - Programação Orientada a Objetos - POO

A inserção dos objetos das subclasses dentro do vetor é um exemplo de polimorfismo, pois ele, apesar de ter sido criado para receber objetos do tipo Animal, está armazenando objetos de diversas outras formas. E a prova de que a aceitação dos diferentes objetos acontece sem qualquer problema pelo vetor é que podemos criar uma estrutura de repetição para exibi-los, dessa forma:

Polimorfismo - Programação Orientada a Objetos - POO

E executando essa estrutura de repetição, teremos:

Polimorfismo - Programação Orientada a Objetos - POO

Polimorfismo - Programação Orientada a Objetos - POO

Polimorfismo - Programação Orientada a Objetos - POO

Ou seja, o vetor conseguiu armazenar corretamente os objetos das subclasses!

Isso é o polimorfismo. Espero que tenha ficado claro, pois é um dos conceitos que, apesar de não ser complicado, gera muitas dúvidas durante o aprendizado.



Algumas notícias

Google Chrome consumirá menos memória RAM em breve

O navegador da gigante de buscas da Internet é, sem dúvida, um dos melhores disponíveis, mas é inegável que o consumo de memória RAM por parte dele é exagerado. Este problema já se estende por anos, mas parece que em breve ele terá uma solução. Um novo recurso do Windows 10, chamado SegmentHeap...

Ler Notícia Completa

Sites e vídeos sem propagandas? Sim, é possível através da exploração de uma falha!

Seguramente você já se deparou com sites que bloqueiam o conteúdo da página e te obrigam a assinar determinado serviço para ler o conteúdo, certo? Ou foi tentar assistir aquele vídeo e as propagandas em tela cheia não pararam de surgir. Bem, todos já nos deparamos com isso, no entanto, um bug de...

Ler Notícia Completa

Inteligência Artificial cria antibiótico super potente

Pesquisadores do MIT (EUA) identificaram um novo e poderoso composto antibiótico usando um algoritmo de aprendizado de máquina, uma técnica de inteligência artificial. Em testes de laboratório, a droga matou algumas das bactérias causadoras de doenças mais problemáticas do mundo, incluindo algu...

Ler Notícia Completa

Google lança programa para capacitar profissionais brasileiros e com direito a bolsas

O Google iniciou nesta terça-feira (17) o Certificado Profissional de Suporte em TI para brasileiros. Trata-se de um curso desenvolvido pela gigante de tecnologia em parceria com a Coursera. Inicialmente, o módulo de ensino foi anunciado a um valor de US$ 39 por mês. Entretanto, sofreu uma redu...

Ler Notícia Completa

Intel Core i9-9900KS é um monstro com frequência de 5GHz em todos os núcleos

A Intel é uma das empresas presentes na Computex 2019, a maior feira de hardware da Ásia. E a empresa começou a esquentar os motores antes mesmo do início das conferências, exibindo um processador que não está para brincadeira: o Intel Core i9-9900KS, uma edição especial e ainda mais turbinada do...

Ler Notícia Completa

Como conversar com alguém no WhatsApp sem adicionar o número aos contatos

Este processo pode, à primeira vista, parecer um pouco confuso para usuários que não são muito experientes usando seu smartphone. Mas uma vez que você conclua o processo , vai entender o método e parecerá mais fácil. 1. Abra o seu navegador preferido no seu smartphone e digite o seguinte link na...

Ler Notícia Completa

O que acontece com o cérebro no exato momento em que morremos

O que passa em nossa cabeça no momento da morte? Não se sabe exatamente e, embora os cientistas tenham alguma resposta, a resposta continua sendo um grande mistério. Além de difícil solução, tentar respondê-la pode criar implicações éticas. No entanto, uma equipe de cientistas da Universidade...

Ler Notícia Completa

Operada e devolvida ao útero, menina que nasceu duas vezes hoje 'acorda sorrindo toda manhã'

Um bebê pode nascer duas vezes? Não é o caso da absoluta maioria das crianças, mas foi assim para a pequena Lynlee Boemer. Em outubro de 2015, sua mãe, Margaret Boemer, descobriu que estava grávida de gêmeos. Ela sofreu um aborto espontâneo, mas um dos bebês sobreviveu. Com dez semanas de ges...

Ler Notícia Completa

Médicos dizem estar perto de chegar a exame de sangue para todos os tipos de câncer

Cientistas dizem que estão mais perto de criar um exame de sangue universal, capaz de identificar todos os tipos de câncer. Estudo conduzido com 1.005 pacientes por uma equipe da Universidade Johns Hopkins, dos Estados Unidos, testou um método que detecta oito tipos de proteínas e 16 mutações ge...

Ler Notícia Completa

Formato JPEG está com os dias contados

Há quantos anos você ouve falar em arquivos JPG? O formato já era utilizado nos primórdios da web comercial nos anos 1990, vivendo há mais de 20 anos como o principal método de compressão de imagens do público. No que depender de Google, Mozilla e outras empresas, isso pode mudar dentro de algum...

Ler Notícia Completa

Você sabia?

O primeiro computador a conseguir rodar o jogo Spacewar era o PDP-1, que custava 120 mil dólares e pertencia ao Massachusetts Institute of Technology. O jogo demorou 200 horas para ser desenvolvido, em 1962, e seu criador foi um cientista da computação chamado Steve Russel.

O personagem Mario surgiu pela primeira vez no mundo dos games em um jogo chamado Donkey Kong, lançado em 1981. Mario, que naquela época se chamava Jumpman, não era o personagem principal do jogo, mas ele se tornaria um dos mais famosos personagens do mundo dos games. Saiba mais.

A partida mais longa do clássico Space Invaders durou incríveis 38 horas e 32 minutos e esta façanha foi conseguida por um jogador de apenas 12 anos! O jogo, claro, podia ser pausado para alimentação e descanso, mas ainda assim o recorde, estabelecido no dia 02/09/1980, ainda não foi quebrado. Saiba mais.

O famoso título Final Fantasy, da Square Enix, tem este nome exatamente porque se tratava da última esperança da empresa, que estava à beira da falência quando o lançou. Clique aqui e conheça detalhes dessa história.

Você gostará destes vídeos!