объект". <•
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;
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.