Выбираемый тип данных определяет тип данных, позволяющий выбирать среди нескольких именованных типов данных. Выбираемый тип данных является обобщением именованных типов данных в своей области определения. Определенный тип данных, для которого выбираемый тип данных является базисным представлением, может добавлять ограничения на свою область определения посредством объявления локальных правил. Выбираемый тип данных может быть или не быть наращиваемым.
Областью определения выбираемого типа данных, который не является ни наращиваемым, ни расширяющим, является объединение областей определения именованных типов данных из его списка выбора.
Областью определения наращиваемого выбираемого типа данных является объединение областей определения именованных типов данных из его собственного списка выбора плюс объединение областей определения всех расширяющих выбираемых типов данных. Наращиваемый выбираемый тип данных задается посредством ключевого слова EXTENSIBLE.
Областью определения расширяющего выбираемого типа данных являются именованные типы данных из его собственного списка выбора плюс именованные типы данных, указанные непосредственно (а не через расширение) в наращиваемом выбираемом типе данных, на котором он основан. Расширяющий выбираемый тип данных задается посредством ключевого слова BASED_ON.
Выбираемый тип данных может быть как наращиваемым, так и расширяющим выбираемым типом данных. Наращиваемый выбираемый тип данных может быть задан без списка выбора, а также основан на другом наращиваемом выбираемом типе данных без задавания списка выбора, расширяющего данный базисный список выбора.
Только наращиваемый выбираемый тип данных может быть ограничен наличием в своей области определения только экземпляров объектов посредством ключевого слова GENERIC_ENTITY. В данном случае все элементы списка выбора должны быть элементами обобщенного объекта, где элемент обобщенного объекта определяется как относящийся к объектному типу данных либо к списку выбора из элементов обобщенного объекта. Все расширения данного выбираемого типа данных должны быть выбираемыми типами данных обобщенного объекта и должны задаваться посредством ключевого слова GENERIC_ENTITY.
Синтаксис: |
Правила и ограничения:
a) Все элементы в списке выбора должны относиться к объектному или определенному типу данных.
b) Только выбираемый тип данных должен использоваться в качестве базисного типа для определенного типа данных.
c) Выбираемый тип данных может быть расширен, только если в его определении указано ключевое слово EXTENSIBLE.
d) Элемент type_ref в select_extension должен быть ссылкой на наращиваемый выбираемый тип.
e) Для выбираемого типа данных, не являющегося ни наращиваемым, ни расширяющим, должен быть задан в качестве его области определения непустой список выбора.
f) Для выбираемого типа данных, не являющегося наращиваемым, но являющегося расширяющим, должен быть задан непустой список выбора, расширяющий область определения наращиваемого выбираемого типа данных, на котором он основан.
Примечание - Значение выбираемого типа данных может быть значением нескольких именованных типов данных, указанных в списке выбора для данного выбираемого типа данных.
Примеры
1 Если a и b являются подтипами с, и они связаны выражением ANDOR, и существует тип данных, определенный как SELECT (а, b), то может оказаться, что значением выбираемого типа данных будут одновременно а и b.
2 Должен быть сделан выбор среди нескольких типов предметов в заданном контексте:
TYPE attachment_method = EXTENSIBLE SELECT(nail, screw); | ||||||||
length | : REAL; | |||||||
head_area | : REAL; | |||||||
END_ENTITY; | ||||||||
length | : REAL; | |||||||
pitch | : REAL; | |||||||
END ENTITY; | ||||||||
composition | : material_composition; | |||||||
solvent | : material_composition; | |||||||
END_ENTITY; | ||||||||
composition | : material_composition; | |||||||
END_ENTITY; | ||||||||
mounting | : product; | |||||||
on | : wall; | |||||||
using | : attachment_method; | |||||||
END ENTITY; |
Элемент wall_mounting описывает соединение изделия product со стеной wall с использованием способа соединения attachment_method. Исходный способ соединения описывает способы разборного соединения. Эти способы затем расширяются, добавляя способы неразборного соединения permanent_attachment. При определении значения элемента wall_mounting будет использоваться значение атрибута using, то есть nail, screw, glue или weld.