Можно, конечно, ввести на уровне класса
Отложенный компонент
Таким образом, нужен способ спецификации компонентов
rotate (center: POINT; angle: REAL) is
-- Повернуть на угол angle вокруг точки center.
deferred
end
и аналогично будет объявлен компонент
Объявленный таким образом компонент называется отложенным компонентом. Компонент, не являющийся отложенным, - имеющий реализацию (например, любой из ранее встретившихся нам компонентов), называется эффективным.
Эффективизация компонента
В некоторых собственных потомках класса
class POLYGON inherit
CLOSED_FIGURE
feature
rotate (center: POINT; angle: REAL) is
-- Повернуть на угол angle вокруг точки center.
do
... Команды для поворота всех вершин ...
end
...
end
Заметим, что
Этот процесс обеспечения реализацией отложенного компонента называется эффективизацией (effecting). (Эффективный компонент - это компонент, снабженный реализацией.)
Не нужно в предложении redefine некоторого класса описывать отложенные компоненты, получающие реализацию, поскольку у них не было настоящего определения в месте объявления. В этом классе просто помещаются определения таких компонентов, совместимые по типам с их первоначальными объявлениями как, например, в случае компонента
Задание реализации компонента, конечно, близко к его переопределению и, за исключением включения в предложении redefine, подчиняется тем же правилам. Поэтому нужен общий термин.
Определение: повторное объявление
Повторное объявление компонента - означает определение или переопределение его реализации.
Разница между этими двумя формами повторного объявления хорошо иллюстрируется примерами, приведенными при их определении:
[x]. При переходе от
[x]. При переходе от
Может появиться нужда в некотором изменении параметров наследуемого отложенного компонента, после которого оно все так же останется отложенным. Эти изменения могут затрагивать сигнатуру компонента - типы ее аргументов и результата - и его утверждения (точные ограничения будут указаны в следующей лекции). В отличие от перехода от отложенного компонента к эффективному, такой переход от отложенного к отложенному рассматривается как переопределение и требует предложения redefine. Приведем резюме четырех возможных случаев нового объявления:
| Повторное объявление компонента | Повторное объявление компонента | |
|---|---|---|
| Отложенный | Эффективный | |
| Отложенный | Переопределение | Отмена определения |
