conjugate: like Current is
... Все остальное - в точности, как раньше ...
Теперь в каждом порожденном классе тип результата
В классе
right: LINKABLE [G]
put_right (other: LINKABLE [G]) is...
замените
Эта схема применима ко многим процедурам
class DEVICE feature
alternate: like Current
set_alternate (a: like Current) is
-- Пусть a - альтернативное устройство.
do
alternate := a
end
... Прочие компоненты ...
end
Еще раз о базовых классах
С введением закрепленных типов нуждается в расширении понятие базового класса типа.
Сначала классы и типы были для нас едины, и это их свойство - отправной пункт ОО-метода, - по существу, сохраняется, хотя нам пришлось немного расширить систему типов, добавляя в классы родовые параметры. Каждый тип основан на классе и для типа определено понятие базового класса. Для типов, порожденных универсальным классом с заданными фактическими родовыми параметрами, базовым классом является универсальный класс, в котором удалены фактические параметры. Так, например, для
Закрепление типов - это еще одно расширение системы типов, которое, подобно двум предыдущим, сохраняет свойство выводимости каждого типа непосредственно из класса. Базовым для like anchor является базовый класс типа сущности
Правила о закрепленных типах
Теоретически ничто не мешает нам записать like anchor для самого элемента
| Вначале закрепленные опорные элементы (anchored anchor) были запрещены, но это новое, более либеральное правило придает системе типов большую гибкость. |
Пусть
Обратное определение не симметрично: единственный тип, совместимый с like anchor, - это он сам. В частности, с ним не совместим тип
anchor, other: T; x: like anchor
...
create other
x := other -- предупреждение: ошибочное присваивание
то в порожденном классе, где
Будем говорить, что
При закреплении формального параметра или результата, как в случае
r (other: like Current)
фактический параметр вызова, например,
Когда не используются закрепленные объявления
Не всякое объявление вида
