다음 그림에 표시된 샘플 오브젝트 모델 다이어그램은 theFurnace 및 theRooms 사이의 대칭적 연관을 보여줍니다. 이 연관은 하나의 난방로가 방에 제공하는 to-many 링크입니다.

기본적으로 링크에는 단일 인스턴스가 있습니다. 단일 인스턴스에 대한 링크를 스칼라라고 합니다. 스칼라 관계는 해당 이름이 역할과 동일하고 해당 역할이 다른 오브젝트를 지시하는 오브젝트의 구조에 있는 데이터 멤버에 생성됩니다. 예를 들어, Furnace에 대한 유형 포인터의 itsFurnace 멤버가 Furnace에 대한 Room의 링크를 표시하기 위해 Room 구조의 멤버로 생성됩니다.
struct Room {
/*** User implicit entries ***/
struct Furnace * itsFurnace;
};
링크 액세서는 연관된 오브젝트에 대한 포인터를 리턴합니다. 이름의 형식은 <object>_get_<rolename>()입니다.
예를 들어, itsFurnace 역할에 대해 다음 액세서가 생성됩니다.
struct Furnace * Room_get_itsFurnace(const Room*
const me);
struct Furnace * Room_get_itsFurnace(
const Room* const me)
{
return (struct Furnace * )me->itsFurnace;
}
링크 뮤테이터는 연관된 오브젝트에 대한 포인터를 설정합니다. 링크가 대칭적인 경우 뮤테이터 역시 상호간의 링크를 설정합니다.
링크 뮤테이터에 대해 최대 세 개의 메소드를 생성할 수 있습니다.
예를 들어, 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");
}
}