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?

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 primeiro jogo a fazer uso de uma Inteligência Artificial foi o Mouse in the Maze, criado em 1955, na União Soviética. Você pode saber mais sobre ele clicando aqui.


Considerando todas as adaptações de jogos de videogame para o cinema, a mais bem sucedida foi Lara Croft: Tomb Raider, lançado em 2001 e que faturou 274 milhões de dólares. Ele foi dirigido por Simon West e estrelado pela bela Angelina Jolie.


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.


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.


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.


Até a primeira metade dos anos 90 era bastante comum que as trilhas sonoras dos games fossem criadas por mulheres e a responsável pelas músicas do clássico Street Fighter 2 foi Yoko Shimomura. Segundo ela, o ritmo "Tararirarin" da música tema do personagem Blanka, do Brasil, veio à sua cabeça enquanto ela estava no trem a caminho da Capcom.


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.


Desde o seu lançamento, em 1985, o fantástico jogo Tetris vende pelo menos 70 milhões de unidades por ano em todo o mundo! Os dados são oficiais e fornecidos pela THQ, uma das distribuidoras do título.


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


Excesso de barulho dentro do seu gabinete, principalmente logo que você o liga, pode ser sintoma de problemas nas ventoinhas, que podem precisar ser limpas ou trocadas. Entre em contato com um técnico de sua confiança e verifique isso o quanto antes.