Для реализации зависимостей есть те же две возможности, что и в
случае объектно-ориентированных окружений: отображение зависимостей на указатели
(ссылки), или реализация зависимостей с помощью вспомогательных объектов.
Если зависимости отображаются на указатели (наиболее
традиционный подход для бинарных зависимостей), для этих указателей
предусматриваются дополнительные поля в структурах (записях), представляющих
объекты взаимно-зависимых классов; если зависимость множественная (хотя бы в
одну из сторон), то представляющий ее указатель ссылается не на класс, а на
последовательность (в смысле STL) указателей объектов соответствующего класса.
Поскольку все зависимости двусторонние, каждый объект из указанной
последовательности тоже должен иметь указатель, определяющий рассматриваемую
зависимость.
С помощью вспомогательных объектов обычно реализуются
зависимости, которые трудно представить через указатели (например, зависимости
между несколькими классами).
В качестве примера первого способа реализации зависимостей
рассмотрим реализацию зависимости (типа "много к одному") между
классами Item и Group: struct Item
{
struct ItemClass* class;
struct Group* group;
};
struct Group
{
struct GroupClass* class;
int item_count;
struct Item** items;
};
|