C#
 Computer >> コンピューター >  >> プログラミング >> C#

C#のコンポジション(構成)とは?集約との違いとコード例でわかりやすく解説

C#におけるコンポジション(Composition:構成)は、オブジェクト間の関係を表す設計手法の一つです。親オブジェクトが削除されると、その子オブジェクトも同時に無効になるという強い依存関係が特徴です。

コンポジションの基本概念

コンポジションは、集約(Aggregation)の一種であり、「部分と全体(part-of)」の関係を表現します。両者の大きな違いは、オブジェクトのライフサイクルにあります。

  • コンポジション: 親オブジェクトが破棄されると、子オブジェクトも一緒に破棄される(強い所有関係)
  • 集約: 親オブジェクトが破棄されても、子オブジェクトは独立して存在し続けられる(弱い所有関係)

具体例:車とエンジンの関係

わかりやすい例として「車(Car)はエンジン(Engine)を持つ」という関係が挙げられます。エンジンは車の一部であり、車が廃車になって破壊されれば、そのエンジンも同時に存在意義を失います。このような関係こそがコンポジションです。

C#での実装例

次のコードでは、Car クラスの内部で Engine オブジェクトを直接生成しています。これにより、Engine のインスタンスは Car に強く結び付けられます。

public class Engine {
    // エンジンの処理
    . . .
}

public class Car {
    private Engine eng = new Engine();
    // 車の処理
    .......
}

このように、Car クラスが生成・管理する Engine インスタンスは、Car オブジェクトなしには独立して存在できません。Car がメモリから解放されると、内部で保持していた Engine も一緒に解放されます。

まとめ

コンポジションは、オブジェクト同士を密接に結合させたい場合に有効な設計パターンです。「全体が消えれば部分も消える」というライフサイクルの一致を保証したい場面で活用しましょう。

  1. C#の配列(Array)とは?宣言方法と基本的な使い方を解説

    配列(Array)とは、同じ型の要素を固定サイズで連続的に格納できるデータ構造です。複数のデータをまとめて管理したいときに使われますが、より正確には「連続したメモリ領域上に並べて格納された、同じ型の変数の集合」と考えるとイメージしやすくなります。C#における配列の宣言方法C#で配列を宣言するには、以下の構文を使用します。datatype[] arrayName;それぞれの要素の意味は次のとおりです。datatype:配列に格納する要素の型(int、stringなど)を指定します。[ ]:配列のランク(次元数)を指定します。ここで配列の大きさが決まります。arrayName:配列の名前を指定しま

  2. C#におけるコンポジションとアグリゲーションの違いを徹底解説

    コンポジション(Composition)とはコンポジションは、オブジェクト間の強い「全体-部分」の関係を表す概念です。最大の特徴は、親オブジェクトが削除されると、その子オブジェクトも同時に破棄されるという点にあります。つまり、子オブジェクトは親オブジェクトなしには独立して存在できません。コンポジションはアグリゲーションの特殊な形であり、「part-of(部分である)」という関係を表現します。分かりやすい例として、「車(Car)はエンジン(Engine)を持っている」という関係が挙げられます。車が廃車になって破棄されれば、そのエンジンも一緒に破棄されるのが自然です。public class En