如下图中所显式的样本对象模型图,显式了 theFurnace 和 theRooms 之间的对称关联。该关联是一个对多链接,其中一个火炉服务三个房间。

缺省情况下,链接带有单个实例。到单个实例的链接称作标量。标量关系生成到对象的结构的数据成员中,该对象的名称与角色相同且类型为指向其他对象的指针。例如,类型指针指向 Furnace 的 itsFurnace 成员是生成作为 Room 结构以表示 Room 到 Furnace 的链接:
struct Room {
/*** User implicit entries ***/
struct Furnace * itsFurnace;
};
链接访问器返回指向关联对象的指针。其名称的格式为 <object>_get_<rolename>()。
struct Furnace * Room_get_itsFurnace(const Room*
const me);
struct Furnace * Room_get_itsFurnace(
const Room* const me)
{
return (struct Furnace * )me->itsFurnace;
}
链接增变器设置指向关联对象的指针。如果链接是对称的,增变器还会设置互利链接。
void Room_setItsFurnace(Room* const me, struct Furnace
*p_Furnace);
这是链接增变器的实施。Furnace 和 Room 之间的链接是对称的,因此增变器还会设置互利链接:
void Room_setItsFurnace(Room* const me, struct Furnace
*p_Furnace) {
if(p_Furnace != NULL)
Furnace__addItsRoom(p_Furnace, me);
Room__setItsFurnace(me, p_Furnace);
}
如果链接是对称关系,那么第一个增变器会调用第二个,其名称中在单词“set”前有一个双下划线:
void Room__setItsFurnace(Room* const me, struct Furnace
*p_Furnace) {
if(me->itsFurnace != NULL)
Furnace__removeItsRoom(me->itsFurnace, me);
Room___setItsFurnace(me, p_Furnace);
}
如果链接是对称关系,那么第二个增变器会调用第三个,其名称中在单词“set”前有三个下划线:
void Room___setItsFurnace(Room* const me,
struct Furnace * p_Furnace) {
me->itsFurnace = p_Furnace;
if(p_Furnace != NULL) {
NOTIFY_RELATION_ITEM_ADDED(me, Room, Furnace,
"itsFurnace", p_Furnace, FALSE, TRUE);
}
else
{
NOTIFY_RELATION_CLEARED(me, Room,"itsFurnace");
}
}