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

объект". <•

SCHEMA Graphics;

ENTITY GraphicalObject ABSTRACT SUPERTYPE;

END_ENT1TY; — GraphicalObject

ENTITY Point;

x: REAL;

у: REAL;

Z: OPTIONAL REAL;

END_ENT1TC; — Point

ENTITY Line SUBTYPE OF (GraphlcalObject);

startp: Point;'

endp : Point;

END_ENT1TY; — Line

ENTITY Circle SUBTYPE OF (GraphlcalObject);

midp : Point;

radius: REAL;

END_ENTITY; — Circle

ENTITY Drawing;

elements: SET OF GraphicalObject;

END_ENTITY; — Drawing

END_SCHEMA;

Схема в последующем должна развиваться в двух направлениях. Во-первых, должна быть возможна обработка цветных чертежей. Во-вторых, используются       дальнейшие знания об отдельных элементах чертежа. Это приводит прежде всего к расширение проблемной области.

1.16.3 Расширение проблемной области - продолжение

Каждый графический объект имеет цвет. Типы

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

Тогда цветами являются: красный, зеленый, синий, белый и черный. Для такого перечисления в языке EXPRESS определен перечислимый тип.

Наследование

С помощью этого типа цвета каждый графический объект может быть цветным, для чего в определении entity "GraphicalObject" должен быть добавлен соответствующий атрибут. Так как в соответствии с иерархией генерализации/специализации линия и окружность являются вместе графическими объектами, то логично заключить, что они оба должны иметь этот атрибут. В объектно-ориентированном программировании это называется наследованием. Атрибут "цвет" супертипа "графический объект" наследуется специализированными подтипами "линия" и "окружность".

Производные атрибуты

В нижеследующем определении entity для линии и окружности можно заметить дополнительные атрибуты. Для линии дополнительно задана длина, окружность имеет дополнительное свойство "площадь". Значения этих дополнительных атрибутов не может быть выбрано произвольно, так как они находятся в зависимости от уже определенных атрибутов. Длина линии, например, вычисляется из расстояния между двумя точками. Для отражения таких зависимостей в языке EXPRESS применяется конструкция DERIVE. Атрибуты могут быть специфицированы как производные. Фактическая зависимость может быть образована с помощью простых математических выражений или функций.

SCHEMA Graphics;

TYPE Colours = ENUMERATION OF (red, green, blue, white, black);

END_TYPE;

ENTITY GraphicalObject ABSTRACT SUPERTYPE;

colour: Colours;

END_ENTITY; — GraphicalObject

ENTITY Point;

x: REAL;

у:REAL;

z: OPTIONAL REAL;

END_ENT1TY; — Point

ENTITY Line SUBTYPE OF (QraphicalObject);

startp: Point;'

endp : Point;

DERIVE

length : REAL:° distance (startp, endp);

END_ENTITY; — Line

ENTITY Circle SUBTYPE OF (GraphicalObject);

midp : Point;

radius: REAL;

DERIVE

area : REAL := PI " radius« radius;

END_ENT1TY; — Circle

ENTITY Drawing;

elements: SET OF GraphlcalObject;

END_ENTITY; — Drawing

END„SCHEMA;

Функции

Функции, которые не являются стандартными функциями языка EXPRESS, должны быть определены внутри схемы. EXPRESS предоставляет для этого операторы и     операции.

Определение функции distance ддя расчета расстояния между двумя точками может,            например, выглядеть следующим образом:

FUNCTION distance (p1, p2 : Point): REAL;

LOCAL

length : REAL := 0.0;

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

ENDJ.OCAL;

vector.x := p2.x - pi .x;

vector.y := p2.y- pi .y;

IF EXISTS (p2.z) THEN vector.z :=.p2.z;

IF EXISTS (р1.г) THEN vector.z := vector.z - p1 .z;

END IF;" ENDJF;

length := SQRT(

vector.x • vector.x +   vector.y • vector.y +   vector.z« vector.z

);

RETURN (length);

END_FUNCT10N; — distance

END_SCHEMA;