Norenkov.Osnovy.Avtomatizirovannogo.Proektirovania.2002 (525024), страница 79
Текст из файла (страница 79)
6.8. Внутри прямоугольников, ограничиваемых пунктирными линиями, записывается имя типа.Супертипы и подтипыОтношения типа целое - часть или функция - вариант реализации, характерные для представления структур объектов в виде альтернативных (И-ИЛИ)деревьев, в языке Express выражаются в форме отношений между типами данных. Для этого введены понятия супертипа (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;Взаимосвязи схемДля установления интерфейса между двумя схемами вводятся спецификации интерфейса.