Язык описания функциональной структуры.




 

Ясная, естественная, осмысленная спецификация, отражающая первоначальные требования пользователя, может быть написана с минимум ошибок на языке проектирования системы SDL. Таким образом, пользователь может полностью сконцентрироваться на проекте своей модульной системы.

SDL является непроцедурным языком в том смысле, что не имеет значение порядок написания предложений. Описание объединенной пары графов на SDL состоит из предложений. Каждое предложение оканчивается точкой ‘.’.

 

Граф данных.

Для описания графа данных используется только одно ключевое слово ‘=>’. Ясно, что ‘a=>b’ просто означает, что информация послана из ‘a’ в противообласть ‘b’. Следовательно, описание a=>transfer =>b. означает, что модуль ‘transfer’ имеет область ‘a’ и противообласть ‘b’. Если у модуля нет области, это описывается как increment => abc. Это полагает, что модуль ‘increment’ имеет только противообласть ‘abc’.

Если имеется более одного источника на входе или более одного приемника на выходе, то для разделения различных элементов используется запятая и квадратные скобки для их объединения.

Пример:

[a,b,c] => reproduce =>[d,e,f].

abc => decompose => [aa,bb,cc].

[relation 1, relation 2] => join => relation 3.

[database, query] => prolog => answer.

 

Пользователь может пожелать объявить некоторую другую информацию, содержащуюся в графе данных. Это можно сделать используя ключевое слово ‘:’.

Пример:

initialise: [abc = 16, xyz = 64] Это предложение определяет начальные величины областей abc и xyz как 16 и 64 соответственно.

 

 

Граф управления.

Чтобы дать возможность пользователю гибко специфицировать свою управляющую логику используются два ключевых слова: ‘ — > и *. Мы увидим, что пользователь может использовать их для описания графа управления любого вида: ‘x— > y’ предполагает наличие дуги от модуля ‘x’ к модулю ‘y’ и, так как дуга является вектором, ‘x— > y’ не эквивалентно ‘y— > x’. Модуль слева имеет более высокое предшествование, чем правый. То есть, ‘a— > b— > c— > d’ определяет, что a,b,c и d являются последовательными. Представление ‘x*y’ означает, что модули x и y параллельны в графе управления. Ясно, что модули x и y коммутативны. Выражение ‘a —> x*y’ отражает параллельное выполнение x и y после выполнения ‘a’. ‘x*y— > b’ означает, что управление перейдет к b только если оба модуля x и y выполнены.

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

Пример:

Предложение

start—>aa—>b1 * b2—>c1*c2*c3—>dd—>e*(f — >g) —>end. (1)

показывает цепочку, эквивалентную графу управления на рис.3.

 

Рис.3. Граф управления для предложения (1)

 

Очевидно, что модули b1 и b2 параллельны так же, как и модули c1, c2 и c3. После окончания работы модуля ‘аа’ запускается ‘b1’, ‘b2’, а после окончания ‘b1’ и ‘b2’ – ‘с1’, ‘с2’, ‘с3’. Далее следует запуск ‘dd’ (по итогам завершения ‘с1’, ‘с2’, ‘с3’). После ‘dd’ одновременно запускаются ‘e’ и ‘f’, а ‘g’ – только по окончании ‘f’. Как только действие модулей ‘e’ и ‘g’ прекращается, завершается и граф управления.

Предложение может быть любой длины, использую ‘ — > и *. Нет никаких ограничений на глубину вложенности. Пользователь также имеет свободу решать, как много отдельных предложений он предполагает использовать для ясности.

Перейдем к рассмотрению предложений, включающие модули проверки, которые описываются с помощью ключевых фраз.

Пример:

while cond do start—>a—>b*c—>end.

if cond then start—>a—>b—>end

else start—>c*d—>end.

switch cond case shift: start—>a—>b—>end or

trans: start—>c*d—>end default start—>(a—>b)*c*d—>end

