Сохранение исходной версии при переопределении

Сохранение исходной версии при переопределении

(Этот раздел посвящен весьма специфичному вопросу, и при первом чтении книги его можно пропустить.)

Приступая к изучению наследования, мы познакомились с простой конструкцией 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. Поэтому этот способ следует использовать, когда старая версия нужна не только в целях переопределения, но и как один из компонентов нового класса.

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Сбор информации в исходной системе

Из книги Windows Vista без напряга автора Жвалевский Андрей Валентинович

Сбор информации в исходной системе Данные надо собирать, пока новая система еще не установлена.Поэтому загрузите Windows XP и вставьте в DVD-привод установочный диск Windows Vista. Сработает автозапуск, и откроется окно, изображенное на рис. 1.9. В нем надо щелкнуть кнопкой мыши на


Сбор информации в исходной системе

Из книги Windows Vista автора Вавилов Сергей

Сбор информации в исходной системе Сбор данных из предыдущей операционной системы рассматривается в видеоролике «Урок 1.2. Сбор файлов и параметров со старого компьютера».Перед тем как вы решите установить на компьютер Windows Vista, следует, находясь в Windows XP, вставить в


Сохранение

Из книги Pinnacle Studio 11 автора Чиртик Александр Анатольевич

Сохранение Принцип сохранения в Pinnacle Studio 11 несколько отличается от принципа сохранения файлов в других приложениях. В Studio сохранение во многих случаях выполняется автоматически, что позволяет при сбое программы продолжить работу с проектом, в котором если и были


Новое в версии 1.0.1

Из книги Энциклопедия разработчика модулей ядра Linux автора Померанц Ори


Благодарности к версии 1.0.1

Из книги Реферат, курсовая, диплом на компьютере автора Баловсяк Надежда Васильевна

Благодарности к версии 1.0.1 Я не могу внести в список каждого, кто послал по e-mail мне сообщение, и если я не вписал именно Вас, я приношу извинения заранее. Следующие люди были особенно полезны: • Frodo Looijaard из Нидерландов За сервер с кучей информации и полезных советов по


Сохранение версий

Из книги Основы объектно-ориентированного программирования автора Мейер Бертран

Сохранение версий В процессе работы над курсовой или дипломной работой, а в особенности над диссертацией, необходимо сохранять не только все изменения, которые вносятся в текст документа, но и первоначальные варианты. Например, вы можете что-то исправить, а потом


Использование исходной версии при переопределении

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

Использование исходной версии при переопределении Рассмотрим некоторый класс, который переопределяет подпрограмму, унаследованную от родителя. Обычная схема переопределения состоит в том, чтобы выполнить все, что делает исходная версия, предпослав ей или поместив за


20.9.6 Проблемы версии 1, исправленные в версии 2

Из книги Моделирование бизнес-процессов с BPwin 4.0 автора Маклаков Сергей Владимирович

20.9.6 Проблемы версии 1, исправленные в версии 2 Следующие свойства SNMP версии 1 были не слишком удачны:? Если одна из переменных в запросе get или get-next была некорректна, то отбрасывалось все сообщение.? Если запрашивались значения нескольких переменных и агент не мог


Глава 22 IP версии 6

Из книги PGP: Кодирование и шифрование информации с открытым ключом. автора Левин Максим

Глава 22 IP версии 6 22.1 Введение За относительно короткий период времени персональные компьютеры стали подключаться к локальным сетям, которые объединялись в региональные сети. Многие из этих систем связаны со всем миром. Результатом стало распространение Интернета


22.5.3 Адреса версии 4

Из книги Флибуста. Обратная сторона [Инструкции по установке и запуску i2p, TOR и VPN для «чайников». v. 1.1] автора Коллектив авторов

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

Из книги Секреты приложений Google автора Балуев Денис

22.5.4 Взаимодействие адресов версии 6 с сетями версии 4 Еще один специальный формат используется узлами версии 6, которые связываются друг с другом через промежуточные сети версии 4 (это называется туннелями IPv4). Как показано на рис. 22.1, интерфейсам на границах должны быть


22.8 Автоконфигурация в версии 6

Из книги автора

22.8 Автоконфигурация в версии 6 Раньше сети IP требовали большой работы по конфигурации и обслуживанию. Одним из преимуществ версии 6 является обеспечение эффективной автоматической инициализации. Очень важно помочь в переводе сайтов на новый формат адресов. Кроме того,


4.12. Упражнение 12. Слияние расщепленной модели с исходной моделью

Из книги автора

4.12. Упражнение 12. Слияние расщепленной модели с исходной моделью 1.Перейдите в модель "Деятельность компании". На диаграмме АО щелкните правой кнопкой мыши по работе "Отгрузка и получение".В контекстном меню выберите Merge Model. В появившемся диалоге Merge Model установите


Версии PGP.

Из книги автора

Версии PGP. Теперь, когда вы знаете, для чего нужен PGP, вы наверняка захотите им воспользоваться.На этом этапе необходимо еще раз сказать о большой путанице, окружающей различные версии PGP. В виду политики Соединенных Штатов в отношении экспорта криптографического


Проверка версии Java и установка нужной версии

Из книги автора

Проверка версии Java и установка нужной версии 1. Требования к установке I2P Перед установкой I2P необходимо проверить, какая версия Oracle Javaу Вас установлена на компьютере (рекомендуется Oracle Java 6/7).Узнать, какая версия Java установлена на Вашем компьютере можно, набрав в


Версии

Из книги автора

Версии Как и в Документах Google, Таблицы умеют работать с версиями. Для сравнения нескольких вариантов таблицы выберите пункт «Файл – Хронология изменений». По сравнению с Документами этот механизм устроен гораздо проще: он позволяет лишь просматривать версии таблиц и