Модели EXPRESS для иллюстрации примеров EXPRESS-G
В данном приложении приведены тексты на языке EXPRESS для нескольких примеров, использованных для иллюстрации моделирования с помощью EXPRESS-G.
Эти примеры не являются реальными или "правильными". В частности, модели из этих примеров не имеют никакого отношения к моделям из других стандартов серии ГОСТ Р ИСО 10303.
H.1 Пример модели единичной схемы
Модель из примера 171 в основном показывает, что личность может быть мужчиной или женщиной. Каждая личность имеет определенные характеристики, такие как имя и фамилия, дата рождения, цвет волос, а также может иметь ноль или более детей (которые, конечно, также являются людьми). Мужчина может быть женат на женщине, в этом случае женщина имеет инверсное отношение с мужчиной.
Возраст (age) личности является вычисляемым атрибутом, который вычисляется с помощью функции years, определяющей количество лет между датой рождения, введенной в качестве параметра, и текущей датой.
Личность (person) имеет инверсный атрибут, который связывает детей со своими родителями. Нижняя граница этого инверсного атрибута равна 0 на тот случай, когда невозможно обеспечить полное семейное дерево.
Примечание - Если бы существовал явный атрибут parents (родители), а атрибут children (ребенок) был бы инверсным атрибутом, семейное дерево необходимо было бы продлевать назад во времени до бесконечности.
Пример 171 - Модель единичной EXPRESS-схемы.
SCHEMA example; |
TYPE date = ARRAY [1 : 3] OF INTEGER; |
END_TYPE; |
TYPE hair_type = ENUMERATION OF |
(blonde, |
brown, |
black, |
red, |
white, |
bald); |
END_TYPE; |
ENTITY person |
ABSTRACT SUPERTYPE OF (ONEOF (female, male)); |
first_name: STRING; |
last_name: STRING; |
nickname: OPTIONAL STRING; |
birth_date: date; |
children: SET [0 : ?] OF person; |
hair: hair_type; |
DERIVE |
age : INTEGER := years(birth_date); |
INVERSE |
parents : SET [0 : 2] OF person FOR children; |
END_ENTITY; |
ENTITY female |
SUBTYPE OF (person); |
INVERSE |
husband : SET [0 : 1] OF male FOR wife; -- муж не обязателен! |
END_ENTITY; |
ENTITY male |
SUBTYPE OF (person); |
wife : OPTIONAL female; |
END_ENTITY; |
FUNCTION years(past : date) : INTEGER: |
(* Данная функция подсчитывает число лет между предыдущей и текущей датами *) |
END_FUNCTION; |
END_SCHEMA; |
Н.2 Шаблон отношения
В примере 172 приведена простая модель для того, чтобы показать некоторые из определений и отношений из EXPRESS. Модель содержит объекты супертипов, объекты подтипов и объекты, не являющиеся ни тем, ни другим. Также показаны два определенных типа данных, выбираемый тип и несколько простых типов.
Пример 172 - Простой объект из EXPRESS и модель отношений типа.
SCHEMA etr; |
ENTITY super; |
END_ENTITY; |
ENTITY sub_1 |
SUBTYPE OF (super); |
attr: from_ent; |
END_ENTITY; |
ENTITY sub_2 |
SUBTYPE OF (super); |
pick : choice; |
END_ENTITY; |
ENTITY an_ent |
int : INTEGER; |
END_ENTITY; |
ENTITY from_ent |
description: OPTIONAL to_ent; |
values: ARRAY [1 : 3] OF UNIQUE REAL; |
END_ENTITY; |
ENTITY to_ent |
text : strings; |
END_ENTITY; |
TYPE choice = SELECT |
(an_ent, |
name); |
END_TYPE; |
TYPE name = STRING; |
END_TYPE; |
TYPE strings = LIST [1 : ?] OF STRING; |
END_TYPE; |
END_SCHEMA; |
Н.3 Простое дерево подтип/супертип
EXPRESS позволяет определять очень сложные деревья (и сети) подтипов/супертипов. Дерево, показанное в примере 173, относительно простое.
Пример 173 - Дерево подтип/супертип в языке EXPRESS.
SCHEMA simple_trees; |
ENTITY super; |
END_ENTITY; |
ENTITY sub1 |
SUBTYPE OF (super); |
END_ENTITY; |
ENTITY sub2 |
ABSTRACT SUPER OF (ONEOF(sub3, |
sub4)) |
SUBTYPE OF (super); |
END_ENTITY; |
ENTITY sub3 |
SUBTYPE OF (sub2); |
END_ENTITY; |
ENTITY sub4 |
SUBTYPE OF (sub2); |
END_ENTITY; |
ENTITY sub5 |
SUBTYPE OF (super); |
END_ENTITY; |
END_SCHEMA; |
H.4 Переобъявление атрибута
В EXPRESS допускается переобъявление наследуемых атрибутов, обеспечивающее совместимость новых типов атрибутов. В примере 174 показаны некоторые допустимые формы переобъявления:
- тип переобъявленного атрибута является подтипом наследуемого типа;
- тип переобъявленного атрибута является совместимым простым типом;
- значение переобъявленного атрибута является обязательным, в то время как наследуемое значение было необязательным.
Пример 174 - Переобъявление атрибута в EXPRESS.