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.
A figura acima mostra a classe "Animal", sem nenhum atributo ou método.
Agora criarei as classes "Arara" e "Cachorro", herdando da classe "Animal".
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:
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:
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:
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:
Clicando no botão da Classe Arara temos:
E no botão da classe Cachorro temos:
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:
Agora vou tentar compilar a aplicação e executá-la. Vejamos o que acontece:
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:
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.
Você Sabia?
Mortal Kombat - O Filme
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.
River Raid
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.
Mario e seu bigode
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.
Final Fantasy X
O jogo Final Fantasy X para o Sony Playstation 2 vendeu, apenas no dia do seu lançamento, 1.455.732 cópias, estabelecendo um recorde de vendagem para as primeiras 24 horas de um game. Méritos da SquareSoft, que desenvolveu um excelente produto!
Final Fantasy
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.
Donkey Kong
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.
Nintendo Entertainment System
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.
Pac Man
Apenas no ano de 1982, o clássico Pac Man vendeu mais de 400 mil máquinas de fliperama em todo o mundo e recebeu cerca de 7 bilhões de moedas nestas máquinas. Saiba mais.
Ábaco
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.
Recorde de patentes
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.
Nintendo Wii
Nos primeiros oito dias após o lançamento do console Nintendo Wii foram vendidas 600 mil unidades. Isso equivale a quase um por segundo e estes incríveis números são referentes às vendas apenas nos EUA!
Mega Man
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.