JavaScript中級

中級 JavaScriptで学ぶオブジェクト指向設計|練習問題編

導入

オブジェクト指向設計は、複雑なシステムを効率的に構築するための強力なアプローチです。特にJavaScriptでは、プロトタイプベースのオブジェクト指向が特徴的で、柔軟性があります。本記事では、実務で役立つ具体的なシナリオを通じて、オブジェクト指向設計の重要性を探ります。

教科書レベルの解説(オブジェクト指向設計)

重要な概念の整理

オブジェクト指向設計は、データとその操作を一つの単位として捉える手法です。これにより、コードの再利用性や可読性が向上します。特に以下の概念が重要です:

  • カプセル化: データを隠蔽し、外部からの直接アクセスを制限することで、クラスの内部状態を保護します。
  • 継承: 既存のクラスを元に新しいクラスを作成することで、コードの重複を避け、拡張性を高めます。
  • ポリモーフィズム: 同じインターフェースで異なるクラスを扱うことができ、柔軟な設計が可能です。

コード例(JavaScript)


class Animal {
    constructor(name) {
        this.name = name;
    }

    speak() {
        console.log(`${this.name}が鳴いています`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name}がワンワンと鳴いています`);
    }
}

class Cat extends Animal {
    speak() {
        console.log(`${this.name}がニャーニャーと鳴いています`);
    }
}

const dog = new Dog('ポチ');
const cat = new Cat('タマ');

dog.speak();
cat.speak();

コードの行ごとの解説

  1. class Animal: 基本クラスAnimalを定義します。このクラスは動物の共通の特性を持ちます。
  2. constructor(name): コンストラクタで動物の名前を初期化します。
  3. speak(): 動物が鳴くメソッドを定義します。具体的な鳴き声はサブクラスで上書きされます。
  4. class Dog extends Animal: Animalクラスを継承したDogクラスを作成します。
  5. speak(): Dogクラスでは、独自の鳴き声を実装します。
  6. const dog = new Dog(‘ポチ’): Dogクラスのインスタンスを作成します。
  7. dog.speak(): Dogの鳴き声を出力します。

練習問題編

以下の問題に挑戦して、オブジェクト指向設計の理解を深めてください。

  1. 問題1: Animalクラスに「食べる」メソッドを追加し、各サブクラスで異なる食べ物を出力するように実装してください。
  2. 問題2: Animalクラスに「年齢」プロパティを追加し、サブクラスでその年齢を表示するメソッドを実装してください。
  3. 問題3: Animalクラスに「種類」プロパティを追加し、サブクラスで動物の種類を表示するメソッドを実装してください。

まとめ

  • オブジェクト指向設計は、データと操作を一つの単位として扱うことで、コードの可読性と再利用性を高める。
  • 継承を利用することで、コードの重複を避けることができる。
  • 実際の業務では、設計思想を適切に適用することが求められる。