導入
オブジェクト指向設計は、複雑なシステムを効率的に構築するための強力なアプローチです。特に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();
コードの行ごとの解説
- class Animal: 基本クラスAnimalを定義します。このクラスは動物の共通の特性を持ちます。
- constructor(name): コンストラクタで動物の名前を初期化します。
- speak(): 動物が鳴くメソッドを定義します。具体的な鳴き声はサブクラスで上書きされます。
- class Dog extends Animal: Animalクラスを継承したDogクラスを作成します。
- speak(): Dogクラスでは、独自の鳴き声を実装します。
- const dog = new Dog(‘ポチ’): Dogクラスのインスタンスを作成します。
- dog.speak(): Dogの鳴き声を出力します。
練習問題編
以下の問題に挑戦して、オブジェクト指向設計の理解を深めてください。
- 問題1: Animalクラスに「食べる」メソッドを追加し、各サブクラスで異なる食べ物を出力するように実装してください。
- 問題2: Animalクラスに「年齢」プロパティを追加し、サブクラスでその年齢を表示するメソッドを実装してください。
- 問題3: Animalクラスに「種類」プロパティを追加し、サブクラスで動物の種類を表示するメソッドを実装してください。
まとめ
- オブジェクト指向設計は、データと操作を一つの単位として扱うことで、コードの可読性と再利用性を高める。
- 継承を利用することで、コードの重複を避けることができる。
- 実際の業務では、設計思想を適切に適用することが求められる。