Семинар по ISO 10303. Обзор норм ISO 10303. Внедрение языка EXPRESS. Преобразование ISO 10303-22, страница 7

Функция состоит из заголовка функции и тела функции. В заголовке функции указывается имя функции, количество и тип параметров, а также тип результата. Тело функции содержит блок для определения локальных переменных и затем блок операций. Внутри блока определения переменных, который заключен между ключевыми словами LOCAL и ENDJLOCAL, могут быть определены типы переменных, а также начальные значения. Инициализация переменных entity производится в конструкторе.

vector: Point := Point (0.0, 0.0, 0.0);

Конструктор - функция, которая устанавливает отдельные атрибуты entity. Конструкторы не требуют явного определения. Доступ к атрибутам экземпляра entity производится по аналогии с языками программирования с помощью оператора доступа (.).

vectorx := p2.x - p1 .x;

Чтобы определить функцию действительной для всей области, то есть для применения двух- и трехмерных точек, необходимы некоторые дополнительные операции. В зависимости от необязательных атрибутов применяется стандартная функция EXISTS, которая проверяет, имеет ли атрибут, переданный как параметр, значение или нет. В Примере она применяется для того, чтобы различить, имеет ли -мдшня» точка координату z иди нет. Операция RETURN в конце функции специфицирует возвращаемое значение.

Локальные правила

Правила используются в EXPRESS для того, чтобы сформулировать условия, которые должны выполняться. Внутри определения entity допускается задавать такие условия, которые должны быть действительны для всех экземпляров этого entity. Эти правила называются локальными.

Правило WHEBE

Если рассматривается схема чертежа, то бросается в глаза, что точка служит только для определения других entities. Она не встречается в чертеже самостоятельно, а является чисто вспомогательной конструкцией. Из этого исходит требование, что каждая точка для определения должна быть использована как минимум одним элементом чертежа, так как ничего, не должно начинаться от точек, не выполняющих это условие. Говорят, что каждая специальная точка должна играть как минимум одну роль. Такая роль определяется в EXPRESS с помощью задания

Schemaname.Entityname.Attributname Точка может играть в нашем примере три различных роли:

Начальная точка прямой линии : GRAFICS.LINE.STARTP Конечная точка прямой линия : GRAFICS.LINE.ENDP Центральная точка круга   : GRAFICS.CIRCLE.MIDP

С помощью стандартной функции USEDIN можно установить, играет ли специальная точка определенную роль. USEDIN возвращает множество всех экземпляров (линий или окружностей), у которых точка играет заданную роль.

р : Point := Point (0.0,1.2, 3.4);

S : SET OF Line := USEDIN (р, 'GRAFICS.LINE.STARTP');

Так как нас не интересует, где и как часто используется точка, а только имеется ли на нее ссылка, мы используем просто стандартную конструкцию SIZEOF, которая сообщает число элементов агрегата (array, list и т.д.).

i: INTEGER := SIZEOF (USEDIN (р, •GRAFICS.LINE.STARTP'));

Как уже было показано выше, локальные правила действительны для каждого экземпляра entity, в котором определено правило. Проверку такого правила можно представить в виде цикла, в котором условие проверяется для всех экземпляров. Ключевое слово SELF при этом определяет как раз проверяемый экземпляр. Ниже представлено локальное правило, которое производно для entity '^точка".

WHERE

is_referenced :

SIZEOF (USEDIN (SELF, 'GRAFICS.LINE.STARTP'))

+   SIZEOF (USEDIN (SELF, 'GRAFICS.LINE.ENDP' ))

+   SIZEOF (USEDIN (SELF, •GRAFICS.CIRCLE.MIDP')) >=1;

'Локальное правило состоит из имени (не обязательно) с последующим двоеточием и логического выражения, которое может принимать значения TRUE, FALSE или UNKNOWN.

Для линии и окружности также установлены лекальные правила. Упомянутые выше определения позволяют создавать для этих элементов экземпляры, которые не подпадают под понятие линии или окружности. Например, для линии понимается, что начальная и конечная точки различны. Далее, радиус окружности должен быть положителен. Следовательно, конструкцию WHERE используют таюке, чтобы точнее описать проблемную область с помощью схемы.