Сохранение исходной версии при переопределении
Сохранение исходной версии при переопределении
(Этот раздел посвящен весьма специфичному вопросу, и при первом чтении книги его можно пропустить.)
Приступая к изучению наследования, мы познакомились с простой конструкцией Precursor, позволявшей переопределяемому компоненту вызывать его исходную версию. Механизм дублируемого наследования дает возможность обратиться к более универсальному (хотя и более "тяжеловесному") решению, пригодному в тех редких случаях, когда базовых средств не хватает.
Вернемся к известному нам классу BUTTON - потомку WINDOW, переопределяющему display:
display is
-- Показ кнопки на экране.
do
window_display
special_button_actions
end
где window_display выводит кнопку как обычное окно, а special_button_actions добавляет элементы, специфические для кнопки, отображая, например, ее границы. Компонент window_display в точности совпадает с WINDOW-вариантом display.
Мы уже знаем, как написать window_display, используя механизм Precursor. Если метод display переопределен в нескольких родительских классах, то желаемый класс можно указать в фигурных скобках: Precursor {WINDOW}. Того же результата можно достичь, прибегнув к дублируемому наследованию, заставив класс Button быть потомком двух классов Window:
indexing
WARNING: "Это первая попытка - данная версия некорректна!"
class BUTTON inherit
WINDOW
redefine display end
WINDOW
rename display as window_display end
feature
...
end
Одна из ветвей наследования меняет имя display, а потому, по правилу дублируемого наследования BUTTON, будет иметь два варианта компонента. Один из них переопределен, но имеет прежнее имя; второй переопределен не был, но именуется теперь window_display.
Этот вариант кода почти корректен, однако в нем не хватает подвыражения select. Если, как это обычно бывает, мы хотим выбрать переопределенную версию, то запишем:
indexing
note: "Это (корректная!)схема дублируемого наследования,%
% использующая оригинальную версию переопределяемого компонента"
class BUTTON inherit
WINDOW
redefine
display
select
display
end
WINDOW
rename
display as window_display
export
{NONE} window_display
end
feature
...
end
Если такая схема должна применяться к целому ряду компонентов, их можно перечислить вместе. При этом нередко возникает необходимость разрешить все конфликты именно в пользу переопределенных компонентов. В этом случае можно воспользоваться select all.
Предложение export (см. лекцию 16) определяет статус экспорта наследуемых компонентов класса. Так, WINDOW может экспортировать компонент display, а BUTTON сделать window_display скрытым (поскольку его клиенты в нем не нуждаются). Экспорт исходной версии наследуемого компонента может сделать класс формально некорректным, если она не соответствует новому инварианту класса.Для скрытия всех компонентов, полученных "в наследство" по одной из ветвей иерархии, служит запись export {NONE} all.
Такой вариант экспорта переопределенных компонентов и скрытия исходных компонентов под новыми именами весьма распространен, но отнюдь не универсален. Нередко классу наследнику необходимо скрывать или экспортировать оба варианта (если исходная версия не нарушает инвариант класса).
Насколько полезна такая техника дублируемого наследования для сохранения исходной версии компонента при переопределении? Обычно в ней нет необходимости, так как достаточно обратиться к Precursor. Поэтому этот способ следует использовать, когда старая версия нужна не только в целях переопределения, но и как один из компонентов нового класса.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Версии
Версии Как и в Документах 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 IP версии 6
Глава 22 IP версии 6 22.1 Введение За относительно короткий период времени персональные компьютеры стали подключаться к локальным сетям, которые объединялись в региональные сети. Многие из этих систем связаны со всем миром. Результатом стало распространение Интернета
22.5.3 Адреса версии 4
22.5.3 Адреса версии 4 В смешанном окружении адресов версий 4 и 6 IP-адреса систем версии 4, которые не поддерживают версию 6, отображаются в адреса версии 6 следующим образом:0:0:0:0:0:FFFF:a.b.c.dгде a.b.c.d — исходный
22.5.4 Взаимодействие адресов версии 6 с сетями версии 4
22.5.4 Взаимодействие адресов версии 6 с сетями версии 4 Еще один специальный формат используется узлами версии 6, которые связываются друг с другом через промежуточные сети версии 4 (это называется туннелями IPv4). Как показано на рис. 22.1, интерфейсам на границах должны быть
22.8 Автоконфигурация в версии 6
22.8 Автоконфигурация в версии 6 Раньше сети IP требовали большой работы по конфигурации и обслуживанию. Одним из преимуществ версии 6 является обеспечение эффективной автоматической инициализации. Очень важно помочь в переводе сайтов на новый формат адресов. Кроме того,
Сбор информации в исходной системе
Сбор информации в исходной системе Данные надо собирать, пока новая система еще не установлена.Поэтому загрузите Windows XP и вставьте в DVD-привод установочный диск Windows Vista. Сработает автозапуск, и откроется окно, изображенное на рис. 1.9. В нем надо щелкнуть кнопкой мыши на
Благодарности к версии 1.0.1
Благодарности к версии 1.0.1 Я не могу внести в список каждого, кто послал по e-mail мне сообщение, и если я не вписал именно Вас, я приношу извинения заранее. Следующие люди были особенно полезны: • Frodo Looijaard из Нидерландов За сервер с кучей информации и полезных советов по
4.12. Упражнение 12. Слияние расщепленной модели с исходной моделью
4.12. Упражнение 12. Слияние расщепленной модели с исходной моделью 1.Перейдите в модель "Деятельность компании". На диаграмме АО щелкните правой кнопкой мыши по работе "Отгрузка и получение".В контекстном меню выберите Merge Model. В появившемся диалоге Merge Model установите
Сохранение
Сохранение Принцип сохранения в Pinnacle Studio 11 несколько отличается от принципа сохранения файлов в других приложениях. В Studio сохранение во многих случаях выполняется автоматически, что позволяет при сбое программы продолжить работу с проектом, в котором если и были
Версии PGP.
Версии PGP. Теперь, когда вы знаете, для чего нужен PGP, вы наверняка захотите им воспользоваться.На этом этапе необходимо еще раз сказать о большой путанице, окружающей различные версии PGP. В виду политики Соединенных Штатов в отношении экспорта криптографического
Сохранение версий
Сохранение версий В процессе работы над курсовой или дипломной работой, а в особенности над диссертацией, необходимо сохранять не только все изменения, которые вносятся в текст документа, но и первоначальные варианты. Например, вы можете что-то исправить, а потом
Использование исходной версии при переопределении
Использование исходной версии при переопределении Рассмотрим некоторый класс, который переопределяет подпрограмму, унаследованную от родителя. Обычная схема переопределения состоит в том, чтобы выполнить все, что делает исходная версия, предпослав ей или поместив за