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 tratá-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.


HARDWARE

Entendendo o seu computador

O que há dentro do meu computador?

Existem alguns componentes fundamentais presentes dentro do seu computador e é muito importante que você conheça um pouco sobre eles, seja para argumentar com algum vendedor durante a compra de um novo PC ou para identificar alguma atitude desleal de algum técnico que esteja te passando um orçamento para reparo. Na seção Raio-X aqui do Contém Bits você pode conhecer e entender mais detalhadamente sobre cada componente, ou também pode clicar abaixo no componente que deseja, para conhecê-lo melhor.

  • Gabinetes

  • Placas-Mãe

  • Processadores

  • Memória

  • Fontes

  • Drives Ópticos

  • Discos Rígidos

  • SSD

  • Placas de Som

  • Placas de Vídeo

Você Sabia?

O mouse foi criado em 9 de dezembro de 1968, por um americano chamado Douglas Engelbart, que o batizou de "XY Position Indicator for a Display System". Conheça a história do mouse clicando aqui.


Em 1949 a revista Popular Mechanics fez uma previsão para o futuro, dizendo: "Um dia os computadores pesarão menos do que 1,5 tonelada". E pensar que temos smartphones capazes de realizar milhões de vezes mais operações do que os computadores daquela época.


A empresa Take-Two pagou à Infogrames mais de 22 milhões de dólares pelos direitos de Civilization, em novembro de 1994. Ainda sobre este título, Sid Meier, um dos seus fundadores, é o profissional da área dos games mais premiado em todo o mundo.


A primeira versão do clássico Mega Man, para Nintendo 8 bits, tem seu recorde de pontos estabelecido em 03/11/2006, por David Archey, que cravou 2.396.700 pontos, terminando o jogo.


O personagem Mario só possui bigode porque quando ele foi criado, em 1981, a resolução de tela dos equipamentos disponíveis não permitia que fosse desenhada uma boca, então os desenvolvedores fizeram o grande bigode para contornar essa limitação tecnológica.


Digitar senhas em computadores de uso coletivo é extremamente perigoso, pois além de softwares de monitoramento, existem dispositivos de hardware que podem capturar suas senhas. Evite ao máximo acessar sites de bancos a partir destes computadores. Veja mais aqui.


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 ENIAC, primeiro computador valvulado do mundo, possuía 17.000 válvulas, 500.000 pontos de solda, 30 toneladas de peso e ocupava uma área de 180 metros quadrados. Clique aqui e conheça mais sobre a história dos computadores.


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.


O título Asteroids, do Atari, possui recorde de pontuação há 30 anos. Em 1982 um americano chamado Scott Safran atingiu a marca de 41.336.440. Atualmente ele faz parte de um minúsculo grupo de jogadores que conseguiram manter seus recordes por mais de 30 anos.


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 épico jogo River Raid, do Atari, foi desenhado e boa parte de sua programação foi feita por uma mulher: Carol Shaw, uma excelente programadora e funcionária da Activision em 1982. Saiba mais sobre a história deste incrível jogo, aqui.


O filme Mortal Kombat, inspirado no jogo de mesmo nome, faturou 23 milhões de dólares apenas no fim de semana de estreia nos EUA. Ainda sobre este título de sucesso, outra cifra que impressiona é o faturamento ao longo do primeiro ano: 1 bilhão de dólares no mundo todo.


Ao completar o nível 99 do jogo Duck Hunt, para Nintendo, o jogo retorna ao primeiro nível, mas um bug impede que se acerte os patos neste recomeço. Este é um exemplo do que é chamado no mundo dos games de "Kill Screen".


O ábaco é o dispositivo de cálculo mais antigo construído e conhecido pelo homem. Suas formas mais primitivas datam de 400 a.C. e eles foram encontrados na China e na Babilônia. Para saber mais sobre a história dos computadores, clique aqui.