Норенков И.П. - Основы автоматизированного проектирования (1060628), страница 78
Текст из файла (страница 78)
Для этого введены понятия супертипа (supertype), как более общего типа,и подтипов (subtypes), как подчиненных типов. На рис. 6.9 верхняя сущностьотносится к супертипу, а три нижних прямоугольника изображают подтипы, линиисвязи прямоугольников должны быть утолщенными.Рассмотрим пример фрагмента И-ИЛИ-дерева, в котором имеются вершина ИЛИ al и две подчиненные ей альтернативные вершины Ы и Ь2. Общиматрибутом для Ы и Ь2 является size типа real, специфичным для Ы атрибут vol типа real, а специфичным для Ь2 -атрибут met типа string. Этот фрагментможет быть описан следующим образом:entity alsupertype of (oneof (Ы,Ь2));size: real;I1end_entity;—'entitybl1subtype of (al);IIvol: real;end_entity;IIentity b2subtype of (al);Рис. 6.9.
Изображениеmet: string;иерархии типов в Express-Gend_entity;3126 4 Краткое описание языка ExpressИспользуются также следующие правила записи супертипов и подтипов:в случае, если al есть И-вершина, вместо oneof используется зарезервированное слово and (в более общем случае andor), т. е. вторая строчка примера будет выглядеть так:supertype of (bl and Ь2);если между подтипами нет взаимосвязи, выражаемой логической функцией(в частности, ИЛИ- или И-вершинами), то указание в al факта, что это супертип, не требуется; достаточно упоминание о подчиненности подтипов в их декларациях в виде subtype of (al);перед декларацией supertype записывается зарезервированное словоabstract, если вершине al не соответствуют какие-либо экземпляры сущности,т.
е. если al введена только для указания общих для подтипов атрибутов;у одного подтипа может быть больше одного супертипа; подтип наследуетатрибуты всех своих супертипов; если в декларациях супертипов используются одинаковые идентификаторы атрибутов, то ссылка на них должна быть ввиде составного идентификатора, например а 1.size.Пример:entity devicesupertype of (oneof (transistor, diode));(* device есть ИЛИ-вершина И-ИЛИ-дерева с двумя альтернативамиtransistor и diode*)end_entity;entity transistorsubtype of (device);b: real;end_entity;entity diodesubtype of (device);r: real;end_entity;ОграниченияОграничения, накладываемые на экземпляры сущности, выражаются с помощью правил (rules). Правила могут быть общими или локальными.Описание правила, общего для ряда сущностей, начинается со служебногослова rule, далее следуют идентификатор правила, служебное слово for, ссылки на сущности, на которые правило распространяется, и, наконец, собственноограничения.Локальные правила могут описывать ключевые атрибуты (uniqueness rules)или выражать ограничения, накладываемые на атрибуты некоторой сущности(domain rules).
Например, если ключевой атрибут сущности Z есть составнойатрибут X. Y или, другими словами, одному сочетанию значений атрибутов X иY должен соответствовать единственный экземпляр сущности Z, то313б. Информационная поддержка этапов жизненного цикла изделий — CALS-технологииentity Z;X: integer;Y: string;uniqueX,Y;end_entity;Ограничение на атрибуты некоторой сущности выражается с помощью правила в теле этой сущности. Ограничение записывается после слова where ввиде выражения, значениями которого могут быть true, false или unknown.Допустимыми значениями атрибута будут только те, для которых выражение принимает значение true. Например, можно записать, что длина вектора vect = (x,y,z) должна быть равна единице, в виде правила cons:entity vect;x,y,z: real;wherecons: x**2 + y**2 + z**2 = 1.0;end_entity;Процедуры и функцииПроцедуры и функции служат для описания процедурной части модели.Как и в алгоритмических языках, используется концепция формальных и фактических параметров.
Описание процедуры начинается со служебного словаprocedure, за которым следуют идентификатор процедуры и описание формальных параметров в круглых скобках. Пример описания заголовка процедуры:procedure eq (x,y: real; n: integer; var result: route);Аналогично описываются функции, их отличает только описание в заголовке типа результата после закрывающей скобки:function log (a: real; m: integer): real;Локальные переменные, описанные в блокеlocalend_local;действуют только в пределах данных функции или процедуры.Ряд функций и процедур относятся к стандартным и потому не требуютописания во вновь разрабатываемых моделях. Отметим следующие стандартные функции:Abs - абсолютная величина; Sqrt - корень квадратный; Ехр - экспонента;Log, Log2, LoglO - логарифмы натуральный, двоичный, десятичныйсоответственно; Sin, Cos, Tan, Acos, Asin, ATan - тригонометрические и обратные тригонометрические функции sin, cos, tg, arccos, arcsin, arctg.В число стандартных входят также функции: BLength - подсчет числа битов в двоичном коде; HiBound - верхняя граница индекса у типа array иливерхняя граница числа элементов у типов set, bag, list; LoBound - то же в3146.4.
Краткое описание языка Expressотношении нижних границ; Length - подсчет числа символов в строке; Odd возвращает значение true, если аргумент - нечетное число; SizeOf - возвращает число элементов в объекте агрегативного типа; TypeOf - возвращаетсписок типов, к которым принадлежит параметр этой функции; Exists - возвращает значение true, если аргумент этой функции входит в число атрибутов соответствующей сущности, и др.К стандартным процедурам относятся процедуры Insert и Remove - вставка или изъятие элемента в заданной позиции у объекта агрегативного типа.При описании алгоритмов в телах процедур и функций могут использоваться операторы пустой (null), присваивания (assignment), выбора (case), составной (compound statement), условный ( i f .
. . then ... else), цикла (repeat),выхода из функции или процедуры (return), перехода на конец цикла (skip).В выражениях используются операнды, знаки операций, вызовы функций.Так, для арифметических операций над числами типа real применяются следующие знаки:«*» — умножение,«/» — деление, DIV — целочисленное деление,«+» — сложение, «-» — вычитание, «**» — возведение в степень, MOD — деление по модулю.Знаки логических операций: not - отрицание, and - конъюнкция, or - дизъюнкция, хог - исключающее ИЛИ. В применении к величинам типа logical этиоперации выполняются по правилам действий в трехзначном алфавите.
Логическое выражение al in a2 принимает значение true, если al содержится в а2.Оператор like используется для посимвольного сравнения строк. Для сравнения экземпляров сущностей используют операции «равно» и «не равно» со знаками «:=:» и «:<>:» соответственно.Операции над множествами (типами bag и set) - пересечение (Intersection),объединение (Union), разность (Difference). Их знаки суть «*» (умножение),«+» (голос), «-» (минус) соответственно. Оператор Query (A <* В | С) возвращает подмножество тех элементов из агрегативного типа В, для которых выполняется условие С, здесь А - простая переменная, используемая в С.Знак «+» (плюс) по отношению к операндам типа binary или string есть знакконкатенации.В качестве формальных параметров процедур и функций кроме типов данных, применяемых в других конструкциях языка и охарактеризованных выше,могут использоваться обобщенные типы: generic, aggregate и некоторые другие.
Тип generic формального параметра означает, что соответствующий фактический параметр может иметь любой тип данных из числа предусмотренных при описании процедуры. Аналогично тип aggregate обобщает агрегативныетипы данных - array, bag, list, set. Например:function add (a,b: generic: intype): generic: intype;localnr: number;vr: vector;end_local;3156 Информационная поддержка этапов жизненного цикла изделий — CALS-технологииif ("number" in typeof (a)) and ("number" in typeof (b))then nr := a+b;(* функция typeof (а) возвращает тип аргумента а и, если этот тип естьnumber, то первый операнд логического выражения равен true *)return (nr);elseif ("this schema.vector" in typeof (a)) and ("this schema.vector" in typeof (b))thenvr.i := a.i + b.i;vr.j:=a.j+b.j;vr.k := a.k + b.k;(* подразумевается, что декларация типа vector была произведена в схемес именем this schema *)return (vr);end_if;end_if;end_function;В языке Express-G специальные символы для изображения правил, процедур и функций не оговорены.КонстантыСпособ описания констант очевиден из следующего примера:constantyear: integer: = 1995;start: date := date(12,16,1982); (""подразумевается, что при описании типа dateуказаны три атрибута: месяц, число, год*)end_constant;Взаимосвязи схемДля установления интерфейса между двумя схемами вводятся спецификации интерфейса.
Применяют два типа спецификаций - use и reference. Например:schema si;entity par 1;name: string;end_entity;end_schema;schema s2; (* в схеме s2 в качестве параметра х используется name изsl.parl *)use from sl.parl ( name as x);end_schema;3166.4. Краткое описание языка ExpressСсылки типа use отличаются тем, что декларации сущностей из другой схемы используются в данной схеме как свои локальные, в то же время referenceпросто позволяет обращаться к декларациям другой сущности.В языке Express-G используются диаграммы двух уровней.
На схемномуровне (schema level) изображаются схемы и их взаимосвязи в виде линий, насущностном уровне (entity level) - типы, сущности, атрибуты, а для ссылок наобъекты другой схемы применяются специальные символы.Эти символы представляют овальными фигурами. В овале записывают имясхемы-источника и имя используемого определения. В нашем примере этоссылка на S1 .par 1.
Овал помещается внутрь прямоугольника, в котором дополнительно указывается имя атрибута (в примере это name).Для указания межстраничной связи, что требуется, если Express-G-модельразмещается более чем на одной странице, используется овальный символ,внутри которого указьшаются через запятую номер страницы и номер ссылки.Примеры моделейПример «person_organization_schema» взят из тома 41 «Интегрированныересурсы» стандарта STEP (ISO 10303-41).schema person_organization_schema;entity address;internaMocation: optional label;street_number: optional label;street: optional label;postal_box: optional label;town: optional label;region: optional label;postal_code: optional label;country: optional label;facsimile_number: optional label;telephone_number: optional label;electronic_mail_address: optional label;telex_number: optional label;wherewrl : exists(internaMocation) or exists(street_number) or exists(street) orexists(postal_box) or exists(town) or exists(region) or exists(postal_code) orexists(country) or exists(facsimile_number) or exists(telephone_number) orexists(electronic_mail_address) or exists(telex_number);end_entity;entity personal_addresssubtype of (address);people : set[l:?] of person;description: text;end_entity;3176.
Информационная поддержка этапов жизненного цикла изделий — CALS-технологииentity person;id: identifier;last_name : optional label;first_name : optional label;middle_names : optional list[l:?] of label;prefix_titles : optional Iist[[l:?J of label;suffbcjitles : optional Iist[[l:?] of label;uniqueurl : id;wherewrl : exists(last_name) or exists(first_name);end_entity;end_schema;На рис. 6.10 показан небольшой фрагмент модели из прикладного протоколаАР202, относящийся к сущности «Оболочка» и ее атрибутам. Свойства этойсущности - модель, тип и границы поверхности.
Тип поверхности - супертип, аподтипами являются возможные варианты. Граница задана в виде контура,выраженного либо своими вершинами, либо совокупностью линий. Связи этогофрагмента с другими частями протокола АР202 на рис. 6.10 не показаны.ОболочкаГеометрия*j1 1 Тип поверхности [Полигональная-ОВращения-0Вытягивания—0Коническая—ОЦилиндрическая-^Модель поверхностиПоверхность Sfl:?]ЛОграниченнаяповерхность-С{Элемент S[0:?]5-сплайн-0Тороидальная—о—оСферическаяАЭле менты границы S[l:?]ГраницыI KOHTJ •п[оОриентация'Тип контура—яСBooleanI''Контур из линийКонтур из вершинТочки S[l;?]ОВершинаПлоскостьРис.