"If a worker wants to do his job well, he must first sharpen his tools." - Confucius, "The Analects of Confucius. Lu Linggong"
Front page > Programming > Abstraction in Object-Oriented Programming

Abstraction in Object-Oriented Programming

Published on 2024-11-01
Browse:397

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

What is Abstraction?

Abstraction is one of the fundamental principles of Object Oriented Programming (OOP) that refers to the ability of a system to hide complex implementation details and show only essential functionalities. The goal of abstraction is to simplify interaction with complex objects by allowing users to focus on what an object does, rather than how it does it.

In practice, abstraction is accomplished through the use of abstract classes and interfaces, which define behaviors that must be implemented by subclasses or concrete classes.

Why Use Abstraction?

Abstraction offers several benefits:

  • Simplicity: Hides complexity and allows users to interact with objects in a simpler and more intuitive way.
  • Code Reuse: Classes and interfaces can be reused in different contexts, promoting consistency.
  • Maintainability: Changes to implementation details do not affect code that uses the abstraction as long as the public interface remains the same.

Examples of Abstraction in Java

1. Using Abstract Classes

Abstract classes allow you to define methods that have no implementation (abstract methods) and concrete methods that can be used by subclasses. Let's create an example with an abstract class called Shape and subclasses Circle and Rectangle.

// 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());
    }
}
// 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;
    }
}
// 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;
    }
}

Using 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
    }
}

Expected Output:

A área é: 78.53981633974483
A área é: 24.0

2. Using Interfaces

Interfaces are another way to implement abstraction. They define methods that the classes that implement them must provide, but they do not provide a default implementation.

// Interface
public interface Forma {
    double calcularArea();
    void imprimirArea();
}
// 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());
    }
}
// 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());
    }
}

Using 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
    }
}

Expected Output:

A área do círculo é: 78.53981633974483
A área do retângulo é: 24.0

Final Considerations

Abstraction is a fundamental concept in Object Oriented Programming that helps to create simpler, reusable and easier to maintain systems. By using abstract classes and interfaces, developers can hide implementation complexity, allowing users and other parts of the system to interact with objects in an intuitive way. Understanding and applying abstraction is crucial to effective object-oriented software development.

Release Statement This article is reproduced at: https://dev.to/emanoelcarvalho/abstracao-em-programacao-orientada-a-objetos-5bb4?1 If there is any infringement, please contact [email protected] to delete it
Latest tutorial More>

Disclaimer: All resources provided are partly from the Internet. If there is any infringement of your copyright or other rights and interests, please explain the detailed reasons and provide proof of copyright or rights and interests and then send it to the email: [email protected] We will handle it for you as soon as possible.

Copyright© 2022 湘ICP备2022001581号-3