Когда не используются закрепленные объявления
Когда не используются закрепленные объявления
Не всякое объявление вида x: A в классе A следует менять на x: like Current и не в каждой паре компонентов одного типа следует один из них делать опорным, а другой - закрепленным.
Закрепленное объявление - это своего рода обязательство изменения типа закрепленной сущности при смене типа опорного элемента. Как мы видели, оно не имеет обратной силы: объявив тип сущности как like anchor, вы теряете право на переопределение его в будущем (коль скоро новый тип должен быть совместим с исходным, а с закрепленным типом совместим только он сам). Пока не введено закрепление, остается свобода: если x типа T, то потомок может переопределить тип, введя более походящий тип U.
Достоинства и недостатки закрепления сущностей очевидны. Закрепление гарантирует, что вам не придется выполнять повторные объявления вслед за изменением типа опорного элемента, но оно раз и навсегда привязывает вас к типу опорного элемента. Это типичный случай "свободы выбора". (В каком-то смысле Фауст объявил себя like Мефистофель.)
Как пример нежелательного закрепления рассмотрим компонент first_child для деревьев, описывающий первого сына данного узла дерева. (При построении дерева он аналогичен компоненту first_element для списков, типом которого изначально является CELL [G] или LINKABLE [G].) Для деревьев требуется повторное объявление. Может показаться, что уместным использовать закрепленное объявление:
first_child: like Current
Но на практике это накладывает слишком много ограничений. Класс дерева может иметь потомков, представляющих разные виды деревьев (их узлов): UNARY_TREE (узлы с одним сыном), BINARY_TREE (узлы с двумя сыновьями) и BOUNDED_ARITY_TREE (узлы с ограниченным числом сыновей). При закреплении first_child все сыновья каждого узла должны иметь один и тот же отцовский тип.
Это может быть нежелательным при построении более гибких структур, например бинарного узла с унарным потомком. Для этого компонент нужно описать без закрепления:
first_child: TREE [G]
Это решение не связано с какими-то ограничениями, и для создания деревьев с узлами одного типа вы, оставив класс TREE без изменений, можете породить от него HOMOGENEOUS_TREE, где переопределить first_child как
first_child: like Current
что гарантирует неизменность типов всех узлов дерева.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Какие программы используются в этой книге
Какие программы используются в этой книге Вопрос далеко не праздный, учитывая то, что за программы сегодня приходится платить… Так что же за программы использовал автор?Только бесплатные!— Блокнот — простейший текстовый редактор, стандартно поставляемый в составе
27.7. «Закрепленные» параметры IPv6
27.7. «Закрепленные» параметры IPv6 Мы рассмотрели использование вспомогательных данных с функциями sendmsg и recvmsg для отправки и получения следующих семи различных типов объектов вспомогательных данных:1. Информация о пакете IPv6: структура in6_pktinfo, содержащая адрес получателя и
(3.26) Правда ли что W2k всегда загружает определённый набор dll, даже если они не используются?
(3.26) Правда ли что W2k всегда загружает определённый набор dll, даже если они не используются? Правда. Список этих DLL находится здесь:HKLMSYSTEMCurrentControlSetControlSession ManagerKnownDLLsТеоретически, если Вы уберёте из этого списка лишнее, это может освободить некоторое количество памяти и
3.13. Правда ли что XP всегда загружает определённый набор DLL, даже если они не используются?
3.13. Правда ли что XP всегда загружает определённый набор DLL, даже если они не используются? Правда. Список этих DLL находится здесь: HKLMSYSTEMCurrentControlSetControlSession ManagerKnownDLLs Теоретически, если вы уберёте из этого списка лишнее, это может освободить некоторое количество памяти и
Какие программы используются в этой книге
Какие программы используются в этой книге Вопрос далеко не праздный, учитывая то, что за программы сегодня приходится платить… Так что же за программы использовал автор?Только бесплатные!— Блокнот — простейший текстовый редактор, стандартно поставляемый в составе
Закрепленные и свободно перемещаемые окна
Закрепленные и свободно перемещаемые окна Подобно панелям инструментов, большинство окон редактора Visual Basic бывают закрепленными, т.е. вы можете привязать их к любой из четырех сторон рабочей области главного окна, где их не перекрывают другие окна. Ясно, что закрепление
20.3.6. В Unix API не используются исключительные ситуации
20.3.6. В Unix API не используются исключительные ситуации Язык С испытывает недостаток средств восстановления для обработки именованных исключительных ситуаций со связанными данными119. Таким образом, С-функции в Unix API сообщают об ошибках путем возвращения известного
20.3.6. В Unix API не используются исключительные ситуации
20.3.6. В Unix API не используются исключительные ситуации Язык С испытывает недостаток средств восстановления для обработки именованных исключительных ситуаций со связанными данными[154]. Таким образом, C-функции в Unix API сообщают об ошибках путем возвращения известного
10.2. Идентификаторы пользователей и групп, закрепленные за процессами
10.2. Идентификаторы пользователей и групп, закрепленные за процессами До сих пор речь шла о командах, выполняемых конкретными пользователями. Это не совсем точно, поскольку компьютер в действительности никогда не знает, кто из пользователей за ним работает. Если
ОБЪЯВЛЕНИЯ
ОБЪЯВЛЕНИЯ В этом разделе описываются формат и составные части объявлений переменных, функций и типов. В разделе 2.1 были введены понятия объявления и определения. Далее по тексту будем для краткости называть и объявления, и определения "объявлениями", если явно не
8.6.2. Using-объявления
8.6.2. Using-объявления Имеется механизм, позволяющий обращаться к членам пространства имен, используя их имена без квалификатора, т.е. без префикса namespace_name::. Для этого применяются using-объявления.Using-объявление начинается ключевым словом using, за которым следует
10. Когда открыть, а когда закрыть
10. Когда открыть, а когда закрыть Рассмотрев деловые модели, которые поддерживают разработку программного обеспечения с открытыми текстами, мы можем теперь приблизиться к общему вопросу о том, когда исходному коду, с точки зрения экономики, имеет смысл быть «открытым», а
Закрепленные объявления
Закрепленные объявления Правило повторного объявления типов способно свести на нет целый ряд преимуществ наследования. Почему это происходит и каково решение данной