オブジェクト指向の原則3:依存関係逆転の原則とインタフェース分離の原則

Why take this course?
以下に、インタフェース分離の原則を解説するための「ドラクエの例」を用意します。この例では、ゲーム内のキャラクターが異なる「魔法」のインタフェースに依存するように設計されています。各役割(戦士や魔法使いなど)が自分の役割に合った魔法を選択できるように、インタフェース分離の原則に従って設計されています。
ドラクエの例
#01 インタフェース分離の原則
ゲーム内で様々なキャラクターが存在し、それぞれが異なる魔法を使用できるように設計されています。ここで「魔法」はインタフェースとして定義されており、具体的な実装(火球、召喚、治癒など)は遅延読み込み(Lazy Loading)または抽象クラス/インターフェースを介して提供されます。
#02 キャラクターを操作できるようにする
プレイヤーはゲーム内のキャラクターを操作し、そのキャラクターが適切な魔法を選択して使用することができます。この操作は、キャラクターの役割に依存していますが、具体的な魔法の実装には依存していません。
#03 役割に応じてインタフェースを分離する
各キャラクターは、自身の役割に応じた魔法インタフェースを実装しています。例えば、戦士型のキャラクターは戦闘力が高い魔法のみを提供するインターフェースを実装し、妖術師型のキャラクターは賢力が高い魔法のみを提供するインターフェースを実装することができます。
#04 ロールとしてのインタフェース
各キャラクターは、自分の役割(ロール)に合った「魔法」のインタフェースを実装することで、異なる具体的な魔法の実装に依存せずに柔軟に対応できます。これにより、新しい魔法を追加する場合も、既存のインタフェースに変更が必要なく、新たな実装を追加するだけで十分です。
#05 インタフェース分離の原則まとめと5大原則の総括
- 役割の堅牢性(Role Stability): キャラクターは自分の役割に依存していますが、実装されている魔法は変更可能です。これにより、キャラクターの役割が変わった場合も、新しい魔法を簡単に組み込むことができます。
- 拡張性(Extensibility): ゲーム内は新しい魔法を簡単に追加することができます。
- 可置換性(Substitutability): キャラクターが使用する魔法の実装は、適切なインタフェースを介して提供されるため、いつでも置き換えられることができます。
- 単一責任(Single Responsibility Principle): 各魔法の実装は独立して動作するように設計されており、複数の魔法が相互依存関係にあることなく個別に管理できます。
- 最小限の知識(Principle of Least Knowledge): キャラクターは自分が使う魔法のインタフェースについてしか知る必要があり、具体的な実装には依存せず、他の系統やコンポーネントについては知らなくてもいます。
このように、インタフェース分離の原則を適用することで、システムの柔軟性や保守性が向上し、新機能の追加やバグ修正が容易になります。また、コードの理解や再利用性も高まります。これはオブジェクト指向プログラミングの基本原則である「単一責任の原則」(Single Responsibility Principle)と「最小限の知識の原則」(Principle of Least Knowledge)によって明らかになります。
Loading charts...