各サブオブジェクトは、HomeHeatingSystem が親であると認識し、 HomeHeatingSystem は、各サブオブジェクトに名前でアクセスできます。 この HomeHeatingSystem のビューは、オブジェクトの内部構造を示すため、オブジェクト構造ビューと呼ばれます。 サブオブジェクトは、システムの特性によって、互いにリンクすることも、あるいはリンクしないことも可能です。
コンポジションを使用して、親オブジェクトはポインターではなく値によってサブオブジェクトを保持します。 親オブジェクトは、サブオブジェクトの初期化と後のクリーンアップを行う責任があります。 詳細については、サブオブジェクトの初期設定を参照してください。
デフォルトで、サブオブジェクトは単一インスタンスを指定し、親オブジェクトの構造の 1 メンバーとして実装されます。 メンバーの名前とタイプは、サブオブジェクトの名前とタイプと同じです。 別の言い方をすれば、サブオブジェクトは、親オブジェクトに対するポインターとしてではなく、値によって親オブジェクトに組み込まれています。
サブオブジェクトの多重度が 1 より大きい数に指定されている場合、サブオブジェクトはデフォルトで配列として実装されます。 例えば、theFurnace と theRooms は、HomeHeatingSystem 構造のメンバーとして実装されています。 オブジェクト theFurnace は、タイプ Furnace の単一インスタンスとして実装され、 theRooms は、3 つの Rooms から成る配列として実装されています。
typedef struct HomeHeatingSystem HomeHeatingSystem;
struct HomeHeatingSystem {
RiCReactive ric_reactive;
/*** User implicit entries ***/
struct Furnace theFurnace;
struct Room theRooms[3];
};
サブオブジェクトの多重度が事前にわからない場合は、リンク・リストとして実装されます。 例えば、theRooms の多重度を 3 ではなく * と指定した場合、これは次のように RiCList として実装されます。
struct HomeHeatingSystem {
RiCReactive ric_reactive;
/*** User implicit entries ***/
struct Furnace theFurnace;
RiCList theRooms;
};
また、サブオブジェクトは、他のタイプの動的コンテナー (コレクションなど) を使用して実装することもできます。 CG::Relation::Implementation プロパティーを使用して具象関係を実装する方法を指定します。 例えば、theRooms の Implementation プロパティーを UnboundedUnordered に設定すると、 theRooms は、RiCList あるいは配列としてではなく RiCCollection として実装されます。
サブジェクト RiCContainers の下のプロパティーにより、関係の実装に使用される多種多様なコンテナー用に関数を生成する方法が決まります。 「フィーチャー」ウィンドウの該当する「プロパティー」タブにあるプロパティーの定義を参照してください。