Язык EXPRESS допускает определение объектов как подтипов других объектов, где подтип объекта является конкретизацией его супертипа. Тем самым устанавливается наследственная взаимосвязь (подтип/супертип) между объектами, в которых подтип наследует свойства (то есть атрибуты и ограничения) своего супертипа. Последовательные взаимосвязи подтип/супертип определяют граф наследования, в котором каждый экземпляр подтипа является экземпляром его супертипа (или супертипов).
Граф наследования, определенный взаимосвязями подтип/супертип, должен быть ациклическим.
Если в объявлении объекта полностью определены все значимые свойства данного объекта, то это означает, что объявлен простой объектный тип данных. Если в объявлении объекта установлены наследственные взаимосвязи с супертипами, то это означает, что объявлен сложный объектный тип данных. Сложный объектный тип данных в рамках графа наследования использует характеристики своего супертипа (или супертипов). Сложный объектный тип данных может иметь дополнительные характеристики, не содержащиеся в его супертипе (или супертипах).
Синтаксис: |
Следующие положения относятся к взаимосвязям подтип/супертип и основываются на графе подтипов/супертипов. Граф подтипов/супертипов является многокорневым направленным ациклическим графом, в котором узлы представляют объектные типы данных, а ребра представляют взаимосвязи подтип/супертип. Следующие за ключевыми словами SUBTYPE OF связи ведут к супертипам, тогда как следующие за ключевыми словами SUBTYPE OF связи ведут от супертипов к подтипам.
Правила и ограничения:
a) Ограничение супертипа, при его наличии, должно предшествовать ограничению подтипа, если оно присутствует.
b) Подтип может иметь более одного супертипа.
c) Супертип может иметь более одного подтипа.
d) Супертип может сам быть подтипом одного или нескольких других объектных типов данных. То есть пути в графе подтипов/супертипов могут проходить через несколько узлов.
e) Взаимосвязь подтип/супертип должна быть транзитивной. То есть, если А является подтипом В, а В является подтипом С, то А является подтипом С. Объекты, являющиеся супертипами некоторого объектного типа данных, должны быть такими объектами, к которым можно найти путь на графе, начиная с данного объектного типа данных и следуя по связям SUBTYPE OF.
f) Подтип не должен быть супертипом любого из типов, указанных в списке всех его супертипов, то есть граф подтипов/супертипов должен быть ациклическим.
9.2.3.1 Определение подтипов
Объект является подтипом, если он содержит объявление с ключевым словом SUBTYPE. В объявлении подтипа должны указываться все непосредственные супертипы объекта. Экземпляр объектного типа данных, определенный как подтип, является экземпляром каждого из его супертипов.
Синтаксис: |
9.2.3.2 Определение супертипов
Объект может быть объявлен супертипом посредством явного или неявного определения. Объект объявлен супертипом в явной форме, если он содержит объявление с ключевым словом ABSTRACT SUPERTYPE. Объект объявлен супертипом в неявной форме, если его имя задано в объявлении SUBTYPE, по крайней мере, одного другого объекта.
Синтаксис: |
Правило: все подтипы, указанные в выражении для супертипа, должны содержать объявление подтипа, идентифицирующее данный объект как супертип.
Пример - Нечетные числа являются подтипом целых чисел, следовательно, целые числа являются супертипом нечетных чисел.
ENTITY integer_number; | ||||
val : INTEGER; | ||||
END_ENTITY; | ||||
ENTITY odd_number | ||||
SUBTYPE OF (integer_number); | ||||
WHERE | ||||
not_even : ODD(val); | ||||
END_ENTITY; |