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

простой – сюда относятся типы INTEGER, REAL, STRING, BINARY (символьная строка, представляющая число в двоичном виде с указанием длины строки), LOGICAL (допускаются значения FALSE, TRUE, UNKNOWN), BOOLEAN (допускаются значения

FALSE, TRUE), NUMBER (целое или вещественное число);

агрегативный – типы ARRAY, LIST, SET или BAG, организующие множество элементов базового типа;

поименованный тип – это один из двух возможных типов: объект (когда значением атрибута сущности является ссылка на другой экземпляр объекта) или определенный тип. При этом определенный тип может быть простым, агрегативным, другим определенным или сконструированным типом. К сконструированным типам относятся ENUMERATION и SELECT. Тип SELECT –

это список допустимых базовых типов.

В нашем примере даны определения четырех типов объектов. Рассмотрим их последовательно.

POINT – объект "точка", его атрибутами являются три координаты, объединенные в один агрегативный тип (массив).

COLOUR_POINT – объект "цветная точка", являющийся подтипом объекта "точка",а следовательно, наследующий все его атрибуты и при этом имеющий один свой атрибут "цвет". Атрибут "цвет" имеет значение перечисляяемого (ENUMERATION) типа. Заметим, что объект "цветная точка" одновременно является и объектом "точка".

CONTOUR – объект "контур", который имеет один атрибут, являющийся списком (LIST) составляющих этот контур точек. Контур может включать в себя как точки, так и цветные точки.

COLOUR_CONTOUR – объект "цветной контур", он имеет один атрибут, являющийся списком (LIST) цветных точек.

Проверка правил и исполняемые операторы языка Express

Помимо основной части, содержащей операторы описания типов данных, язык Express имеет и исполняемые операторы, связанные прежде всего с проверкой правил. Покажем на примере одного из прикладных протоколов использование правил в языке Express.

В ISO 10303 определено, что проверка выполнения правил не производится автоматически в момент возникновения объектов и значений атрибутов, под действие правил подпадающих. Выполнение правил проверяется только по специальному запросу. Это вполне понятно и оправданно, иначе создание моделей STEP, описанных на Express, было бы затруднено или вовсе невозможно.

Наличие стекол во всех окнах дома является правилом, которое должно быть соблюдено к моменту сдачи дома. А требование выполнять это правило во время строительства и тем более реконструкции причиняло бы только неудобство.

Назовем типы правил:

Правило уникальности, задаваемое оператором UNIQUE. В соответствии с этим правилом значение атрибута или комбинация значений атрибутов объекта уникальна среди множества экземпляров объекта.

Пример 1:

ENTITY attribute

ABSTRACT SUPERTYPE OF (ONEOF(derived_attribute, explicit_attribute,

inverse_attribute));

name : STRING;

INVERSE

parent_entity : entity_definition FOR attributes;

UNIQUE

UR1: name, parent_entity;

END_ENTITY;

В этом примере правило UNIQUE определяет условие, что среди множества всех определений атрибутов нет двух определений, у которых совпадали бы имена (name) и объекты, в которых они используются (parent_entity).

Правило WHERE, определяющее отношения между значениями атрибутов одного экземпляра объекта. Например, правило с именем WR4  для объекта axis2_placement_3d (локальная система координат геометрического объекта) определяет, что если для локальной системы координат назначены две оси, то их произведение положительно. Для вычисления значения произведения осей в этом же протоколе определена функция cross_product, которую разбирать подробно не будем, так как для этого пришлось бы давать определения операторов языка Express. Самого общего знакомства с основами программирования и геометрии достаточно, чтобы понять, что эта функция вычисляет произведение векторов. Точно такие же функции, написанные на самых различных языках программирования, входят во множество библиотек и геометрических систем. Настала пора включить эту функцию и в стандарт.