Статус документа
Статус документа

ГОСТ Р ИСО 10303-11-2009 Системы автоматизации производства и их интеграция. Представление данных об изделии и обмен этими данными. Часть 11. Методы описания. Справочное руководство по языку EXPRESS

     9.2.3 Подтипы и супертипы


Язык EXPRESS допускает определение объектов как подтипов других объектов, где подтип объекта является конкретизацией его супертипа. Тем самым устанавливается наследственная взаимосвязь (подтип/супертип) между объектами, в которых подтип наследует свойства (то есть атрибуты и ограничения) своего супертипа. Последовательные взаимосвязи подтип/супертип определяют граф наследования, в котором каждый экземпляр подтипа является экземпляром его супертипа (или супертипов).

Граф наследования, определенный взаимосвязями подтип/супертип, должен быть ациклическим.

Если в объявлении объекта полностью определены все значимые свойства данного объекта, то это означает, что объявлен простой объектный тип данных. Если в объявлении объекта установлены наследственные взаимосвязи с супертипами, то это означает, что объявлен сложный объектный тип данных. Сложный объектный тип данных в рамках графа наследования использует характеристики своего супертипа (или супертипов). Сложный объектный тип данных может иметь дополнительные характеристики, не содержащиеся в его супертипе (или супертипах).

   Синтаксис:

     312 subsuper = [ supertype_constraint ] [subtype_declaration ] .


Следующие положения относятся к взаимосвязям подтип/супертип и основываются на графе подтипов/супертипов. Граф подтипов/супертипов является многокорневым направленным ациклическим графом, в котором узлы представляют объектные типы данных, а ребра представляют взаимосвязи подтип/супертип. Следующие за ключевыми словами SUBTYPE OF связи ведут к супертипам, тогда как следующие за ключевыми словами SUBTYPE OF связи ведут от супертипов к подтипам.

Правила и ограничения:

a) Ограничение супертипа, при его наличии, должно предшествовать ограничению подтипа, если оно присутствует.

b) Подтип может иметь более одного супертипа.

c) Супертип может иметь более одного подтипа.

d) Супертип может сам быть подтипом одного или нескольких других объектных типов данных. То есть пути в графе подтипов/супертипов могут проходить через несколько узлов.

e) Взаимосвязь подтип/супертип должна быть транзитивной. То есть, если А является подтипом В, а В является подтипом С, то А является подтипом С. Объекты, являющиеся супертипами некоторого объектного типа данных, должны быть такими объектами, к которым можно найти путь на графе, начиная с данного объектного типа данных и следуя по связям SUBTYPE OF.

f) Подтип не должен быть супертипом любого из типов, указанных в списке всех его супертипов, то есть граф подтипов/супертипов должен быть ациклическим.

9.2.3.1 Определение подтипов

Объект является подтипом, если он содержит объявление с ключевым словом SUBTYPE. В объявлении подтипа должны указываться все непосредственные супертипы объекта. Экземпляр объектного типа данных, определенный как подтип, является экземпляром каждого из его супертипов.

   Синтаксис:

     318 subtype_declaration = SUBTYPE OF ' ( ' entity_ref { ' , ' entity_ref } ' ) ' .

9.2.3.2 Определение супертипов

Объект может быть объявлен супертипом посредством явного или неявного определения. Объект объявлен супертипом в явной форме, если он содержит объявление с ключевым словом ABSTRACT SUPERTYPE. Объект объявлен супертипом в неявной форме, если его имя задано в объявлении SUBTYPE, по крайней мере, одного другого объекта.

   Синтаксис:

     319 supertype_constraint = abstract_entity_declaration | abstract_supertype_declaration | supertype_rule .
     164 abstract_entity_declaration = ABSTRACT .
     166 abstract_supertype_declaration = ABSTRACT SUPERTYPE [ subtype_constraint ] .
     313 subtype_constraint = OF ' ( ' supertype_expression ' ) ' .
     320 supertype_expression = supertype_factor { ANDOR supertype_factor } .
     321 supertype_factor = supertype_term {AND supertype_term } .
     323 supertype_term = entity_ref | one of | ' ( ' supertype_expression ' ) ' .
     263 one_of = ONEOF ' ( ' supertype_expression { ' , ' supertype_expression } ' ) ' .
     322 supertype_rule = SUPERTYPE subtype_constraint .


Правило: все подтипы, указанные в выражении для супертипа, должны содержать объявление подтипа, идентифицирующее данный объект как супертип.

Пример - Нечетные числа являются подтипом целых чисел, следовательно, целые числа являются супертипом нечетных чисел.

ENTITY integer_number;

val : INTEGER;

END_ENTITY;

ENTITY odd_number

SUBTYPE OF (integer_number);

WHERE

not_even : ODD(val);

END_ENTITY;