DEV Community

Emanoel Carvalho
Emanoel Carvalho

Posted on

Abstração em Programação Orientada a Objetos

O que é Abstração?

Abstração é um dos princípios fundamentais da Programação Orientada a Objetos (POO) que se refere à capacidade de um sistema de ocultar detalhes de implementação complexos e mostrar apenas as funcionalidades essenciais. O objetivo da abstração é simplificar a interação com objetos complexos, permitindo que os usuários se concentrem no que um objeto faz, em vez de como ele faz.

Na prática, a abstração é realizada através do uso de classes abstratas e interfaces, que definem comportamentos que devem ser implementados por subclasses ou classes concretas.

Por que Usar Abstração?

A abstração oferece vários benefícios:

  • Simplicidade: Oculta a complexidade e permite que os usuários interajam com objetos de forma mais simples e intuitiva.
  • Reutilização de Código: Classes e interfaces podem ser reutilizadas em diferentes contextos, promovendo a consistência.
  • Facilidade de Manutenção: Alterações nos detalhes de implementação não afetam o código que usa a abstração, desde que a interface pública permaneça a mesma.

Exemplos de Abstração em Java

1. Usando Classes Abstratas

Classes abstratas permitem definir métodos que não têm implementação (métodos abstratos) e métodos concretos que podem ser usados pelas subclasses. Vamos criar um exemplo com uma classe abstrata chamada Forma e subclasses Circulo e Retangulo.

// Classe abstrata
public abstract class Forma {
    // Método abstrato
    public abstract double calcularArea();

    // Método concreto
    public void imprimirArea() {
        System.out.println("A área é: " + calcularArea());
    }
}
Enter fullscreen mode Exit fullscreen mode
// Subclasse Circulo
public class Circulo extends Forma {
    private double raio;

    public Circulo(double raio) {
        this.raio = raio;
    }

    // Implementando o método calcularArea
    @Override
    public double calcularArea() {
        return Math.PI * raio * raio;
    }
}
Enter fullscreen mode Exit fullscreen mode
// Subclasse Retangulo
public class Retangulo extends Forma {
    private double largura;
    private double altura;

    public Retangulo(double largura, double altura) {
        this.largura = largura;
        this.altura = altura;
    }

    // Implementando o método calcularArea
    @Override
    public double calcularArea() {
        return largura * altura;
    }
}
Enter fullscreen mode Exit fullscreen mode

Usando as Classes

public class Main {
    public static void main(String[] args) {
        Forma circulo = new Circulo(5);
        Forma retangulo = new Retangulo(4, 6);

        // Imprimindo áreas
        circulo.imprimirArea();  // Saída: A área é: 78.53981633974483
        retangulo.imprimirArea(); // Saída: A área é: 24.0
    }
}
Enter fullscreen mode Exit fullscreen mode

Saída Esperada:

A área é: 78.53981633974483
A área é: 24.0
Enter fullscreen mode Exit fullscreen mode

2. Usando Interfaces

Interfaces são outra forma de implementar a abstração. Elas definem métodos que as classes que as implementam devem fornecer, mas não fornecem uma implementação padrão.

// Interface
public interface Forma {
    double calcularArea();
    void imprimirArea();
}
Enter fullscreen mode Exit fullscreen mode
// Classe Circulo implementando a interface
public class Circulo implements Forma {
    private double raio;

    public Circulo(double raio) {
        this.raio = raio;
    }

    @Override
    public double calcularArea() {
        return Math.PI * raio * raio;
    }

    @Override
    public void imprimirArea() {
        System.out.println("A área do círculo é: " + calcularArea());
    }
}
Enter fullscreen mode Exit fullscreen mode
// Classe Retangulo implementando a interface
public class Retangulo implements Forma {
    private double largura;
    private double altura;

    public Retangulo(double largura, double altura) {
        this.largura = largura;
        this.altura = altura;
    }

    @Override
    public double calcularArea() {
        return largura * altura;
    }

    @Override
    public void imprimirArea() {
        System.out.println("A área do retângulo é: " + calcularArea());
    }
}
Enter fullscreen mode Exit fullscreen mode

Usando as Classes

public class Main {
    public static void main(String[] args) {
        Forma circulo = new Circulo(5);
        Forma retangulo = new Retangulo(4, 6);

        // Imprimindo áreas
        circulo.imprimirArea();  // Saída: A área do círculo é: 78.53981633974483
        retangulo.imprimirArea(); // Saída: A área do retângulo é: 24.0
    }
}
Enter fullscreen mode Exit fullscreen mode

Saída Esperada:

A área do círculo é: 78.53981633974483
A área do retângulo é: 24.0
Enter fullscreen mode Exit fullscreen mode

Considerações Finais

A abstração é um conceito fundamental na Programação Orientada a Objetos que ajuda a criar sistemas mais simples, reutilizáveis e fáceis de manter. Ao usar classes abstratas e interfaces, os desenvolvedores podem ocultar a complexidade de implementação, permitindo que usuários e outras partes do sistema interajam com objetos de maneira intuitiva. Compreender e aplicar a abstração é crucial para o desenvolvimento eficaz de software orientado a objetos.

Top comments (0)