"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 객체 지향 프로그래밍의 추상화

객체 지향 프로그래밍의 추상화

2024-11-01에 게시됨
검색:643

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

추상화란 무엇입니까?

추상화는 복잡한 구현 세부 정보를 숨기고 필수 기능만 표시하는 시스템 기능을 나타내는 객체 지향 프로그래밍(OOP)의 기본 원칙 중 하나입니다. 추상화의 목표는 사용자가 객체가 수행하는 방식보다는 객체가 수행하는 작업에 집중할 수 있도록 하여 복잡한 객체와의 상호 작용을 단순화하는 것입니다.

실제로 추상화는 추상 클래스인터페이스를 사용하여 수행됩니다. 이는 하위 클래스 또는 구체적인 클래스에서 구현해야 하는 동작을 정의합니다.

왜 추상화를 사용하는가?

추상화는 다음과 같은 여러 이점을 제공합니다.

  • 단순성: 복잡성을 숨기고 사용자가 더 간단하고 직관적인 방식으로 개체와 상호 작용할 수 있도록 합니다.
  • 코드 재사용: 클래스와 인터페이스를 다양한 컨텍스트에서 재사용하여 일관성을 높일 수 있습니다.
  • 유지관리성: 구현 세부 사항을 변경해도 공개 인터페이스가 동일하게 유지되는 한 추상화를 사용하는 코드에 영향을 미치지 않습니다.

Java의 추상화 예

1. 추상 클래스 사용

추상 클래스를 사용하면 구현이 없는 메서드(추상 메서드)와 하위 클래스에서 사용할 수 있는 구체적인 메서드를 정의할 수 있습니다. Shape라는 추상 클래스와 Circle 및 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;
    }
}

클래스 사용

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

예상 출력:

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

2. 인터페이스 사용

인터페이스는 추상화를 구현하는 또 다른 방법입니다. 이를 구현하는 클래스가 제공해야 하는 메서드를 정의하지만 기본 구현을 제공하지는 않습니다.

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

클래스 사용

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

예상 출력:

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

최종 고려 사항

추상화는 객체 지향 프로그래밍의 기본 개념으로, 시스템을 더 간단하고 재사용 가능하며 유지 관리하기 쉽게 만드는 데 도움이 됩니다. 개발자는 추상 클래스와 인터페이스를 사용하여 구현 복잡성을 숨겨 사용자와 시스템의 다른 부분이 직관적인 방식으로 개체와 상호 작용할 수 있습니다. 추상화를 이해하고 적용하는 것은 효과적인 객체 지향 소프트웨어 개발에 매우 ​​중요합니다.

릴리스 선언문 이 기사는 https://dev.to/emanoelcarvalho/abstracao-em-programacao-orientada-a-objetos-5bb4?1에서 복제됩니다.1 침해 내용이 있는 경우, [email protected]에 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3