ГОСТ Р ИСО/МЭК 8825-3—2016
9.15.2Новое понятие — ссылочное поле — вводится для удовлетворения потребности в фик
тивном параметре, который ссылается на поле структуры кодирования. Руководителем является
зарезервированное слово REFERENCE, а разрешенной нотацией для реального параметра с этим
руководителем является некоторое имя поля структуры кодирования внутри этой структуры кодиро
вания. к которой приложен объект кодирования или набор объектов кодирования с таким параметром
(см. 17.5.15) (см. в D.1.11.3 пример ссылок на имена полей структуры кодирования).
9.16 Классы и структуры замены
9.16.1 При наличии спецификаций АСН.1 для традиционных протоколов (или при генерировании
специальных кодовых последовательностей для новых протоколов) считается нормальным игнориро
вать элементы кодирования, в частности поля определителя, которые присутствуют только для под
держки декодирования. В спецификацию АСН.1 включаются только поля, уместные для прикладного
кода (переносящие прикладную семантику).
9.16.2 Когда в таких протоколах используется более одного механизма для поддержки (к примеру)
конструкций SEQENCE OF в разных местах протокола, невозможно (либо не подходит) формально
указывать это в самой АСН.1.
9.16.3 Это означает, что неявно генерируемая структура кодирования не будет различать такие
конструкции и не будет содержать относящиеся к кодированию поля для определителей, и необходимо
изменить ее для «решения» обеих проблем, пока недоступна некоторая структура, соответствующая
требованиям кодирования.
9.16.4 Первым и простейшим изменением является замена некоторых экземпляров класса (вну
три неявно генерируемой структуры) на имена нового класса, которые присваиваются старому классу в
операторе присвоения класса. Это делается путем создания явно генерируемой структуры с
использо ванием раздела переименований в EDM. Этот раздел импортирует неявно генерируемую
структуру из модуля АСН.1 и выполняет указанные замены мест появления (текстуальных)
именованных классов. Замена может быть для всех текстуальных мест в пределах списка неявно
генерируемых классов (со ответствующих определениям типов АСН.1 в модуле) либо в пределах
компонентов одного из таких классов, либо «всех мест появления, за исключением» мест в
заданном определении или заданном компоненте (см. 15.3). Здесь важно отметить, что эти замены
ограничены использованием классов, которые были определены в том операторе присвоения класса
кодирования, который присваивает имя класса замены старому классу (например. «#Roplacement-
class ::= #Old-class»), поэтому данный ме ханизм иногда называют в разговорах «окрашиванием». Это
«окрашивание» указывает те части спец ификации. которым необходимы способы кодирования,
отличающиеся от способов других частей (при мер «окрашивания» дается в D.3.7).
9.16.5 Даже с использованием «окрашивания» явно генерируемая структура кодирования, как
и неявно генерируемая структура кодирования, содержит только поля, соответствующие полям в специ
фикации АСН.1. а обычно необходимо изменять генерируемые структуры, чтобы добавить поля
для определителей и т. п. Необходима новая структура замены (для всей или части исходной
структуры) с добавленными полями. Важно также указывать (для каждого поля исходной структуры),
какие именно поля структуры замены (и какие абстрактные значения такого поля) используются для
переноса семан тики исходных абстрактных значений. Мы говорим об отображении абстрактных
значений из исходной структуры в структуру замены.
9.16.6 Имеется много механизмов для определения объекта кодирования существующей структуры
в качестве объекта кодирования для полностью отличающейся структуры замены с определенными ото
бражениями значений между старой структурой и структурой замены. Эти механизмы описываются в
9.17.
9.16.7 Однако часто встречается более простая ситуация, в которой разработчик требует от ста
рой структуры сформировать (сохраняя свою целостность) один компонент структуры замены со всеми
абстрактными значениями, отображенными из старой структуры в соответствующее значение такого
компонента структуры замены. Для этого механизма, получающего всеобщее применение, структура
замены нуждается в фиктивном параметре для этого одного компонента и для создания его с реальным
параметром, установленным в старую структуру. Это описано в 9.11.3.
9.16.8 При определении объектов кодирования для какого-либо класса (любого класса) всегда
возможно указать, что первым действием этого объекта кодирования будет замена класса, кодируемого
им. на параметризованную структуру замены, создаваемую согласно 9.16.7, с абстрактными значения
ми. отображенными из старого класса в этот компонент.
18