ГОСТ Р И С 0 10303-11 — 2009
b
) Подтип может иметь более одного супертипа.
c) Супертип может иметь более одного подтипа.
d) Супертип может сам быть подтипом одного или нескольких других объектных типов данных. То
есть пути в графе подтипов/супертипов могут проходить через несколько узлов.
e) Взаимосвязь подтиг^супертил должна быть транзитивной. То есть, если А является подтипом В. а В
является подтипом С. тоА является подтипом С. Объекты, являющиеся супертипами некоторого объектно го
типа данных, должны быть такими объектами, к которым можно найти путь на графе, начиная с данного
объектного типа данных и следуя по связям SUBTYPE OF.
0 Подтип не должен быть супертипом любого из типов, указанных в списке всех его супертипов, то
есть граф подтипов/супертиповдолжен быть ациклическим.
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 = OFsupertype_express»on’)’.
320 supertype_expression = supertype_factor { ANDOR supertype_factor }.
321 supertype_factor = supertypejerm {AND supertypejerm}.
323 supertypejerm = entityjef |one of |supertype_expression ’)’.
263one_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_ENTFTY;
9.2.3.3 Наследование атрибутов
Идентификаторы атрибутов в супертипе определены в рамках области видимости подтипа (см. раз
дел 10). Таким образом, подтип наследует все атрибуты своего супертипа. Это позволяет подтипам опреде
лятьограничения или свои собственныеатрибуты с использованием унаследованного атрибута. Если под
тип имеет несколько супертипов, то подтип наследует все атрибуты от всех своих супертипов. Это называ
ется множественным наследованием.
Правила и ограничения:
a) Объект не должен объявлять атрибут с таким же именем, как у атрибута, унаследованного от
одного из его супертипов. если только он не объявляет унаследованный атрибут повторно (см. 9.2.3.4).
b
) Если подтип наследует атрибуты от двухсупертипов, не имеющихобщих элементов, то допускает
ся, чтобы они имели отличающиеся атрибуты с одинаковыми идентификаторами. Неоднозначность имен
36