ГОСТ Р ИСО/ТО 10303-12-2000
my .name -> self;};my_name ->’t\vig’;};
cl[4| = leaf2{
SUBOF(@2);
s_name ->‘sibling’;};
Экземпляр, помеченный I, яатяется экземпляром общего дерева, а экземпляр, помеченный
2, - экземпляром прямого дерева.
12.10.1 О тображ ен ие псреобъявляемых атрибутов
В подтипе EXPRESS есть возможность переобъявлять атрибуты, наследуемые от супертипа.
В EXPRESS-1 переобъяатение выступает как ограничение значения атрибута. Переобъявляемые
атрибуты не должны именоваться внутри экземпляра подтипа.
Пример 67 - В примере объект real_point является подтипом point и переобъявляет его
атрибуты типа NUMBER на тип REAL. Имеются два соответствующих экземпляра EXPRESS-I.
Первый (то есть pi) является экземпляром простого объекта только супертипа и отображает зна
чения атрибутов как тип NUMBER. Второй (то есть р2) является экземпляром сложного объекта,
где р2[11 является компонентом супертипа, а р2|2] - компонентом подтипа. В подтипе не пока заны
атрибуты, но значения отражаемые в супертипе, ограничены типом REAL.
EXPRESS!
pi = point(x -> 1;
У-> 2;);
EXPRESS
ENTITY point;
x : NUMBER:
у ; NUMBER:
END_ENTITY:
p2| 11 = pointjx -> 1.5;
У-> 2.7;
SUPOF(®2);};
p2|2| = rcaljx>intJSUBOF(@l);;
ENTITY real point;
SUBTYPE OF (point);
SELF\point.x : REAL
SELF\point.y : REAL;
END_ENTITY;
В случае переобъявлення наследуемого явного атрибута на вычисляемый атрибут переобъяв-
ленный атрибут должен выступать в супертиие как вычисляемый атрибут, когда бы ни наполнял ся
переобъявляюший подтип.
Пример 68 - Следующее EXPRESS-предстаатение объявляет circle как окружность, опре
деляемую центром и радиусом. Объект circle_2pt является разновидностью circle, определяемой
центром и точкой на окружности circle. Наследуемый атрибут radius переобъявляется как вычис
ляемый атрибут, значение которого задается расстоянием между двумя точками.
ENTITY circle;
centre : point;
radius : REAL;
END_ENT1TY;
ENTITY circle 2pt
SUBTYPE OF (circle);
circum_pnt ; point;
DERIVE
SELF\circle.radius : REAL := distance(SELF\circle.center, circum put);
END_ENTITY:
В EXPRESS-1-представлении экземплярами circle и circle_2pt могут быть:
cl = circle{centre -> |1.0, 0.01;
radius -> 2.0;>;
c2pt|211 = circlejcentre-> 11.0, 0.0|;
radius <- 2.0;
SUPOF (@5);};
c2pt|5| = circle_2pt{SUBOF(021);
circum_pnt -> 11.0, 2.01;};
43