Приложение 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.