В качестве опорного элемента можно использовать Current, обозначающий текущий экземпляр класса (о текущем экземпляре см. лекцию 7). Сущность, описанная в классе A как like Current, будет считаться в нем имеющей тип A, а в любом B, порожденном от A, - имеющей тип B.
Эта форма закрепленного объявления помогает решить оставшиеся проблемы. Исправим объявление conjugate, получив правильный тип результата функции класса POINT:
conjugate: like Current is ... Все остальное - в точности, как раньше ...
Теперь в каждом порожденном классе тип результата conjugate автоматически определяется заново. Так, в классе PARTICLE он меняется на класс PARTICLE.
В классе LINKABLE, найдя объявления
right: LINKABLE [G] put_right (other: LINKABLE [G]) is...
замените LINKABLE [G] на like Current. Компонент left класса BI_LINKABLE объявите аналогично.
Эта схема применима ко многим процедурам set_attribute. В классе DEVICE имеем:
class DEVICE feature alternate: like Current set_alternate (a: like Current) is -- Пусть a - альтернативное устройство. do alternate := a end ... Прочие компоненты ... end