Построение стандарта STEP. Идеология EXPRESS. Функции (Function) и процедуры (Procedure). Элементы языка EXPRESS, страница 3

явные (EXPLICIT)- непосредственно описывают свойства объекта, могут содержать ссылки на другие объекты производные (DERIVED) - производные (вычисляемые) атрибуты определяются типом атрибута и выражением, в результате вычисления которого получается значение атрибута. Выражение может включать в себя значения явных атрибутов, константы, исполняемые операторы, включая вызов функций и процедур, например:

ENTITY line;

x1 : REAL;

y1 : REAL;

z1 : REAL;

x2 : REAL;

y2 : REAL;

z2 : REAL;

DERIVED

length : REAL = SQRT ((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) +(z2-z1)*(z2-z1) );

END_ENTITY;

инверсные (INVERSE) - используются для обратной связи с другими объектами. Это то, что называется обычно “BACK

POINTER” (обратный указатель). Предполагается, что обратный указатель формируется автоматически при появлении соответствующего прямого указателя и его актуальность поддерживается средствами реализации системы.

При определении инверсного атрибута указывается соответствующий ему прямой атрибут. Типом инверсного атрибута является объект того типа, который содержит прямой атрибут. Инверсный атрибут может быть и простым, и агрегативным. Это зависит только от того, могут ли ссылаться на экземпляр объекта данного типа (т.е. объект того типа, который содержит инверсный атрибут)

несколько объектов того типа, котрый содержит прямой атрибут. Приведем две пары таких описаний.

Объект типа sdai_session имеет атрибут known_servers, который является набором (SET) объектов типа sdai_repository.

ENTITY sdai_session;

sdai_implementation : implementation;

recording_active : BOOLEAN;

errors : LIST [0:?] OF error_event;

known_servers : SET [1:?] OF sdai_repository;

active_servers : SET [1:?] OF sdai_repository;

active_models : SET [1:?] OF sdai_model;

data_dictionary : OPTIONAL schema_instance;

INVERSE

active_transaction : SET [0:1] OF sdai_transaction FOR owning_session;

END_ENTITY;

Объект типа sdai_repository имеет инверсный атрибут session, который указывает на тот экземпляр объекта типа session, который ссылается на данный объект. Предполагается, что один экземпляр объекта типа sdai_repository может относиться только к одному экземпляру объекта типа sdai_session (т.е. Репозиторий может быть доступен только одной сессии). Поэтому инверсный атрибут типа

session у объекта типа sdai_repository является одинарным (не агрегативным)

ENTITY sdai_repository;

name : STRING;

contents : sdai_repository_contents;

description : STRING;

INVERSE

session : sdai_session FOR known_servers;

UNIQUE

UR1: name, session;

END_ENTITY;

Другой пример. Экземпляры объектов типов entity_definition и defined_type, которые являются подтипами named_type ссылаются на экземпляр объекта типа schema_definition, где на объект типа schema_definition может одновременно ссылаться множество объектов типов entity_definition и defined_type. Это понятно: в одну схему входит несколько типов объектов (entity_definition) и определенных типов (defined_type).

ENTITY named_type

ABSTRACT SUPERTYPE OF (ONEOF(entity_definition, defined_type));

name : express_id;

where_rules : LIST [0:?] OF where_rule;

parent_schema : schema_definition;

END_ENTITY;

Ввиду вышесказанного, у объекта типа schema_definition инверсные атрибуты типа entities и типа types являются агрегативными.

ENTITY schema_definition;

name : express_id;

identification : OPTIONAL info_object_id;

INVERSE

entities : SET [0:?] OF entity_definition FOR parent_schema;

types : SET [0:?] OF defined_type FOR parent_schema;

global_rules : SET [0:?] OF global_rule FOR parent_schema;

external_schemas : SET [0:?] OF external_schema FOR native_schema;

UNIQUE

UR1 : identification;

END_ENTITY;

Базовые типы данных

Простые (Simple)

Агрегатные (Aggregation)

Именованные (NAMED)

Генетические (Generic)

Агрегатные (Aggregate)

Перечисляемые (Enumeration)