抽象化とは(Javaサンプル)

今回は、抽象化について見ていきたいと思います。

抽象化とは

抽象化は、複雑なシステムや問題を単純化し、重要な部分だけに焦点を当てるプロセスです。具体的には、詳細な実装の内部機構や複雑な手順を隠し、システムや問題の本質的な特徴や機能に注目することを指します。

抽象化の特徴や利点

  1. 詳細の隠蔽: 抽象化により、システムの詳細な内部実装が隠蔽されます。これにより、システム全体の理解が容易になります。また、異なるコンポーネントやモジュールの独立性が高まり、変更や修正が容易になります。
  2. 抽象化レベルの定義: 抽象化は、システムの異なるレベルで行われます。上位レベルでは、高度に抽象化された概念やインタフェースが使用され、下位レベルでは具体的な実装や詳細が考慮されます。これにより、システムをモジュール化し、再利用性を高めることができます。
  3. 複雑性の管理: 抽象化により、複雑なシステムや問題を簡略化し、重要な要素に絞ることができます。これにより、システム全体の複雑性を管理し、理解しやすくなります。また、複雑性を分割して扱うことで、開発プロセスやデバッグが容易になります。
  4. 機能の階層化: 抽象化は、システムの機能を階層化する手段としても使用されます。システムを基本的な機能や操作に分解し、それらを組み合わせることで複雑な機能を実現します。階層化された抽象化は、ソフトウェアのモジュール化や再利用性の向上に貢献します。

抽象クラスを使った例

Animal クラスを抽象クラス(上位レベル)として宣言し、makeSound() メソッドを抽象メソッドとして定義しています。抽象メソッドは、サブクラス(下位レベル)で具体的な実装を提供する必要があります。Animal クラスは抽象メソッドの他に、具体的な実装を持つ sleep() メソッドも提供しています。Dog クラスと Cat クラスは Animal クラスを継承し、makeSound() メソッドをオーバーライドして具体的な動作を定義しています。

abstract class Animal {
    protected String name;
    
    public Animal(String name) {
        this.name = name;
    }
    
    public abstract void makeSound();
    
    public void sleep() {
        System.out.println(name + " が寝ています。");
    }
}

class Dog extends Animal {
    public Dog(String name) {
        super(name);
    }
    
    public void makeSound() {
        System.out.println(name + " はワンワン");
    }
}

class Cat extends Animal {
    public Cat(String name) {
        super(name);
    }
    
    public void makeSound() {
        System.out.println(name + " はにゃにゃー");
    }
}

public class Main {
    public static void main(String[] args) {
        Animal dog = new Dog("ココ"); // インスタンス作成時の型を見てください。(ポリモフィズム)
        dog.makeSound(); 
        dog.sleep();
        
        Animal cat = new Cat("ムギ");
        cat.makeSound(); 
        cat.sleep();  
    }
}

コメントを残す