ГОСТ Р И С 0 10303-11 — 2009
e) Не существует упорядочения значений для наращиваемого перечисления или расширяющего
перечисления.
f) Для перечисления, не являющегося ни наращиваемым, ни расширяющим, в качестве его области
определениядолжны быть заданы элементы перечисления.
д) Для перечисления, не являющегося наращиваемым, но являющегося расширяющим, должны
быть заданы элементы перечисления, расширяющие область определения наращиваемого перечисления,
на котором оно основано.
h)Два разных перечисляемых типа данных могут содержать одинаковый элемент
enumerationJd
в своих множествах имен. Если перечисляемые типыданных не являются расширениями одного наращи
ваемого типа данных, то их элементы
enumeration_id
относятся к разным понятиям, даже если их локаль
ные имена совпадают. Вданном случае, любая ссылка на элемент
enumerationJ d
(например, в выраже
нии)должна быть уточнена посредством идентификатора типа данных, чтобы обеспечить однозначность
ссылок. Ссылка при этом выглядит следующим образом:
typejd.enum erationjd.
П р и м е ч а н и е — Элемент typejd. используемый для уточнения элемента enumerationjd, всегда
определяется как перечисляемый тип данных.
Пример — В данном примере перечисляемые типы данных использованы для демонстрации
того, как могут двигаться различные виды транспортных средств.
TYPE car can move= ENUMERATION OF
(left, right, backward, forward);
ENDTYPE;
TYPE plane_can_move = ENUMERATION OF
(left, right backward, forward, up, down);
END_TYPE;
Элемент перечисления left имеет два независимых определения, задаваемых каждым типом
данных, компонентом которого он является. Не существует никакой связи между этими двумя
определениями идентификатора left. Сама по себе ссылка на left или right является неоднозначной.
Для того, чтобы разрешить данную неоднозначность, ссылка на любое из этих значений должна
быть уточнена посредством указания имени типа данных, например, car_can_move.left.
i) Наращиваемое перечисление и его расширения задают область определения, состоящую из
элементов
enum erationjd.
В пределах данной области определения все появления одного и того же
элемента
enum erationjd
обозначают одно и то же значение, даже если элемент
enum erationjd
определен в нескольких перечисляемых типах данных, относящихся кданной области определения.
Пример — В данном примере один элемент перечисления с именем red используется в двух
расширениях stopjight и canadianjlag области определения перечисляемого типа данных colour.
TYPE colour = EXTENSIBLE ENUMERATION; END_TYPE;
TYPE stopjight = ENUMERATION BASED.ON colourWITH (red. yellow, green); END_TYPE;
TYPE canadianjlag = ENUMERATION BASED_ON colour WITH (red. white); END_TYPE;
j) Объявление типа, в котором объявляется перечисляемый тип данных, недолжно содержать прави
ла для области определения (WHERE).
П р и м е ч а н и е — Приведенные выше правила обеспечивают то. что определенный тип данных дает
имя перечисляемому типу данных, и определенный тип данных не является конкретизацией перечисляемого
типа данных.
Пример — В данном примере показано, как наращиваемое перечисление может быть исполь
зовано для моделирования контекстно-зависимого понятия «одобрение». Элемент general_approval
представляет наиболее общее понятие одобрения, однозначно определяя только два значения.
Объявление general_approval как наращиваемого перечисления позволяет ему принимать контекст но-
зависимые значения в схемах, в которых объявляются его расширения. При использовании
данного элемента для представления области определения атрибута, допустимые значения атри
бута становятся контекстно зависимыми.
SCHEMA si;
TYPE general_approval = EXTENSIBLE ENUMERATION OF(approved, rejected):
END_TYPE;
END_SCHEMA:
SCHEMAs2;
USE FROM s1 (general_approval):
23