Конфликты при репликации: выделение
Конфликты при репликации: выделение
Рассмотрим теперь случай конфликтов переопределений, связанных с репликацией. Пусть при дублируемом наследовании происходит переопределение и переименование эффективного компонента, так что имеем два эффективных компонента, наделенных собственными именами.
Рис. 15.23. Необходимость выделения
Представленный на рисунке класс B меняет имя f на bf и переопределяет сам компонент. При этом мы опять полагаем, что C никак не меняет f, иное предположение нисколько не повлияет на ход нашего рассуждения. Более того, результат остался бы прежним, если бы B переопределял компонент f без его переименования, которое мы могли отложить до описания D. Допустим также, что речь не идет о соединении компонентов (которое происходит при переопределении обоих или отмене определения одного).
Поскольку компоненты наследуются под разными именами, то происходит их репликация. Класс D получает пару независимых компонентов, которые, в отличие от предыдущих случаев репликации, не являются копиями одного и того же компонента.
В отличие от случая совместного использования не возникает конфликта имен. Однако возникают другие конфликты, относящиеся к динамическому связыванию. Пусть полиморфная сущность a1 типа A (общий предок) на этапе выполнения связывается с экземпляром типа D (общим потомком). Что тогда означает вызов a1.f?
Правило динамического связывания гласит: вызываемый вариант f выбирается с учетом типа цели - объекта D. Но теперь это впервые нельзя истолковать однозначно: D содержит два равноценных варианта, известных под именами f и bf, соответствующих оригиналу f класса A.
Как и при конфликте имен, нельзя позволять компилятору делать выбор, пользуясь собственными правилами, - это противоречило бы принципам ясности и надежности. Управление ситуацией должно оставаться за автором разработки.
Для устранения неоднозначности необходим простой языковой механизм - предложение select. Вот версия класса, в которой предпочтение при динамическом связывании сущности f типа A отдается версии класса C:
class D inherit
B
C
select f end
feature
...
end
В этом варианте предпочтение отдается версии класса B:
class D inherit
B
select bf end
C
feature
...
end
Синтаксически предложение select следует за предложениями rename, undefine и redefine, если таковые имеются (выбор осуществляется после переименования и переопределения). Применение этого механизма регламентирует следующее правило:
Правило выделения
Класс, наследовавший две или более различные и эффективные версии компонента дублируемого предка и не переопределивший их, должен включить одну из них в предложение select.
Механизм select устраняет неоднозначность раз и навсегда. Потомкам класса нет необходимости (и они не должны) повторять выделение.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
9.4.2. Конфликты по прерываниям
9.4.2. Конфликты по прерываниям Сначала надо определить, какое прерывание использует ваша мышь, и убедиться, что она не конфликтует с каким-нибудь другим устройством. Этот момент очень важен, потому что под Linux мышь не может использовать одно и то же прерывание с каким-либо
19.6.10 Выделение в тексте
19.6.10 Выделение в тексте Иногда требуется выделить фрагмент текста особым образом, например полужирным шрифтом или курсивом. Это можно сделать двумя способами:1. Оставить детали вывода на усмотрение браузера<ЕМ> Обычно выводится курсивом. </ЕМ><STRONG> Обычно
22.4.1 Выделение адресов
22.4.1 Выделение адресов 128-разрядное пространство адреса обеспечивает место для множества различных типов адресов, включая:? Иерархические глобальные одноадресные рассылки на основе адресов провайдеров? Иерархические глобальные одноадресные рассылки по
1.5.1. Конфликты Fedora Core 1 и 2 с различным оборудованием
1.5.1. Конфликты Fedora Core 1 и 2 с различным оборудованием Материнские платы ASUSНа материнскую плату ASUS серии P4P800 Fedora Core 2 не устанавливается. Пока данная проблема не решена. Остается сменить либо материнскую плату, либо дистрибутив. Следить за ходом устранения ошибки можно по
Выделение ячеек
Выделение ячеек Как вам уже известно, чтобы сделать активной одну ячейку, нужно ее выделить. В Excel также можно делать активными группы ячеек, или, как принято говорить, диапазоны ячеек.Чтобы выделить прямоугольный диапазон ячеек, то есть ячейки, которые находятся рядом,
Выделение объектов
Выделение объектов Многообразие инструментов быстрого редактирования и трансформации объектов с минимальными усилиями является одним из ключевых средств повышения продуктивности при работе в AutoCAD 2010.В предыдущей главе мы говорили о создании новых объектов. Однако при
Выделение объектов
Выделение объектов Только что созданный объект является выделенным. Понять, что объект является выделенным, очень просто: в окнах Тор (Вид сверху), Front (Вид спереди), Left (Вид слева) он всегда имеет контур белого цвета, в окне проекции Perspective (Перспективный вид) выделенный
Выделение ячеек
Выделение ячеек Напомним, чтобы выделить отдельную ячейку, на ней необходимо щелкнуть кнопкой мыши, при этом ячейка будет заключена в жирную рамку. Кроме того, ячейку можно выделять с помощью клавиатуры: используя клавиши управления курсором (клавиши со стрелками),
Выделение памяти
Выделение памяти Сначала следует определить место для размещения строки при вводе. Как было отмечено раньше, это значит, выделить память, достаточную для размещения любых строк, которые мы предполагаем читать. Не следует надеяться, что компьютер подсчитает длину
Блокировки и конфликты блокировок
Блокировки и конфликты блокировок В Firebird блокировки управляются относительным возрастом транзакций, а записи управляются системой поддержки версий. Все блокировки применяются на уровне строки, за исключением тех случаев, когда транзакция оперирует на уровне изоляции
Конфликты блокировки
Конфликты блокировки Конфликт блокировки появляется, когда конкурирующие транзакции пытаются изменить или удалить одну и ту же строку в то время, когда вид состояния базы данных для этих транзакций частично перекрывается. Конфликты блокировок являются запланированным
Выделение
Выделение Чтобы выделить объект, необходимо включить режим выделения (см. предыдущий подраздел). Для выделения одиночного объекта следует щелкнуть по нему указателем мыши. Вокруг этого объекта появится рамка с маркерами. Рамки для прямоугольника, эллипса и текста
Выделение объектов
Выделение объектов Многообразие инструментов быстрого редактирования и трансформации объектов с минимальными усилиями является одним из ключевых средств повышения вашей продуктивности при работе в AutoCAD 2009.В предыдущей главе мы говорили о создании новых объектов.
Выделение
Выделение В главе 1, где говорится о Microsoft Windows, мы уже знакомились с понятием выделения. Однако это понятие настолько фундаментально, что мы возвращаемся к нему снова и будем возвращаться еще не раз. В этой главе мы обсудим два вида выделения: выделение текста и выделение
Конфликты поколений
Конфликты поколений Рассмотрим виды конфликтов между взрослым и ребенком.1. Конфликт неподчинения.Ребенок отказывается выполнять те или иные требования, причем совсем недавно они не вызывали такой реакции. Отказ обычно высказывается словесно или показывается
Эволюция эволюции: от генетического наследования к интратехнической репликации т-мемов Дмитрий Шабанов
Эволюция эволюции: от генетического наследования к интратехнической репликации т-мемов Дмитрий Шабанов Опубликовано 30 марта 2013<p Человек – не статический центр мира, как он долго полагал, а ось и вершина эволюции, что много прекраснее. Пьер Тейяр де ШарденВ этой