При повторном объявлении компонента можно заменить тип компонента (для атрибутов и функций) или тип формального параметра (для подпрограмм) любым совместимым типом.
Правило использует понятие совместимости типов. Связка "или", стоящая в тексте правила, не исключает того, что при повторном объявлении функции мы можем одновременно изменить как тип результата функции, так и тип одного или нескольких ее аргументов.
Любое повторное объявление ведет к специализации, а, следовательно, к изменению типов. Так, с переходом к двунаправленным спискам параметры и результаты функций сменили свой тип на
Ковариантная типизация таит в себе немало проблем, которые возникают у создателей компиляторов, нередко перекладывающих их решение на плечи разработчиков приложений.
Закрепленные объявления
Правило повторного объявления типов способно свести на нет целый ряд преимуществ наследования. Почему это происходит и каково решение данной проблемы?
Несогласованность типов
Рассмотрим пример с участием класса
Рис. 16.10. Добавление элемента
put_right (v: G) is
-- Вставить элемент v справа от курсора.
-- Не передвигать курсор.
require
not after
local
new: LINKABLE [T]
do
create new.make (v)
put_linkable_right (new)
...
ensure
... См. приложение A ...
end
Для вставки нового элемента, имеющего значение
У потомков
Примеры из практики
Было бы ошибочно полагать, что проблема неоправданного переопределения возникает лишь там, где структура ориентирована на реализацию, как в
some_attribute: SOME_TYPE
set_attribute (a: SOME_TYPE) is do ... end
переопределение
Вот еще один пример, показывающий глубину проблемы (не ограниченной лишь процедурами
Рис. 16.11. Исходная и сопряженная точка
conjugate: POINT is
-- Точка, сопряженная с текущей
do
Result := clone (Current) -- Получить копию текущей точки
Result.move (0, -2*y) -- Перенести результат по вертикали
end
Рассмотрим теперь некий класс, порожденный от
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии