Использование исходной версии при переопределении
Использование исходной версии при переопределении
Рассмотрим некоторый класс, который переопределяет подпрограмму, унаследованную от родителя. Обычная схема переопределения состоит в том, чтобы выполнить все, что делает исходная версия, предпослав ей или поместив за ней некоторые специальные действия.
Например, класс BUTTON, наследник класса WINDOW, может переопределить компонент display, рисующий кнопку, так чтобы вначале рисовалось окно, а затем появлялась рамка:
class BUTTON inherit
WINDOW
redefine display end
feature -- Вывод
display is
-- Изобразить как кнопку.
do
"Изобразить как нормальное окно"; -- См. ниже
draw_border
end
... Другие компоненты ...
end
где draw_border - это процедура нового класса. Для того чтобы "Изобразить как нормальное окно", нужно вызвать исходную версию display, технически известную как precursor (предшественник) процедуры draw_border.
Это достаточно общий случай, и желательно ввести для него специальное обозначение. Конструкцию
Precursor
можно использовать в качестве имени компонента, но только в теле переопределяемой подпрограммы. Вызов этого компонента, если нужно с аргументами, является вызовом родительской версии этой процедуры (предшественника).
Поэтому в последнем примере часть "Изобразить как нормальное окно" можно записать просто как
Precursor
Это будет означать вызов исходной версии этой процедуры из класса WINDOW, допустимый при переопределении процедуры классом-наследником WINDOW. Precursor - это зарезервированное имя сущности такое же, как Result или Current, и оно так же пишется курсивом с заглавной первой буквой.
В данном примере переопределяемый компонент является процедурой и поэтому вызов конструкции Precursor - это команда. Этот же вызов может участвовать при переопределении функции в выражении:
some_query (n: INTEGER): INTEGER is
-- Значение, возвращаемое версией родителя, если оно
-- положительно, иначе ноль
do
Result := (Precursor (n)).max (0)
end
В случае множественного наследования, рассматриваемого в следующей лекции, у процедуры может быть несколько предшественников, что позволяет объединить несколько наследуемых процедур в одну. Тогда для устранения неоднозначности нужно будет указывать родителя, например, Precursor {WINDOW}.
Заметим, что использование конструкции Precursor не делает компонент-предшественник компонентом данного класса, компонентом является только его переопределенная версия. (В частности, предшествующая версия может не удовлетворять новому инварианту.) Целью конструкции является облегчение переопределения в случае, когда новая версия включает старую.
В более сложном случае, когда, в частности, требуется использовать и предшествующую и новую версии в качестве компонентов класса, можно воспользоваться дублируемым наследованием, при котором родительский компонент, фактически, дублируется, и у наследника создаются два законченных компонента. Это будет подробно обсуждаться при рассмотрении дублируемого наследования.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Версии XSLT
Версии XSLT Спецификации XSLT разрабатывались значительно активнее, чем спецификации для всего XSL. Рекомендация XSLT 1.0 была окончательно принята 16 ноября 1999 г., и эта версия является сегодня основной версией XSLT.Затем появился рабочий проект XSLT 1.1 и, хотя первоначально он
Версии
Версии Как и в Документах Google, Таблицы умеют работать с версиями. Для сравнения нескольких вариантов таблицы выберите пункт «Файл – Хронология изменений». По сравнению с Документами этот механизм устроен гораздо проще: он позволяет лишь просматривать версии таблиц и
Сбор информации в исходной системе
Сбор информации в исходной системе Сбор данных из предыдущей операционной системы рассматривается в видеоролике «Урок 1.2. Сбор файлов и параметров со старого компьютера».Перед тем как вы решите установить на компьютер Windows Vista, следует, находясь в Windows XP, вставить в
Проверка версии Java и установка нужной версии
Проверка версии Java и установка нужной версии 1. Требования к установке I2P Перед установкой I2P необходимо проверить, какая версия Oracle Javaу Вас установлена на компьютере (рекомендуется Oracle Java 6/7).Узнать, какая версия Java установлена на Вашем компьютере можно, набрав в
20.9.6 Проблемы версии 1, исправленные в версии 2
20.9.6 Проблемы версии 1, исправленные в версии 2 Следующие свойства SNMP версии 1 были не слишком удачны:? Если одна из переменных в запросе get или get-next была некорректна, то отбрасывалось все сообщение.? Если запрашивались значения нескольких переменных и агент не мог
22.5.4 Взаимодействие адресов версии 6 с сетями версии 4
22.5.4 Взаимодействие адресов версии 6 с сетями версии 4 Еще один специальный формат используется узлами версии 6, которые связываются друг с другом через промежуточные сети версии 4 (это называется туннелями IPv4). Как показано на рис. 22.1, интерфейсам на границах должны быть
11. Версии Vista
11. Версии Vista Фонд свободного программного обеспечения (Free Software Foundation, FSF) запустил маркетинговую кампанию, направленную против операционной системы Windows Vista. Инициатива, получившая название BadVista, как предполагается, поможет пользователям понять, какие опасности может
Сбор информации в исходной системе
Сбор информации в исходной системе Данные надо собирать, пока новая система еще не установлена.Поэтому загрузите Windows XP и вставьте в DVD-привод установочный диск Windows Vista. Сработает автозапуск, и откроется окно, изображенное на рис. 1.9. В нем надо щелкнуть кнопкой мыши на
Благодарности к версии 1.1.0
Благодарности к версии 1.1.0 • Emmanuel Papirakis из Квебека, Канада за перенос всех примеров в версию 2.2 ядра.• Frodo Looijaard из Нидерландов за сообщение как создать многофайловый модуль ядра (1.2). Конечно, любые оставшиеся ошибки мои собственные, и если Вы думаете, что они делают книгу
4.12. Упражнение 12. Слияние расщепленной модели с исходной моделью
4.12. Упражнение 12. Слияние расщепленной модели с исходной моделью 1.Перейдите в модель "Деятельность компании". На диаграмме АО щелкните правой кнопкой мыши по работе "Отгрузка и получение".В контекстном меню выберите Merge Model. В появившемся диалоге Merge Model установите
Версии записей
Версии записей Когда запрос на изменение успешно отправлен на сервер, Firebird создает и записывает на диск ссылку, связывающую оригинальный образ строки, видимый в транзакции - иногда это называется дельтой, - с новой версией строки, содержащей изменения запроса.
Версии PGP.
Версии PGP. Теперь, когда вы знаете, для чего нужен PGP, вы наверняка захотите им воспользоваться.На этом этапе необходимо еще раз сказать о большой путанице, окружающей различные версии PGP. В виду политики Соединенных Штатов в отношении экспорта криптографического
2.1. Версии Windows 7
2.1. Версии Windows 7 Существует шесть выпусков Windows 7, которые предназначены как для самых слабых нетбуков, так и для мощных настольных компьютеров:? Windows 7 Starter (Начальная);? Windows 7 Home Basic (Домашняя базовая);? Windows 7 Home Premium (Домашняя расширенная);? Windows 7 Professional (Профессиональная);? Windows 7
Сохранение исходной версии при переопределении
Сохранение исходной версии при переопределении (Этот раздел посвящен весьма специфичному вопросу, и при первом чтении книги его можно пропустить.)Приступая к изучению наследования, мы познакомились с простой конструкцией Precursor, позволявшей переопределяемому