В этом примере ‘cond’ является областью или противообластью в графе данных или простым сравнением, включающим области и противообласти. В модуле while whiledo является ключевой фразой. Фрагмент do может быть опущен для достижения эффекта функции wait. В модуле if ifthenelse является ключевой фразой и при желании пользователя фрагмент else может быть опущен. В модуле switch switchcasedefault является ключевой фразой, ‘:’ и ‘or’ - ключевыми словами, количество ветвей по ‘or’ может быть сколь угодно большим, ‘shift’ и ‘trans’ являются значениями выбора. default не обязателен. Если он отсутствует и не используется ни один case, то действие не происходит. Проверяющие фрагменты if и while модулей могут быть инвертированы путем установки ‘ - ’ перед именем модуля проверки:

if - condition then x else y.

while - condition do x.

При описании графа управления, использование временно допустимых слов для представления сложного подграфа вполне допустимо. Затем сложный подграф описывается детально с помощью ключевых слов ‘:’ и ‘&’.

 

То есть:

while aaa do sth.

sth: start—>a—>b*c—>d*e—>end & a—>x—>y—>end.

if counter then xx else yy.

xx: start—>b—>c—>end.

yy: start—>x*y—>end.

 

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

Пример:

start—>a1—>a2*a3—>a4*a5—>a6—>end.

while a3 do start—>b1—>b2—>b3*b4*(b5—>b6)—>end.

if -b1 then c1 else c2.

switch c1 case k1:d1 or k2: d2 or k3: d3 default tem.

tem: start—>d4—>d5*d6—>d7*d8—>end.

while d7.

Рис. 4. Пример графа управления

 

Подграф – модуль более высокого уровня. Как известно, модуль характеризуется временем задержки, он действует, пока не выполнится условие. Граф управления всегда направлен от ‘start’ к ‘end’. Структура моделируется с точки зрения временных интервалов. Если совершен вход в ‘start’, то время прибытия в модуле может быть сколь угодно долгим, но как только осуществлен выход через ‘end’, то время этого модуля считается завершенным, и можно начинать только следующий модуль, на который передано управление.

 

Лекция № 5

 

Имя пары графов.

 

Учитывая тот факт, что любая объединенная пара графов может быть всего лишь отдельным модулем на более высоком уровне, необходимо поименовать пару графов и установить их соответствующую область и противообласть. Таким образом, чтобы справиться со сложностью системы формируется глобальная модульная иерархическая система. Это может быть проделано тем же способом, как и в случае обычной структуры данных, за исключением того, что ключевое слово ‘=>’ заменяется ‘==>’. Допускаются также комментарии, которые заключаются внутри следующего символа ‘/* … */’.

Например: n==>fib==>r. показывает, что объединенная модель ‘fib’ является модулем с областью ‘n’ и противообластью ‘r’. Используя SDL, мы получаем аналогичные описания для программного и технического обеспечений на уровне проектирования системы. Их описания имеют одинаковый синтаксис.

 

Проверка достоверности.

Целью анализа SDL описания объединенного модуля является декомпозиция его графа управления, то есть из описания в виде цепочек в базовые дуги. Для отображения взаимоотношения между главным графом и подграфами в графе управления создается древовидная структура. На рис.5 приводится древовидная структура графа управления рис. 4.

Рис. 5. Древовидная структура графа управления

 

На рис. 5 прерывистые линии указывают на условные ветви модулей проверки, и считается, что модули a1 и a2 находятся на одном уровне, также и b1 и b2 и так далее.

После построения древовидной структуры графа управления осуществляется проверка достоверности, чтобы обеспечить непротиворечивость и завершенность пара графов. Наиболее важной является проверка на наличие циклов в графе управления: у левого висячего модуля отсекают все дуги, исходящие из него, и действия повторяются, пока не останется ни одного висячего модуля. Если в сокращенном графе управления не останется дуг, то вывод - циклов нет. Наличие циклов невозможно, т.к. граф управления определяет прохождение управления через модули с точки зрения временных интервалов. Следствием недостоверности работы системы, нарушением ее устойчивости являются «зависания» программ.

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2016-04-27 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: