Minicursos - Programação Orientada a Objetos

Classes e Métodos Abstratos


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, modifica-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 executa-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.



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

Você sabia?

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.

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.

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.

Você gostará destes vídeos!