「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > オブジェクト指向プログラミングにおける抽象化

オブジェクト指向プログラミングにおける抽象化

2024 年 11 月 1 日に公開
ブラウズ:174

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

抽象化とは何ですか?

抽象化は、オブジェクト指向プログラミング (OOP) の基本原則の 1 つで、複雑な実装の詳細を隠し、重要な機能のみを表示するシステムの機能を指します。抽象化の目標は、ユーザーがオブジェクトがどのように機能するかではなく、その機能に集中できるようにすることで、複雑なオブジェクトとの対話を簡素化することです。

実際には、抽象化は 抽象クラスインターフェイス を使用して実現されます。これらは、サブクラスまたは具象クラスによって実装する必要がある動作を定義します。

抽象化を使用する理由

抽象化にはいくつかの利点があります:

  • シンプルさ: 複雑さを隠し、ユーザーがよりシンプルかつ直感的な方法でオブジェクトを操作できるようにします。
  • コードの再利用: クラスとインターフェイスはさまざまなコンテキストで再利用でき、一貫性が促進されます。
  • 保守性: パブリック インターフェイスが同じである限り、実装の詳細を変更しても、抽象化を使用するコードには影響しません。

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. インターフェースの使用

インターフェイスは、抽象化を実装するもう 1 つの方法です。これらは、それを実装するクラスが提供する必要があるメソッドを定義しますが、デフォルトの実装は提供しません。

// 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-promao-orientada-a-objetos-5bb4?1に再現されています。
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3