ГОСТ Р ИСО/МЭК 8824-4-2003
Пример
Рассмотрим следующее присваивание параметризованного класса объектов:
PARAMETERIZED-OBJECT-CLASS {TypeParam, INTEGER: valueParam,
INTEGER: VahieSetParam} : : =
CLASS {
&valueFieldl
&valueField2
&valueField3
&valueSetField
TypeParam,
INTEGER DEFAULT valueParam, INTEGER (ValueSetParam),
INTEGER DEFAULT {ValueSetParam}
Для определения правильного использования пустых ссылок “DummyReference” в контексте “ParameterizedAssignment” и, только для той цели, могут быть рассмотрены “DummyReference” для того, чтобы быть определенными следующим образом:
TypeParam : : = UnspecifieldType
valueParam INTEGER : : = unspecifieldIntegerValue
ValueSetParam INTEGER : : = {UnspecifieldInteger ValueSet}
где:
а) TypeParam есть пустая ссылка “DummyReference”, которая замещает “Type”. Поэтому TypeParam может быть использован везде, где можно использовать “typereference”, например как “Type” для значения фиксированного типа поля valueFieldl.
б) ValueParam есть пустая ссылка “DummyReference”, которая замещает значение целочисленного типа. Следовательно, valueParam можно использовать везде, где можно использовать “valueref-erence” для целочисленного значения, например как значение по умолчанию для значения фиксированного-типа поля valueField2.
в) ValueSetParam есть пустая ссылка “DummyReference”, которая замещает множество значений целочисленного типа. Следовательно, ValueSetParam можно использовать везде, где можно использовать “typereference” для целочисленного значения, например как “Type” в нотации “Con-tainedSubtype” для valueField3 и ValueSetField.
8.6 Каждая пустая ссылка “DummyReference” должна использоваться по крайней мере один раз в пределах своей области действия.
Примечание — Если пустая ссылка “DummyReference” так и не появилась, то соответствующий “ActualParameter” не влияет на определение, мог бы1 быгть просто «отброшен», хотя пользователю могло бы1 казаться, что имеет место некая спецификация.
Присваивания “ParameterizedValueAssignment”, “ParameterizedValueSetTypeAssignment”, “Parameterize-dObjectAssignment” и “ParameterizedObjectSetAssignment”, прямо или косвенно содержащие ссылку на себя, недействительны.
8.7 В определении “ParameterizedType”, “ParameterizedValueSet” или “ParameterizedOb-jectClass” пустая ссылка “DummyReference” не должна передаваться как тегированный тип (как фактический параметр) рекурсивной ссылке на этот “ParameterizedType”, “ParameterizedValueSet” или “ParameterizedObjectClass” (см. А.3).
8.8 В определении “ParameterizedType”, “ParameterizedValueSet” или “ParameterizedObjectClass” не должно быть циклической ссылки на определяемый элемент, если только такая ссылка прямо или косвенно не помечена как OPTIONAL или, в случае “ParameterizedType” и “ParameterizedValueSet”, дана путем ссылки на выборочный тип, по крайней мере одна из альтернатив которого является нециклической в определении.
8.9 Управляющий пустой ссылки “DummyReference” не должен включать в себя ссылку на другую “DummyReference”, если эта другая “DummyReference” также имеет управляющего.
8.10 В параметризованном присваивании правая сторона “: : = ” не должна состоять исключительно из “DummyReference”.
8.11 Управляющий “DummyReference” не должен требовать знания “DummyReference” или определяемого параметризованного имени ссылки.
5