Abstração de Classes e MétodosAbstração de Classes e Métodos

A abstração é um dos pilares da Programação Orientada a Objetos (POO). A abstração permite representar apenas as características e comportamentos mais importantes de um objeto, escondendo detalhes desnecessários para quem utiliza a classe.

Além disso, a abstração ajuda o programador a focar no que um objeto faz, sem precisar se preocupar imediatamente com como ele faz.

Por exemplo, quando utilizamos um carro, sabemos que ele acelera, freia e faz curvas. Entretanto, não precisamos conhecer todos os detalhes do funcionamento interno do motor para dirigir. Na programação, a abstração segue exatamente essa ideia.

O que é abstração?

A abstração consiste em criar modelos simplificados de objetos do mundo real.

Dessa forma, podemos representar apenas os atributos e métodos essenciais para o sistema.

Observe o exemplo de uma classe que representa um veículo:

public abstract class Veiculo {

protected String modelo;

public Veiculo(String modelo) {
this.modelo = modelo;
}

public void exibirModelo() {
System.out.println("Modelo: " + modelo);
}

public abstract void mover();
}

Neste exemplo, sabemos que todo veículo possui um modelo e pode se mover. Porém, cada tipo de veículo se move de maneira diferente. Por isso, o método mover() foi declarado como abstrato.


Classes abstratas

Uma classe abstrata é uma classe que não pode ser instanciada diretamente.

Ela serve como modelo para outras classes.

Além disso, pode conter:

  • Atributos;
  • Métodos comuns;
  • Métodos abstratos;
  • Construtores.

Para declarar uma classe abstrata, utilizamos a palavra-chave abstract.

Exemplo:

public abstract class Animal {

protected String nome;

public Animal(String nome) {
this.nome = nome;
}

public void dormir() {
System.out.println(nome + " está dormindo.");
}

public abstract void emitirSom();
}

Nesse caso, todos os animais podem dormir. Entretanto, cada animal possui um som diferente.


Métodos abstratos

Um método abstrato é um método que possui apenas a assinatura, sem implementação.

Assim, as classes filhas são obrigadas a implementar esse método.

Exemplo:

public abstract void emitirSom();

Observe que o método termina com ponto e vírgula e não possui bloco de código.

Posteriormente, uma classe filha implementa o método:

public class Cachorro extends Animal {

public Cachorro(String nome) {
super(nome);
}

@Override
public void emitirSom() {
System.out.println("Au Au!");
}
}

Da mesma forma, podemos criar outras classes:

public class Gato extends Animal {

public Gato(String nome) {
super(nome);
}

@Override
public void emitirSom() {
System.out.println("Miau!");
}
}

Utilizando as classes

Agora podemos criar objetos das classes concretas:

public class Principal {

public static void main(String[] args) {

Cachorro cachorro = new Cachorro("Rex");
Gato gato = new Gato("Mimi");

cachorro.dormir();
cachorro.emitirSom();

gato.dormir();
gato.emitirSom();
}
}

Saída:

Rex está dormindo.
Au Au!
Mimi está dormindo.
Miau!

Perceba que o método dormir() é herdado da classe abstrata. Por outro lado, o método emitirSom() foi implementado de maneira diferente em cada classe em razão de que cada classe precisa atuar de maneira diferente.


Vantagens da abstração

A abstração oferece diversos benefícios para o desenvolvimento de software.

Entre as principais vantagens estão:

Organização do código

As responsabilidades ficam melhor definidas. Consequentemente, o sistema torna-se mais fácil de entender.

Reutilização

As classes filhas podem aproveitar atributos e métodos já existentes. Dessa maneira, evitamos repetição de código.

Facilidade de manutenção

Quando uma alteração é necessária, muitas vezes basta modificar a classe base. Então o trabalho de manutenção é reduzido.

Padronização

As classes derivadas seguem um modelo comum. Portanto, o sistema torna-se mais consistente.

Maior flexibilidade

Novas classes podem ser adicionadas facilmente. Além disso, o código existente normalmente não precisa ser alterado.


Quando utilizar abstração?

A abstração é recomendada quando existe um conceito genérico que serve de base para vários objetos semelhantes.

Alguns exemplos incluem:

  • Animal → Cachorro, Gato, Cavalo;
  • Veículo → Carro, Moto, Caminhão;
  • Funcionário → Professor, Diretor, Secretário;
  • Forma Geométrica → Círculo, Quadrado, Retângulo;
  • Conta Bancária → Conta Corrente, Conta Poupança.

Nesses casos, é possível identificar características comuns e criar uma classe abstrata para representar a estrutura principal.


Resumo

A abstração permite representar apenas os aspectos essenciais de um objeto, ocultando detalhes desnecessários.

Além disso, as classes abstratas funcionam como modelos para outras classes, enquanto os métodos abstratos definem comportamentos que devem ser implementados pelas subclasses.

Portanto, utilizar abstração ajuda a criar sistemas mais organizados, reutilizáveis e fáceis de manter, tornando o desenvolvimento orientado a objetos mais eficiente.


Exercícios de Fixação

Exercício 1 – Sistema de Animais

Crie uma classe abstrata chamada Animal contendo o atributo nome e o método abstrato emitirSom(). Em seguida, crie as classes Cachorro e Gato, implementando o método de acordo com o som de cada animal.


Exercício 2 – Sistema de Veículos

Crie uma classe abstrata chamada Veiculo contendo os atributos marca e modelo. Crie um método abstrato chamado acelerar(). Depois, implemente as classes Carro e Moto.


Exercício 3 – Funcionários

Crie uma classe abstrata chamada Funcionario contendo o atributo nome e o método abstrato calcularSalario(). Crie as classes Professor e Secretario.


Exercício 4 – Formas Geométricas

Crie uma classe abstrata chamada FormaGeometrica contendo o método abstrato calcularArea(). Depois, implemente as classes Quadrado e Retangulo.


Exercício 5 – Contas Bancárias

Crie uma classe abstrata chamada ContaBancaria contendo saldo e um método abstrato chamado sacar(). Em seguida, implemente as classes ContaCorrente e ContaPoupanca.


Exercício 6 – Sistema de Pagamentos

Crie uma classe abstrata chamada Pagamento contendo o método abstrato realizarPagamento(). Depois, implemente as classes Pix, CartaoCredito e Boleto.


Exercício 7 – Produtos

Crie uma classe abstrata chamada Produto contendo nome e preço. Crie o método abstrato exibirInformacoes(). Implemente as classes Livro e Eletronico.


Exercício 8 – Transporte

Crie uma classe abstrata chamada Transporte contendo o método abstrato calcularTempoViagem(). Implemente as classes Onibus e Aviao.


Exercício 9 – Personagens de Jogo

Crie uma classe abstrata chamada Personagem contendo os atributos nome e vida. Crie o método abstrato atacar(). Implemente as classes Guerreiro e Mago.


Exercício 10 – Sistema de Dispositivos

Crie uma classe abstrata chamada Dispositivo contendo o atributo marca e o método abstrato ligar(). Implemente as classes Notebook, Smartphone e Tablet.


Desafio

Crie um sistema completo de uma escola utilizando abstração. Crie uma classe abstrata chamada Pessoa com os atributos nome e idade. Em seguida, implemente as classes Aluno, Professor e Diretor, cada uma contendo um método específico chamado exibirFuncao(). Depois, crie um programa principal para testar todas as classes.

By Infodiversao

Adoro tecnologia e informação. Gosto de jogos eletrônicos e de esportes. Desejo que todos tenham uma ótima vida!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

error: Conteúdo é protegido!