Список разделов О факультете Специальности факультета Контакты

Раздел 3: Язык Express: Супертипы и подтипы

Отношения агрегирования (типа целое-часть) или отношения обобщения (функция-вариант реализации), характерные для представления структур объектов в виде альтернативных (И-ИЛИ) деревьев, в языке Express выражаются в форме отношений между типами данных. Для этого введены понятия супертипа (supertype), как более общего типа, и подтипов (subtypes), как подчиненных типов. На рис. 1 верхняя сущность относится к супертипу, а три нижних прямоугольника изображают подтипы, линии связи прямоугольников должны быть утолщенными.

Рассмотрим пример фрагмента, в котором имеется ИЛИ вершина a1 и две подчиненные ей альтернативные вершины b1 и b2. Общим атрибутом для b1 и b2 является size типа real, специфичный для b1 атрибут — vol типа real, а специфичный для b2 атрибут met типа string. Этот фрагмент может быть описан следующим образом:
ENTITY a1
SUPERTYPE OF (ONEOF (b1,b2));
size: REAL;
END_ENTITY;
ENTITY b1
SUBTYPE OF (a1);
vol: REAL;
END_ENTITY;
ENTITY b2
SUBTYPE OF (a1);
met: STRING;
END_ENTITY;
Используются также следующие правила записи супертипов и подтипов:
  • в случае, если a1 есть И вершина, вместо oneof используется зарезервированное слово and (в более общем случае andor), т.е. вторая строчка примера будет выглядеть так: supertype of (b1 and b2);
  • если между подтипами нет взаимосвязи, выражаемой логической функцией (в частности, ИЛИ или И вершинами), то указание в a1 факта, что это супертип, не требуется; достаточно упоминание о подчиненности подтипов в их декларациях в виде: subtype of (a1);
  • перед декларацией supertype записывается зарезервированное слово abstract, если вершине a1 не соответствуют какие-либо экземпляры сущности, т.е. если a1 введена только для указания общих для подтипов атрибутов;
  • у одного подтипа может быть больше одного супертипа; подтип наследует атрибуты всех своих супертипов; если в декларациях супертипов используются одинаковые идентификаторы атрибутов, то ссылка на них должна быть в виде составного идентификатора, например: a1.size.
Пример 1
ENTITY device
SUPERTYPE OF (ONEOF (transistor, diode));
(* device есть ИЛИ вершина И-ИЛИ-дерева с двумя альтернативами transistor и diode *)
END_ENTITY;
ENTITY transistor
SUBTYPE OF (device);
b: REAL;
END_ENTITY;
ENTITY diode
SUBTYPE OF (device);
r: REAL;
END_ENTITY;


Рис. 1. Изображение супертипов и подтипов в языке Express-G

СПБГУАП,
Санкт-Петербург, 2011 год