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

Xiaomi vende 52,9 milhões de celulares no segundo trimestre de 2021 e faturamento dispara

A gigante chinesa Xiaomi registrou um aumento de quase 85% no seu faturamento no segundo trimestre de 2021 em comparação ao mesmo período do ano passado. A receita divulgada pela empresa foi de 13,5 bilhões de dólares (algo em torno de 70 bilhões de reais) nos meses de abril a junho deste ano...

Ler Notícia Completa

Galaxy S9 e Galaxy S9 Plus receberão atualização de segurança este mês

A Samsung começou a liberar esta semana, para proprietários dos modelos Galaxy S9 e Galaxy S9 Plus, uma nova atualização de segurança. Por enquanto somente alguns países da Europa receberam o pacote, que deve ser dis...

Ler Notícia Completa

Novas câmeras 'debaixo da tela' da Oppo surpreendem

Para muitos, colocar uma câmera embaixo da tela de um celular era uma tarefa impensável, por conta de diversos problemas técnicos. Os primeiros testes da Oppo que se propuseram a isso geravam imagens de qualidade bastante insatisfatória, já que a captação da luz era prejudicada pela tela. A prim...

Ler Notícia Completa

As memórias DDR5 estão chegando e trarão muitas melhorias

A próxima geração de memórias RAM já possui especificações definidas e promete grande melhoria em relação às atuais DDR4. E o mais importante: mesmo com desempenho bastante superior, elas consumirão menos energia. A tensão de trabalho das memórias DDR5 será de apenas 1.1V contra os 1.2V das atu...

Ler Notícia Completa

Você sabia?

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 contornarem essa limitação tecnológica.

Instalar vários programas 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.

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

Ajude o Contém Bits com um cafezinho!

Se você gostou do artigo, se ele lhe foi útil de alguma maneira e você quiser ajudar o Contém Bits, saiba que é simples, fácil e rápido. Basta clicar na imagem do PayPal (ou no cafezinho) e seguir as instruções, em ambiente seguro e com o respaldo do Paypal. Eu agradeço muito! :)


Você gostará destes vídeos!