Атрибуты, переобъявленные как явные атрибуты

Атрибуты, перобъявленные как INVERSE.

Явные атрибуты, переобъявляемые как DERIVE.

Внешнее отображение.

Внутренее отображение

Если используется внутренее отображение, экземпляр объекта должен быть отображен в SIMPLE_ENTITY_INSTANCE (см. табл. 3). Ключевое слово KEYWORD должно быть именем конечного типа данных объекта, как указано в 7.2.11. Список параметров (PARAMETER_LIST) должен содержать значения унаследованных явных атрибутов всех объектов супертипа и явных атрибутов конечного типа данных объекта.

Пример простого отношения подтип/супертип. Определение объекта в EXPRESS/

ENTITY aa ABSTRACT SUBTYPE OF (ONEOF(bb,cc);

Attr_a: zz;

END_ENTITY;

ENTYTI bb SUBTYPE OF(aa);

ABSTRACT SUPERTYPE OF (ONEOF(xx));

Attr_b1: xx;

Attr_b2: yy;

END_ENTYTI;

ENTITY cc SYBTYPE OF (aa);

Attr_c:REAL;

END_ENTITY;

ENTITY xx SYBTYPE OF (bb);

Attr_x:REAL;

END_ENTITY;

ENTITY zz;

Attr_z:STRING;

END_ENTITY;

ENTITY yy;

Attr_1:REAL;

Attr_2:REAL;

Attr_3:REAL;

END_ENTITY;

Образец экземпляра объекта типа данных объекта хх в секции данных.

#1 = ZZ(‘ZATTR’);

#2 = YY(1.0,2.0,3.);

#3 = YY(2.0,2.0,0.0);

#4 = XX(#1,#2,#3,#4);

Если используется внешнее отображение, экземпляр объекта должен быть отображен в COMPLEX_ENTITY_INSTANCE (см. табл.3).

Пример отображения подтипов, связанных посредством ANDOR. определение объекта в EXPRESS/

ENTITY aa SUPERTYPE OF (bb ANDOR cc);

Attr_a:STRING;

END_ENTITY;

ENTYTI bb SUBTYPE OF(aa);

Attr_b:INTEGER;

END_ENTYTI;

ENTITY cc SYBTYPE OF (aa);

Attr_c:REAL;

END_ENTITY;

ENTITY dd;

Attr_d:aa;

END_ENTITY;

Образец экземпляра объекта типа данных объекта хх в секции данных.

#1 = ВВ(‘simple string’, 15);

#2 = CC(‘S’,3.0);

#3 = (AA(‘ASTRID’)BB(17)CC(4.0));

#4 = DD(#1);

#5 = DD(#2);

#6 = DD(#3);

#7 = AA(‘ABC’);

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

Пример.

ENTITY point;

x:REAL;

y:REAL;

z:REAL;

END_ENTITY;

ENTITY point_on_curve SUBTYPE OF (point);

u:REAL;

c:curve;

DERIVE

SELF\point.x:real:=fx(u,c);

SELF\point.y:real:=fx(u,c);

SELF\point.z:real:=fx(u,c);

END_ENTITY;

ENTITY curve;

Attr:STRING;

END_ENTITY;

Образец экземпляра в секции данных.

#1 = CURVE(‘curve_attribute’);

#2 = POINT_ON_CURVE(*,*,*,0.55,#1);

#3 = POINT(2.0,3.0,4.0);

Если объект подтипа переобъявляет атрибут своего супертипа с помощью INVERSE, это не влияет на кодирование. Переобъявленный атрибут в любом случае не кодируется.

Если объект подтипа переобъявляет атрибут одного из своих супертипов как явный атрибут, т.е. не с помощью INVERSE или DERIVE, это не влияет на кодирование.

Значение атрибута должно быть закодировано как атрибут супертипа, как определено в 3.2.5, с применением отображения, определенного в разделе 3 для типа данных атрибута в супертипе. Переобявленный атрибут должен игнорироваться, т.е. это не должно рассматриваться атрибутом подтипа для целей кодирования.

Пример.

ENTITY aaa SUPERTIPE OF (ONEOF (bbb, ccc));

a1:NUMBER;

a2:curve;

INVERSE

a3:SET OF mmm FOR m1;

END_ENTITY;

ENTITY bbb SUBTYPE OF (aaa);

SELF\aaa.a1:INTEGER;

b =:REAL;

END_ENTITY;

ENTITY ccc SUBTYPE OF (aaa);

SELF\aaa.a2:line;

INVERSE

SELF\aaa.a3:SET [1:2] OF mmm FOR m1;

END_ENTITY;

ENTITY curve;

...

END_ENTITY;

ENTITY mmm;

m1:aaa;

END_ENTITY;

Образцы экземпляров в секции данных.

#1 = LINE(...);

#2 = CURVE(...);

#3 = BBB(1.0,#2,0.5);

#4 = CCC(1.5,#1);


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: