継承の代わりにコンポジションとは?
けいしょうのかわりにこんぽじしょん
オブジェクト指向設計において、クラスの継承よりも部品の組み合わせ(コンポジション)でコードを再利用する設計原則です。
「継承の代わりにコンポジション(Composition over Inheritance)」とは、オブジェクト指向プログラミングにおける設計原則のひとつで、クラス間の機能共有を継承ではなくコンポジション(部品の組み合わせ)によって実現することを推奨する考え方です。
継承は親クラスの機能を子クラスに引き継ぐ強力な仕組みですが、深い継承ツリーは変更に脆くなる「脆弱な基底クラス問題」を招きます。また、「飛べる鳥」を継承した「ペンギン」のように、親クラスの性質を子クラスが必ずしも満たせない状況が生じることがあります。
コンポジションでは、必要な機能を持つ小さなオブジェクト(コンポーネント)を組み合わせてクラスを構成します。たとえば「走れる」「泳げる」「飛べる」という機能をそれぞれ独立したクラスやインターフェースとして定義し、必要な動物クラスに組み込みます。これにより次の利点が得られます。
- 依存関係が明確になり、変更の影響範囲が限定される
- 実行時に振る舞いを差し替えやすい(柔軟性)
- テストが書きやすく、ユニットテストの分離が容易
- クラスの責務が明確に保たれる
GoFのデザインパターン本にも「実装継承よりインターフェース継承とコンポジションを優先せよ」と記されており、現代のソフトウェア設計において広く受け入れられている指針です。継承を完全に排除するものではなく、「is-a(〜である)」関係には継承、「has-a(〜を持つ)」関係にはコンポジションを使い分けることが重要です。
使い方・例文
ゲームのキャラクター設計で、「攻撃できる」「魔法を使える」「飛べる」といった能力をそれぞれコンポーネントクラスとして作り、キャラクターに組み込む実装がこの原則の典型例です。
この用語をシェア
最終更新: