对多链接的类型如下所示:
会根据用于实施链接的容器为每种类型的链接生成适当的访问器和增变器。用于实施关系的缺省值可以通过角色的属性来修改。
缺省情况下,对多个对象的有序链接是作为 RiCList 来实施的。通过将 CG::Relation::Ordered 属性设置为 Checked 可使对多链接排序。该排序包含多重性已知(绑定有序关系)和多重性未知(未绑定有序关系)时的关系。
缺省情况下,对多个对象的无序链接是作为 RiCCollection 来实施的。通过将 Ordered 属性设置为 Cleared 可使多对链接取消排序。该链接包含多重性已知(绑定无序关系)和多重性未知(未绑定无序关系)时的关系。
如果子对象的多重性为 1(嵌入标量关系),对子对象的链接将实施为嵌入数据成员,如果子对象的多重性为大于 1 的数值(嵌入固定关系),则将实施为数组。
例如,HomeHeatingSystem 对象具有一个称作 itsFurnace 的子对象和三个称作 itsRoom 的子对象,全部作为组件嵌入。在这种情况下,theFurnace 与 HomeHeatingSystem 具有嵌入标量关系,而 theRooms 与其具有嵌入固定关系。这些关系的实施如下所示:
struct HomeHeatingSystem {
/*** User implicit entries ***/
struct Furnace theFurnace;
struct Room theRooms[3];
};
您可以为标量关系将 CG::Relation::Implementation 属性设置为 Scalar,或为固定关系设置为 Fixed 以达到相同效果。这些类型的关系实施仅在两种情况下使用:
缺省情况下,具有固定多重性的对多链接是作为 RiCCollection 来实施的。
缺省情况下,链接上指定了限定符的对多链接是作为 RiCMap 来实施的。
随机存取链接是一个已增强的关系,它可提供对容器中各项的随机存取。您可以通过将角色的 C_CG::Relation::GetAt 属性设置为 Checked 来给予对多链接随机存取。C_CG::Relation::GetAtGenerate 属性必须也设置为 Checked。该设置会对为容器使用适当的 getAt() 方法的角色生成访问器。$index 关键字会作为参数传递到 getAt() 方法以访问容器内的特定元素。$index 的缺省值是 int i。
例如,绑定有序关系的 GetAt 属性具有以下值:
RiCList_getAt(&$me$cname, $index)
将 theRooms 的 GetAt 属性设置为 Checked 会导致在 HomeHeatingSystem 中生成以下访问器以允许它访问特定的 Room:
struct Room * HomeHeatingSystem_getTheRooms(
const HomeHeatingSystem* const me, int i) {
return RiCList_getAt(&me->theRooms, i);
}