平成30年秋期問49

今回はこちら
委譲(デリゲーション)についてです。
**委譲(Delegation)**とは、あるオブジェクトが自身で処理を行わず、別のオブジェクトに処理を任せる(委譲する)デザインパターンです。継承(Inheritance)とは異なり、動的な処理の委譲が可能で、柔軟な設計ができます。
オブジェクト自身では処理を行わずに、別のオブジェクトに処理を任せるのが委譲(デリゲーション)です。
委譲は、継承(インヘリタンス)と違い動的な処理の委譲が可能で、柔軟な設計ができます。
ア
伝搬です。
**伝搬(Propagation)**とは、あるオブジェクトで発生したイベントや処理が、別のオブジェクトに影響を及ぼすことを指します。主に以下のような場面で使用されます。
1. 例: 例外の伝搬(Exception Propagation)
メソッド内で発生した例外が、呼び出し元へと**自動的に伝わる(伝搬する)**こと。
ウ
継承です。
**継承(Inheritance)**とは、既存のクラス(親クラス)を基に新しいクラス(子クラス)を作成し、親クラスの機能を引き継ぐ(再利用する)仕組みです。
エ合成です。
合成(Composition)とは?
合成は、「あるクラスが別のクラスのインスタンス(部品)を持つ」 という関係を表します。これは 「全体-部分」 の関係を表現するのに使われ、「強い結びつき」 があるのが特徴です。
たとえば、「車」と「エンジン」の関係を考えてみます。
• 「車(Car)」は「エンジン(Engine)」を持っている
• エンジンは車がなければ存在できない(エンジン単体では意味をなさない)
このような関係を 合成(Composition) と呼びます。
合成と委譲の違い
• 合成(Composition)
• 「全体」が「部分」を持つ(例:車とエンジン)
• 部分(Engine)は、全体(Car)がないと存在できない
• クラスのインスタンスを直接持つ
• 委譲(Delegation)
• あるクラスが別のクラスの機能を借りる(例:会社と業務委託)
• インスタンスを持つが、必ずしも所有しない(他で使い回せる)
• has-a の関係はあるが、弱い結びつき
合成を使うべき場面
• 「あるオブジェクトが別のオブジェクトなしでは成り立たない」場合
• 強い結びつきが必要なとき(例えば、「人」と「心臓」など)
• 継承よりも柔軟にコードを組みたいとき(「車はエンジンを持つ」のであり、「車はエンジンである」ではない)
引用元
https://www.fe-siken.com/s/kakomon/30_aki/q49.html
ChatGPT