Д Р А К О Н О Г Р А Ф И К А

Приложение 4.
КАТАЛОГ ПРИМЕРОВ ВИЗУАЛИЗАЦИИ

В приложении показаны конкретные случаи визуализации знаний, представляющие как теоретический, так и практический интерес.

Каталог примеров | Частичная визуализация | Императивные знания

Здесь даны примеры визуализации импер-знаний на техноязыке и других типов знаний на иных языках, рассмотренных в документе. В каждом примере используется только один язык.

Содержание

Произвольные ветвления

Примитивы, силуэты и переходы между ними

Перевод разветвлённо-циклического визуала в ЦД

Произвольные ветвления

Дадим пример структуры, по возможности иллюстрирующей введённые в п. 2. понятия на одной странице.

Произвольное ветвление – пример конструкции

Произвольное ветвление – пример получения

Пример произвольного ветвления лианной структуры (т.е. такой, которую невозможно получить без пересадок лиан) см. ранее по тексту; там же показано, как можно получить такую структуру маршрутов. При этом можно и сначала пересаживать лианы в пустой матрёшке, а потом заполнять её шампур-блоками в нужных точках ввода (которые на схемах не показаны)

«Шапка» переключателя, как мы помним, логически остаётся единой и потому недоступной для пересадки лиан.

В начало страницы

Примитивы, силуэты и переходы между ними

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

Для начала возьмём схему из /1, Рис.13/.

Пример примитивной визуализации деятельности

Для сравнения изобразим ту же структуру деятельности как блок-схему:

Пример изображения деятельности блок-схемой

Видно, что изобразить структуру по правилам блок-схем (приведённым на «очных ставках» в п/р 2.2) можно примерно на той же площади лишь с ухудшением эргономичности.

От примитива можно перейти к силуэту; в данном случае переход по смыслу топологический, т.к. преследует цель устранения пересечений. Результат показан на схеме:

Пример топологического перехода к силуэту – начало

Также покажем, как устраняются пересечения для этого примера.

Пример топологического перехода к силуэту – продолжение

Как показано для перехода к силуэту, вначале вводятся БП в вертикали примитива с пересечениями. Мы показываем их особыми иконами МИ7, МИ8; «М» означает (пока) «модифицированный».

Индекс в качестве имени ветки подчёркивает, что ветки выделяются не по логическим основаниям (делению задачи на смысловые части), а по физическим (в данном случае топологическим).

В начало страницы

Перевод разветвлённо-циклического визуала в ЦД

В примере визуализирована по графит-методу процедура печати полусектора на экране из текстовой Паскаль-Ассемблер-программы1. Машобраз текстового описания доступен здесь. Комплексная визуализация программы оформлена как этот пример.

Визуализация исходного текста процедуры и эскиза её преобразования

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

Продвижение состояния в цикле определяет печатаемая позиция сектора i; для цикла задаётся диапазон изменения позиции в полсектора, зависящий от передаваемого процедуре номера полусектора n (если n=0, то i=0...255, если n=1, то i=256...511). Сначала нужно вывести 16 позиций как 16-ричные двузначные числа (цифры берутся по таблице знакогенератора), затем – те же 16 позиций как литеры по таблице либо (для кодов меньше 32, не имеющих символического представления) как знаки «точка». Т.о. один и тот же поддиапазон позиций в полусекторе (соответствующий строке на экране) проходится дважды. В цикле каждый проход оформляется как целевая ветвь, выполняемая 16 раз для вывода значений в своём формате.

По завершении поддиапазона цикл повторяется на следующем (с инкрементом №Стр); в «лоб» это может обеспечивать третья (наружная) ветвь, но мы поступим более рационально.

Переход между целевыми ветвями возможен по специальному флагу, взводимому в одной ветви и сбрасываемому в другой (в обоих случаях по завершении поддиапазона); считаем, что при инициализации ЦД флаг сброшен и это соответствует первому типу вывода. Для входа в нужную целевую ветвь в её условии проверяется флаг; также нужно проверять достижение номером позиции верхней границы прохода (последней позиции строки); когда граница достигнута, нужно сменить ветвь.

Получается, что в каждой целевой ветви различаются два состояния – на последней позиции прохода (заключительное) и на любой другой. Тело ветви должно иметь два маршрута, выбираемых по номеру позиции; на заключительном дополнительно к общему целевому действию – вызову функции печати и наращиванию индекса прохода – изменяется текущее состояние флага (и наращивается индекс диапазона для второго типа вывода, т.к. его завершение означает завершение обработки строки в целом).

