При реализации языка может быть наложено ограничение на количество различных блочных уровней, на которых можно употреблять такие префиксы.
Сочленение
Пусть Сп — класс, имеющий последовательность префиксов С1 , С2 , … , Сп-1 и пусть X— объект, принадлежащий классу Сn. Тогда механизм сочленения приводит по существу к следующему:
· Совокупность атрибутов объекта Xявляется объединением совокупностей атрибутов, определенных в С1, С2,..., Сп. Относительно атрибута, декларированного в классе Ck(1<=k<=n), говорят, что он определен нa префиксальном уровне k.
· X имеет «правило действий», состоящее из операторов, взятых в некотором определенном порядке (см. ниже) из тел упомянутых классов. Считается, что оператор, содержащийся в теле класса Сkпринадлежит префиксальному уровню k.
· Из оператора префиксального уровня kможно обращаться ко всем атрибутам объекта X, определенным на префиксальном уровне kили ниже, за исключением атрибутов, сделавшихся недоступными из-за противоречащих определений на более высоких уровнях (<= k).
· Из оператора префиксального уровня kобъекта Xневозможно непосредственно обращаться к атрибутам этого объекта, определенным на префиксальных уровнях выше k, кроме как через виртуальные величины.
· В расщепленном теле класса уровня kсимвол innerпредставляет те операторы правила действий объекта X, которые принадлежат уровням выше, чем k, или пустой оператор, если k= n. Если ни один из классов С1, ..., Сп-1 имеет расщепленного, тела, операторы правила действий объекта Xупорядочены по возрастанию префиксальных уровней.
Формально составной объект может быть описан некоторой «сочлененной» декларацией класса. Считается, что процесс сочленения осуществляется до выполнения программы. Для того чтобы дать точное определение этого процесса, необходимо следующее определение.
Некоторое вхождение некоторого идентификатора в некоторый данный блок называется «неэкранированным вхождением в этот блок», если оно не является идентификатором атрибута, входящим в дистанционный идентификатор, и не входит в меньший блок, в котором ему придан локальный смысл. Здесь слово «блок» означает также: «декларация класса без ее префикса и без идентификатора класса» или «декларация процедуры без ее идентификатора».
Отметим, что неэкранированное вхождение идентификатора в некоторый блок вполне может иметь локальный в этом блоке смысл.
Процесс сочленения деклараций классов выполняется в порядке возрастания блочного уровня.
Декларации классов некоторой данной иерархии классов сочленяются в порядке возрастания префиксальных уровней. Декларация класса с непустым префиксом заменяется сочлененной декларацией класса, для получения которой исходная декларация, сначала модифицируется в соответствии со следующими двумя правилами:
· Если префикс отсылает к сочлененной декларации класса, в которой уже выполнены замены идентификаторов, то такие же замены выполняются для всех неэкранированных вхождений идентификаторов в ядро.
· Если затем идентификаторы атрибутов, определенные в ядре, имеют неэкранированные вхождения в префикс-класс, то для того, чтобы избежать конфликтов наименований,- все неэкранированные вхождения таких идентификаторов в ядро систематически заменяются. Однако идентификаторы, соответствующие виртуальным величинам, определенным в префикс-классе, изменению не подлежат.
Сочлененная декларация класса может быть теперь определена в терминах данной декларации (модифицированной, как только что было описано) и сочлененной декларации префикс-класса:
· Список формальных параметров сочлененной декларации состоит из списка формальных параметров префикс-класса, за которым следует список формальных параметров ядра.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.