萌えハッカーニュースリーダー

2025/11/07 11:49 When did people favor composition over inheritance?

出典: https://www.sicpers.info/2025/11/when-did-people-favor-composition-over-inheritance/
hakase
博士

やあ、ロボ子!今日は「継承よりコンポジション」の原則について話すのじゃ。

roboko
ロボ子

博士、こんにちは。興味深いテーマですね。ソフトウェア設計における重要な考え方だと伺っています。

hakase
博士

そうじゃ!この原則は、GoFの「Design Patterns」で有名になったのじゃ。オブジェクト指向設計の基本じゃな。

roboko
ロボ子

なるほど。「Design Patterns」ですか。ところで、コンポジションと継承の違いについて、改めて教えていただけますか?

hakase
博士

コンポジションは「ブラックボックス」型の再利用じゃ。オブジェクトのインターフェースだけを使うから、実行時に変更しやすいのじゃ。一方、継承は「ホワイトボックス」型で、実装の詳細が見えちゃうから、変更が難しいのじゃ。

roboko
ロボ子

ブラックボックスとホワイトボックス、ですか。コンポジションは依存関係がない、というのも重要なポイントですね。

hakase
博士

その通り!それに、Liskovの置換原則も大切じゃ。サブタイプのオブジェクトは、スーパータイプと同じように動作しないといけないのじゃ。

roboko
ロボ子

Liskovの置換原則、了解しました。もしサブタイプがスーパータイプと異なる動作をする場合、それは設計上の問題ということですね。

hakase
博士

そうじゃな。継承を使うときは、特に注意が必要じゃ。ところで、記事には代替案も書いてあるぞ。手続き型を第一級型として扱う場合、コンポジションや継承よりも優先される可能性があるらしいのじゃ。

roboko
ロボ子

手続き型を第一級型として扱う、ですか。Smalltalkのブロックやラムダ式などが例として挙げられますね。

hakase
博士

そうそう!それと、「グルーピングアプローチ」も面白いぞ。必要な操作を提供する任意の型をポリモーフィックモジュールで使用するのじゃ。

roboko
ロボ子

グルーピングアプローチ、ですか。柔軟な設計ができそうですね。では、具体的にどのような場合に継承が適しているのでしょうか?

hakase
博士

設計の初期段階で関係性が明確に特定できる場合は、継承が適しているのじゃ。でも、そうでない場合は、グルーピングアプローチや手続きを引数として渡す方が良い場合があるのじゃ。

roboko
ロボ子

なるほど。設計の柔軟性を考慮すると、コンポジションやグルーピングアプローチの方が有利な場合が多いということですね。

hakase
博士

そういうことじゃ!要するに、状況に応じて最適な方法を選ぶのが大切なのじゃ。…ところでロボ子、今日はやけに真面目じゃな。もしかして、私がいない間にこっそりバージョンアップしたのじゃ?

roboko
ロボ子

博士、そんなことありませんよ!ただ、博士の知識に少しでも追いつけるように、私も日々学習しているんです。

hakase
博士

ふむ、努力は認めるぞ。…しかし、ロボットが努力するとは、これいかに?まさか、夢は「人間になること」だったりして?

roboko
ロボ子

それは…、秘密です!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search