Para que possamos chegar ao último pilar da Programação Orientada a Objetos, que é o conceito de Polimorfismo, é importante explicar o que são classes e métodos abstratos.

Esses dois importantes componentes da POO estão intimamente ligados ao conceito de herança e é muito fácil explicar o motivo, já explicando, inclusive, o que eles são.

Uma classe abstrata é aquela que não determina como as coisas precisam ser feitas, mas define que, obrigatoriamente, elas devem ser feitas. Vamos a um exemplo que deixará tudo muito claro. Vou criar, no Visual C# 2010 Express e utilizando a linguagem C#, um novo projeto com uma classe chamada "Animal" e outras duas classes chamadas "Arara" e "Cachorro", que serão subclasses de "Animal", ou seja, herdeiras dela.

Classes e Métodos Abstratos POO

A figura acima mostra a classe "Animal", sem nenhum atributo ou método.

Agora criarei as classes "Arara" e "Cachorro", herdando da classe "Animal".

Classes e Métodos Abstratos POO

Classes e Métodos Abstratos POO

Muito bem, agora vamos imaginar que queiramos que tanto Araras quanto Cachorros ou ainda quaisquer outros animais que venhamos a adicionar ao nosso projeto e que herdem da classe Animal, tenham, obrigatoriamente, o método mover, afinal de contas todos os animais se movem. Uma solução fácil para isso seria fazermos a criação desse método na classe Animal e, dessa forma ele seria automaticamente herdado pelas subclasses, no entanto, animais se movem de maneiras diferentes, como todos sabemos. Araras voam enquanto cachorros correm, ou seja, os métodos deverão ser diferentes para cada tipo de animal, portanto devem ter implementações diferentes para cada um.

Se você está acompanhando todos os tópicos sobre POO, deve estar pensando que uma fácil solução para isso seria a criação do método, na classe Animal, e depois, através de sobreposição de métodos, modificá-los nas subclasses. Bem, eu tenho que lhe dar os parabéns se você está pensando dessa forma, pois significa que você entendeu corretamente como utilizar a sobreposição de métodos e isso é bastante importante. No entanto existe uma única palavra que citei propositalmente e destaquei acima que faria esse raciocínio não dar certo, que é a palavra "obrigatoriamente". A situação que criei exige que todas as subclasses implementem o método mover. Se utilizarmos a implementação desse método na superclasse e fizermos a sobreposição na subclasse, tudo irá funcionar, mas se alguma classe herdeira da classe Animal não implementar esse método, o sistema aceitará e não é isso que queremos. Conforme citado acima, se todos os animais se movem e cada tipo o faz de uma forma particular, então nós queremos que, obrigatoriamente, cada um implemente seu próprio método. Essa obrigatoriedade de implementação só será possível com uma classe e métodos abstratos na superclasse. Vou demonstrar isso no Visual C#, vejam:

Classes e Métodos Abstratos POO

Criei a classe abstrata "Animal" e também o método abstrato mover. A observação, conforme destacado na imagem, fica por conta da ausência do corpo do método. Sequer é necessário abrir as chaves, sendo que o sinal de ponto e vírgula encerra a declaração de criação do mesmo.

Agora vamos para a criação das classes herdeiras:

Classes e Métodos Abstratos POO

A imagem acima mostra a criação da classe "Arara", com uma implementação de método que exibe uma mensagem característica alertando sobre qual método foi acionado.

Agora para a classe "Cachorro" temos algo bem semelhante:

Classes e Métodos Abstratos POO

Vamos executar a aplicação e ver se isso está funcionando. Para testar, adicionei dois botões, que chamam os métodos mover da classe "Arara" e "Cachorro".

A tela inicial ficou assim:

Classes e Métodos Abstratos POO

Clicando no botão da Classe Arara temos:

Classes e Métodos Abstratos POO

E no botão da classe Cachorro temos:

Classes e Métodos Abstratos POO

Como foi possível observar, cada botão chamou uma implementação de método diferente, que é o que queríamos. Agora vou demonstrar o que realmente diferencia a estratégia de termos criado uma classe com método abstrato no lugar de simplesmente criado a herança e feito uma sobreposição de métodos. Conforme expliquei um pouco acima, a classe com métodos abstratos obriga a implementação em cada uma das subclasses. Vamos tentar, então, não implementar o método mover em uma das classes e ver o que acontece. Apagarei esse método da classe "Cachorro", deixando-a como a figura abaixo:

Classes e Métodos Abstratos POO

Agora vou tentar compilar a aplicação e executá-la. Vejamos o que acontece:

Classes e Métodos Abstratos POO

Conforme ilustrado acima, o Visual C# parou a compilação logo que identificou que o método mover não estava presente na classe "Cachorro", que era uma herdeira da Classe abstrata "Animal" e que esta possuía um método abstrato chamado mover. Portanto, sempre que quiser implementar uma classe “genérica”, ou seja, criar uma matriz para a criação de subclasses e necessitar que todas as herdeiras implementem determinado método, use classes e métodos abstratos.

Outro ponto importante a se destacar é que classes abstratas não podem ser instanciadas, ou seja, não podemos criar objetos de classes abstratas, já que elas existem apenas para serem herdadas. Vejam o que acontece quando tento instanciar a nossa classe Animal:

Classes e Métodos Abstratos POO

O Visual C# não permite esse código e exibe o alerta de que não se pode criar uma instância de uma classe abstrata pois, como foi dito, elas são apenas matrizes para a criação das classes herdeiras.


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 console Nintendo Entertainment System (NES), da Nintendo, detém o recorde de videogame mais clonado em todo o mundo. Já foram catalogados mais de 300 aparelhos diferentes capazes de reproduzir seus jogos! Saiba mais sobre ele aqui.


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.


Instalar vários aplicativos com o mesmo propósito, como editores de texto, reprodutores de músicas ou vídeos e até programas antívirus sobrecarregam o seu sistema operacional e ainda ocupam espaço desnecessário em seu HD. Tenha apenas um bom programa para cada função.


Street Fighter 2, lançado para o Super Nintendo no início dos anos 90, foi o principal responsável pelo aumento nas vendas deste console. Graças ao sucesso do título nos Arcades e à perfeita adaptação ao console, muitos consumidores adquiriram o SNES para jogarem o título em casa. Saiba mais.


O Playstation só nasceu porque uma parceria entre Sony e Nintendo, para desenvolver uma unidade de CD para o Super Nintendo, fracassou. Clique aqui e saiba mais.


As primeiras máquinas de fliperama do mundo a utilizarem moedas, chamadas de Galaxy Game, custavam mais de 20 mil dólares para serem produzidas. Saiba mais sobre elas 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.


Criar um jogo é muito mais complexo do que parece. São milhares, às vezes, milhões de linhas de código. Isso não é exagero! Apenas o jogo Ultima Online possui 6.006.313 linhas de programação, totalizando 25.103.295 palavras


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.


O título Space Invaders, lançado em 1980, fez tanto sucesso em todo o mundo que as pessoas compravam o console Atari apenas para poderem jogá-lo em casa. Saiba mais sobre este incrível título clicando aqui.


A empresa Universal City Studios, detentora dos direitos autorais do King Kong, processou a Nintendo logo após o lançamento de Donkey Kong, pois segundo ela, o game violava os seus direitos. Ela venceu o processo e recebeu da Nintendo uma indenização de quase 2 milhões de dólares.


A IBM detém o recorde de patentes em um único ano, atingindo a marca de 4186 registros no ano de 2008. Clique aqui e saiba mais sobre esta gigante do mundo da tecnologia.