Условием выхода из цикла служит достижение конца всего диапазона; в первом приближении очевидно, что оно должно проверяться в каждой ветви.

Данные рассуждения формализованы как эскизный вариант содержания тела процедуры (см. выше).

Атрибут статуса содержания (со значением для эскиза <draft>) в данном случае приписан области; в соответствии с общеязыковыми правилами можно также создать отдельную импер-графит-схему, которой и приписать атрибут статуса.

Также показаны изменения определений типов по сравнению с исходной визуализацией (комплексной). Здесь также изменена компоновка частных АТ-схем для согласования с вариантом организации общей АТ-схемы, обозначенным в этом примере как 1-Б.

Детальная формализация исходит из следующих соображений. Индекс позиции мы вычисляем по номерам строки и позиции. Заключительному состоянию прохода соответствует №Поз=15 (имея в виду, что нумерация начинается с 0). Вместе с «перебросом» флага в этом состоянии обнуляется номер позиции; во второй ветви после этого также наращивается номер строки и выводится перевод строки на экране.

Индексом всего цикла служит номер строки (№Стр, 0...15); номер печатаемой позиции i (он же индекс массива) получается умножением его на 16 и прибавлением номера позиции №Поз в поддиапазоне (наращиваемого независимо в каждой из внутренних ветвей), а также начальной позиции полусектора в массиве НачПоз.

Полученная структура показана как вариант тела процедуры.

Варианты печати полусектора в цикле Дейкстры

По сути мы, используя визуализированный исхтекст как спецификацию, построили эквивалентную процедуру. Правда, чтобы записать её снова как прогтекст, понадобится по крайней мере Оберон :), так что оформим ЦД-решение как область-императив, т.е. детализацию ДА-Паскаль-тела на диалекте ДО7Pr, определённом здесь (будем считать, что РДП-редактор поддерживает такую возможность).

Может показаться, что структура тела в новом варианте несколько сложнее; однако достаточно взглянуть на раскрытие смысла границ цикла ДЛЯ, проведённое в п. 2.1.3, чтобы увидеть, что ничего лишнего вспомогательные присваивания не делают. В то же время исключены сложные вычисления вроде деления нацело. Отпадает необходимость в разных индексах позиции при разных типах вывода (в исхтексте – i и k), т.к. циклы по типам исполняются раздельно. Не нужны и вспомогательные величины для границ параметров (i1, i2, m); для них взяты константы. Переход между полусекторами реализован прибавлением начальной позиции полусектора (зависящей от его номера n).

Очевидная оптимизация состоит в исключении из условий ветвей проверки номера позиции; всё равно он сбрасывается в 0 на последнем проходе, а выбор другой ветви на следующие 16 проходов определяется перебросом флага. Нахождение же номера строки ниже границы её длины служит паролем, охраняющим повтор ветви цикла; когда пароль по №Стр утрачивает актуальность, происходит переход по шампуру (т.к. в ДО7Pr принято, что условия ЦД-ветвей проверяются по шампуру); при невыполнении во второй ветви это означает выход из цикла. С учётом того, что во второй же ветви только и наращивается №Стр, мы, очевидно, можем исключить пароль по нему из охраны первой ветви.

Начальную позицию полусектора можно вычислить однократно (т.к. его номер в цикле не изменяется) и хранить в своей переменной; это упростит вычислительную работу, которую мы задаём в ЦД исполнителю.

Не откажем себе в удовольствии оформить оптимизацию как область-диспозицию относительно исходного ЦД-решения; тем самым лишний раз можно показать элегантность работы с вариантами сочинения посредством областей. В данном случае в РДП-редакторе (при подготовке данного примера частично моделируемом в OpenOffice.org) можно было бы продублировать исходный вариант А, внести в дубль-вариант Б изменения, а затем решать, что делать с исходным – удалить из проекта или сохранить для истории...

В целом такая запись достаточно компактна. Дополнительную возможность для сокращения даёт оформление присваиваний посредством полок (проведено в варианте Б и на эскизе).

В начало страницы | Оглавление | Главная | Версия для печати

Copyright © Жаринов В.Н.

1Источник: Ерёмин Е.А. Популярные лекции об устройстве компьютера. – СПб.:БХВ-Петербург, 2003. – С.138-141.

Hosted by uCoz