Инфологическое обеспечение | Когнитивное | Графит-букварь
Стр. 1 2 3 4 5 6 7 8 9 10 11 12
Содержание
Несепулька-виопы ветвления: Вопрос, Выбор и Вариант. Развилка и переключатель. Пересечения маршрутов
Несепулька-виопы ветвления: Вопрос, Выбор и Вариант. Развилка и переключатель. Пересечения маршрутов
На базе данных виопов, как уже говорилось, визуализируют ветвления – дихотомические (развилки) и множественные. Практически целесообразная деятельность не обязательно должна иметь единственный порядок действий (маршрут); часто требуется многообразие маршрутов, из которых выбирается нужный по ситуации.
Далее, в процессе визуализации многообразия маршрутов возможны нарушения топологических запретов. Их можно преодолевать одним из двух способов:
запрещая или немедленно устраняя путём автопреобразований шампур-метода;
временно разрешая и фиксируя место каждого нарушения особой записью до последующего устранения.
Первый способ поддерживает синтаксическую правильность визуала. Однако он требует дополнительных операций, отвлекая ресурсы сочинителя; в то же время не обязательно, что в окончательной редакции нарушения сохранятся.
Второй способ усложняет чтение схемы до заключительной редакции; однако сочинитель действует наиболее простым и естественным образом, что порой важнее для качества окончательного результата.
Временное разрешение оправданно ввести для следующих запретов техноязыка:
на пересечения линий – чтобы не вводить их в силуэт (что довольно сложно делается);
на дополнительные изломы – чтобы более плотно компоновать на ограниченном формате.
Изломы обсуждались ранее (см. п/п 2.1.3.1).
Очевидно, для записи нужно ввести особые типы вершин.
Как и операторы сохранения и извлечения, все эти вершины предлагается ввести в алфавит техноязыка для визуализации любых процессов, в т.ч. практических. Т.к. пока это подлежит обсуждению, то и операции с участием вершин определим здесь, а не в ТФЗ.
Для неформального описания развилки можно поставить вопрос «Имеют ли место заданные условия?», на который возможны ответы «да» либо «нет». Исполнитель проверяет условия и выбирает маршрут, соответствующий ответу.
Формально условие развилки записывается как логическое выражение (логвыр) – совокупность арвыров, связанных операциями отношения. Результат вычисления логвыра – значение, указывающее, выполнились отношения при заданных значениях величин, входящих в арвыры, или нет.
Вообще говоря, в качестве величин условия мы можем записать любые арифметические выражения, но они будут вычислены только для целей сравнения (не сохранятся, т.к. не выполнено присваивание); членами выражения м.б. различные функции языка (среди которых м.б. и ввод). Это практикуется в прогязыках.
Практикуется и арифметический условный оператор, где условие формулируется от числовой величины, проверяемой на «меньше/равно/больше» другой величине.
При множественном ветвлении задаётся тематический вопрос. Примеры таких вопросов часто встречаются в жизни: это всевозможные анкеты, тесты, включая известный ЕГЭ :) Выбирается маршрут, соответствующий одному (и только одному) варианту.
В процессе формализации условия могут использоваться и в ином контексте.
Так, в алгонотации предусмотрена запись условий вне конструкций ветвления. Это т.н. пред- и постусловия алгоритма (обозначаются операторами НАЧ и КОН), а также текущие, или оперативные условия, влияющие на продолжение исполнения алгоритма (оператор УТВ). По смыслу такого рода условия (назовём их контрольными) - это директивы постановки контрольной точки исполнения алгоритма (точнее, представляющей его программы); неявно предусматривается реакция на невыполнение условия – прерывание исполнения и переход в режим отладки программы (если он предусмотрен архитектурой исполнителя) или просто выход из неё (в частном случае - останов исполнителя).
Во многих прогязыках имеются операторы данного назначения; чаще всего их командная часть выражается ключевым словом assert. Такой оператор (точнее, встроенная функция) есть и в Оберон-2 (только для задания оперусловий).
В общем такие условия отражают расширенный смысл исполнения алгоритма: любой оператор м.б. выполнен или блокирован в зависимости от алгоритмической обстановки, складывающейся после предыдущего (по ходу следования) оператора. Т.к. обстановка включает и состояние внешней среды, то с его изменением возможно продолжение исполнения алгоритма.
С этим смыслом мы уже сталкивались при описании параллельных процессов; там подразумевалась временная блокировка исполнения алгоритма адресата, содержащего оператор Д26, до получения сообщения, соответствующего этому оператору.
Главная особенность контрольных условий — при невыполнении любого из них исполнение не просто приостанавливается, но завершается; тем самым у процесса появляется, так сказать, «промежуточный финиш». М.б. исполнена некая альтернативная процедура, чтобы по возможности устранить ситуацию невыполнения (в простейшем случае — ожидание в течение некоторого допустимого времени), прежде чем выйти на завершение.
Для визуализации таких условий введём оператор Д30 (см. п. 3.5.1 Приложения 2). Он представляет собой развилку-боковик (правый); для записи предусловий виоп присоединяется к вершине Заголовок, постусловий – к вершине Конец. Оперусловия визуализируются присоединением вершины к звену вертикали по месту проверки.
В визуализации используется нешампур-вершина, условно называемая разъёмом инварианта. Она акцентирует внимание читателя на том, что состояние, в котором алгопроцесс находится на звене, содержащем разъём, проверяется на соответствие инварианту, и последствие несоответствия (т.н. исключительной ситуации исполнения) - выбор маршрута не просто альтернативного, но ведущего к останову процесса до основного конца (или даже при отсутствии такового — в «зацикленном» визуале). Этот останов в случае обычного инварианта безусловен, а в случае исключения — наступает, если предусмотренная сочинителем процедура обработки исключительной ситуации (исполненная разово или циклически) не восстановила соответствия состояния инварианту.
Условие переключателя разнесено по иконам Выбор и Вариант. При этом выражение (в частном случае – переменная) выбора служит образцом для сопоставления с выражениями (в частном случае – также переменными или константами) вариантов. Соблюдается определённая дисциплина просмотра вариантов, чтобы выбор нужного не был случайным.
Отметим, что возможны короткая и длинная схемы вычисления условий при выборе варианта. При первой анализ вариантов прекращаетcя на первом удовлетворяющем условии, при второй – всегда анализируется каждый вариант выбора.
Может показаться, что так невозможно описать ответ не из одного варианта, часто используемый в реальных тематических вопросах. На самом деле для этого случая просто определяется ещё один вариант как связка выражений для совместно выбираемых вариантов (логическим И); его нужно поместить перед всеми этими вариантами по порядку просмотра, чтобы выбор был правильным (иначе до связки мы никогда не доберёмся: всегда будет обнаруживаться ИЛИ одно, ИЛИ другое, и т.д... частное значение).
Фактически ветвление происходит по состоянию алгоритма, имеющему место перед проверкой условия. Как получается результат проверки условия? Если условие содержит только величины, фигурирующие в шампур-блоках ветвей, то этот процесс сводится к проверке логотношений между величинами. Если же в условном операторе допустимы вычисляемые выражения, то по сути вершина "условие" тем самым неявно превращается в конструкцию следования из рабочего шампур-блока вычисления выражений и собственно условного оператора, в который результаты из этого блока поставляются наряду с результатами других вычислений.
Какая т. зр. на содержание условия лучше? Я считаю естественной первую – внутри логвыра никаких значений не вычисляется, всё сделано выше по маршруту. При этом развилка соответствует машинной команде ветвления (только с более сложным условием).
Используя визуализацию БП, можно показать логику ветвления/слияния маршрутов. При этом организация множественного ветвления посредством переключателя будет подобна организации силуэта, что можно видеть на схеме далее. Здесь подробная диоформа (с показом деревьев в «шапке» и в «подвале») далее (на нижней схеме) раскрыта представлением вершин-разветвителей через развилки:
Структура дракон-переключателя (подробная диоформа и «матрёшка»)
Видно, что получилась «матрёшка». Для компактности мы расположили вход вопроса «не по шампуру», как и при раскрытии «шапочного разбора» в петле силуэта. Вершины-соединители также представлены через безусловные переходы (образующие кратный БП).
Матрёшка организована так, что каждая развилка находится на отдельной вертикали; такую запись назовём прямой (т.к. она прямо соответствует топологии переключателя).
Развилка в сочетании с БП в «шапке» представляет команду ветвления между линейными маршрутами; т.е. эта схема есть приближение к лиоформе переключателя, готовой к выкладке в линейный порядок. Чтобы прямую запись действительно выложить в линию, нужно ввести БП также и в правое плечо каждой развилки (здесь — горизонтальное).
Точная лиоформа для прямой записи показана на схеме далее:
Структура дракон-переключателя (прямая лиоформа)
Здесь также введён начальный БП (по метке ВхПер); он возникает, если предыдущие маршруты требуют отделения для выкладки (различные случаи рассмотрены в п/п 2.2.1.1).
Если рокировать каждую развилку, получим запись, которую назовём инверсной.
Структура дракон-переключателя (инверсная лиоформа)
Здесь команда ветвления на базе развилки записана полностью, а кратные БП в «подвале» сокращены. Также показаны БП в обоих плечах каждой развилки. Видно, что необходимости вводить БП в главные плечи развилок для выкладки нет (поэтому их вершины там даны пунктиром).
Видна важная особенность: в инверсной записи меняется и порядок вертикалей; первому в порядке просмотра варианту соответствует уже крайняя правая вертикаль.
При рассмотрении переключателя употреблены обычные дракон-виопы Имя и Адрес, чтобы подчеркнуть, что виопы Вариант — это просто иная, чем имя ветки силуэта, форма визуализации метки БП, «вытащенной» в дракон-переключателе из полной записи древесной структуры ветвлений, организующей выбор варианта. В дальнейшем мы будем пользоваться также и вариантами в роли вершин-меток БП, а также введём иные формы вершин для представления БП другого типа.
Для временной записи конструкций с нарушением топологических запретов введём следующие вершины в алфавит дракон-схем:
Имя соединителя – идентифицирует начало подребра схемы, продолжающегося после обрыва;
Адрес соединителя – идентифицирует конец подребра схемы заканчивающегося обрывом.
В совокупности вершины образуют безусловный переход-соединитель для размыкания неустранённых пересечений линий в примитиве (ветке силуэта). Допустим для БП-соединителя также и горизонтальную ориентацию (чтобы пересекать вертикали); тогда соединители вводятся в горизонтальную из пересекающихся линий и потому повёрнуты на 90°.
Пример показан далее на верхней схеме:
Безусловные переходы в визуализации пересечений
Заметим, что визуализировать схему с неустранёнными пересечениями можно и иначе — не вводя лишних сущностей. Для этого следует вспомнить о визуализации ветвлений в лиоформе; тогда очевидно, что можно просто явно показать БП в развилке, как на нижней схеме.
Затем схема компонуется так, чтобы точка пересечения оказалась внутри одного из БП (при ветвлении или слиянии). Линии БП при этом показывать необязательно; как и в обычных соединителях схем, при чтении ориентируемся на совпадение текстов вершин.
Также БП-соединители можно использовать для показа устранения пересечений в силуэте по шампур-методу; это полезно для изучения преобразования «примитив-силуэт» и обратного, выполняемого для целей программирования, как мы увидим далее. Это значение интереснее, чем временное размыкание пересечений.
Графика виопов имеет соответствия с символами ГОСТ, но значения их там другие.
Вершины всегда используются как часть макроикон Развилка и Переключатель. Текст переключателя в техноязыке предполагается кратким: в выборе указывается только имя переменной выбора.
Условие неформально определяется как высказывание на родном языке, такое, что:
в него входят объекты (величины) алгоритма, связанные словесными логическими функциями и отношениями;
в процессе исполнения относительно условия можно сказать, выполняется ли оно (истинно) или не выполняется (ложно).
Формально условие определяется как отношение двух и более выражений (формул), истинное, если выполняется логическое отношение между значениями выражений.
Условия м.б. любыми, но специализированы по видам (категориям действительного):
функциональные (типа: "[НЕ] <это> И [НЕ] <то> ИЛИ [НЕ] <сё>"; "И [НЕ] <то>, И [НЕ] <это>"; "<'<лучше|хуже>, чем'|'таково же, как'|'несопоставимо с'> <сущность-образец>[ по <таким-то> критериям]"; "<подобно|различно> с <сущность-образец>[ в <таких-то> отношениях (аспектах, свойствах)]"; "имеет <такие-то> признаки с <такими-то>║<<'такими же, как'|'иными, чем'> у <сущность-образец>> значениями"; и т.д.);
временнЫе ("[НЕ] раньше/позже, чем [через <интервал> после] <событие>"; "<тогда-то> по <такому-то> времени"; "одновременно с <событие>"; "в течение <такого-то> времени"; "<'быстрее'|'медленнее'|'в том же темпе'> в сравнении с <процесс-эталон>"; и т.д.);
пространственные ("<левее|правее|выше|ниже|ближе|дальше>, чем <такой-то> реперный <объект|точка> на <смещения-по-координатам>"; "<там-то> в <такой-то> системе координат"; "с <такой-то> стороны от <такой-то> реперный <объект|точка>"; "там же, где и <такой-то> реперный <объект|точка>"; "<длиннее|короче|крупнее|мельче>, чем <объект-эталон>"; "на ['расстоянии <величина> по ']пути <имя-пути> из <исходное-место> в <конечное-место>"; "<'вплотную'|'с зазором <размер>'> к <такая-то> базовая <точка|линия|поверхность>"; "с поворотом оси на <такой-то> угол относительно <такой-то> реперной <оси>"; и т.д.).
Система координат (СК) м.б. относительной или абсолютной, прямоугольной или иной (цилиндрической, полярной и т.д.). В обыденных описаниях (на неформальном языке) СК часто вводится неявно. На формальном языке СК точно определяется для каждого условия.
Условие ветвления м.б. составным (формулой, где отношения объединяются логическими функциями); такое условие можно визуализировать нелинейной конструкцией, как показано в /1, Гл.9/, при этом логические функции записываются через связи линий. Полученная подсхема есть сложное ветвление с одной особенностью: её вертикали пустые.
Любые условия записываются в виде, зависящем от выбранного языка спецификации:
Запись условия на неформальном и формальном языках (формат и пример) |
|
имеет ли место <то-то{<лог-фун> то-то}> ? |
?: [лог-выр] |
|
|
Расхождение внешнего контура детали М080 с его контрольным шаблоном не превышает норму И поверхность детали достаточно гладкая ? |
?: зазор(ВнешКонтур.ШаблМ080,ВнешКонтур.ДетМ080) ≤ НормПросвет И чистота(Поверх.М080) ≤ НормКлассЧист |
В данном примере формально определена операция зазор, предоставляющая данные о степени совпадения контуров детали и шаблона; практически она м.б. реализована по-разному (на просвет, при помощи щупа, оттиском краски с шаблона на деталь). То же относится и к операции чистота.
В этом примере, однако, условие содержит действия (определения зазора и чистоты); поэтому его можно преобразовать, вынеся операции зазор и чистота в предшествующие операторы присваивания результата каждой операции некоей переменной; в тексте условия используем уже эти переменные.
Графика БП-соединителя имеет в основе дракон-вершины, но чтобы подчеркнуть временность его (неразрешённость в классическом техноязыке), удвоена прямая сторона.
В начало страницы | Оглавление | Версия для печати
Copyright © Жаринов В.Н.