Здравствуйте, S.Yu.Gubanov, Вы писали:
SYG>Что делать? SYG>Приписывать каждый "g" к соответствующему объекту "a" и спускать его по дереву вниз? Это конечно выход, но, как я уже говорил, "высшие" объекты "a", "b", "c", "d" и "e" по своему смыслу не имеют никакого отношения к объекту "g", так что появление в их интерфейсе спускающей по дереву функции будет выглядеть диковато...
IMHO правильней всего сделать так:
объекты "a" и "f" должны быть объектами _разных_ классов но при этом реализовывать один интерефейс.
Таким образом ссыслку на объект "g" можно будет хранить только в объектах класса "f" как и требуется по условию.
Рекомендую обратить внимание на такой паттерн как Компановщик(Composite). Возможно также в качестве "g" можно будет использовать недовно обсуждавшийся здесь паттерн как Приспособленец(Flyweight).