Визуальный язык ДРАКОН

Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность/Надёжность

Инструменты пользователя

Инструменты сайта


atomarnye_i_liannye_struktury

Различия

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

Ссылка на это сравнение

atomarnye_i_liannye_struktury [2012/04/07 14:48] (текущий)
Владислав Жаринов создано
Строка 1: Строка 1:
 +====== Атомарные и лианные структуры ======
 +
 +Известно,​ что минимально для представления любой структуры маршрутов достаточно только следования и цикла; менее строго к этому добавляется также ветвление. По ШМ такое представление очевидно выводимо одним вложением соответствующих атомов. Поэтому можно называть получаемые структуры атомарными — такими,​ что тело схемы всегда можно «без остатка» (и без перекрытия границ подразделений — только с полным вхождением) подразделить на атомы языка этой схемы, а если подразделяется «матрёшка» - то на атомы и охватывающие их кроссы (причём вложенный атом/​кросс является нагрузкой вертикали охватывающего). Другие упомянутые выше ШМ-операции атомарности тела схемы не нарушают.
 +
 +Все теоретически возможные структуры маршрутов не всегда можно получить только вложением. Имеются в виду структуры с БП — произвольным внутри программы (goto) и изнутри цикла на его начало/​конец (т.н. break/​continue-заменители). Для их представления Паронджановым было введено понятие лианной структуры маршрутов и операция ''​пересадки лианы''​. В результате в техноязыке возможно представить структуры циклов с заменителями,​ и сверх того — некоторые случаи goto в разветвлённых алгоритмических структурах (на ближайшие слева/​справа вертикали). Как результат пересадок лианы могут возникать связи, нарушающие атомарность тела примитива (ветки силуэта),​ и их соединения тоже требуют представления явными БП.
 +
 +В силуэте у ветки возможны и побочные выходы. Они получаются как в результате укладки примитива с пересечениями,​ так и при изначальном сочинении силуэта. Для создания побочных выходов в ШМ включена операция ''​заземления лианы''​.
 +
 +Примерное выполнение этих операций показано на рисунках.
 +
 +{{ :​jazyk:​soobschenija_o_jazyke_i_metode_ischislenija_ikon:​proekt_statja_-_ocenka_texnojazyka_i_ishm_kak_razvitija_stbs_html_m78d9ffef.gif?​ |}}
 +
 +{{ :​jazyk:​soobschenija_o_jazyke_i_metode_ischislenija_ikon:​proekt_statja_-_ocenka_texnojazyka_i_ishm_kak_razvitija_stbs_html_m139b893d.gif?​ |}}
 +
 +Очевидное достоинство такого подхода — техноязык практически нейтрален к структурности алгоритмов («войне языков» высокого уровня по поводу goto и заменителей). Если принять подход противников явных БП в ЯВУ — можно отказаться от операций с лианой и алгоритмизовать только атомарными структурами. Если принять подход сторонников — разрешить лианные операции и структуры.
 +
 +Недостаток разрешения лианных структур — тот же, что в случае силуэтной укладки схемы — необходимость в явных БП для представления соединителей. Аналогично он и преодолевается.
 +
 +===== Визуализация логики и "​законы джунглей"​ =====
 +
 +Суть различий между атомарными и лианными структурами можно понять,​ раскрыв смысл конструкций каждого вида. Удобно взять «матрёшку» и результат пересадки лиан в ней (с сохранением частичной эквивалентности как тождества части наборов маршрутов). Возьмём конструкцию,​ предложенную Паронджановым для визуализации функции «логическое И» (над вопросами развилок,​ понимаемыми как булевы термы):​
 +
 +{{ :​st_drakonsu_-_ocenka_texnojazyka_i_ishm_html_m450f7821.gif?​ |}}
 +
 +Для этой цели из возможных звеньев ввода нужно использовать только одно — на главной вертикали конструкции. Именно этот маршрут выбирается по И над вопросами развилок.
 +
 +Уже из схем кроссов видно главное отличие лианной конструкции — нарушение эквивалентности с «матрёшкой» (здесь — в части побочных маршрутов). С позиций шампур-метода это несущественно — для того и операции с лианой,​ чтобы вывести то, что не получается вложением...
 +
 +Другое отличие видно при раскрытии смысла — безусловные переходы,​ представляющие соединители из «подвала»,​ частично объединяются с переходами,​ представляющими вершины-разветвители из «шапки».
 +
 +Заметим,​ что для понимания смысла нужно вновь привлекать текст. Во-первых,​ вопросов — каждый вопрос нужно чётко понимать как значение,​ получаемое при ответе и имеющее смысл переменной булева типа. На это косвенно указывает и Паронджанов — при обсуждении визуализации логики в [[http://​drakon.su/​biblioteka/​start#​literatura|"​Как улучшить работу ума...",​ Гл. 9]]. А во-вторых,​ нужно учитывать и ответы — точнее,​ их положение при выходах развилки. Можно показать,​ что от этого зависит интерпретация «шапки» как логического выражения. Мы на этом здесь останавливаться не будем — читатель,​ достаточно разобравшийся в структурном анализе,​ может попробовать сделать это сам.
 +
 +===== Алгоритмизация и типы мышления:​ когда мудрец похож на обезьяну?​ =====
 +
 +А что такого в том, чтобы допустить операции с лианой?​ И почему мы говорим,​ что «мудрец в этом случае становится похож на обезъяну»?​ Может, дело в этом описании сочинения лианных структур у Паронджанова:​
 +
 +//​Обезьяна,​ сидевшая на дереве,​ поймала свисавшую сверху лиану. Однако нижняя часть лианы приросла к стволу и не поддавалась. Обезъяна перегрызла её зубами,​ уцепилась за конец и мигом перелетела на соседнее дерево,​ где намертво привязала лиану к ветке. (Как улучшить работу ума..., с. 229)//
 +
 +Да нет — если бы дело ограничивалось такой аллегорией,​ это ещё было бы ничего — даже сообщало бы сочинению элемент игры. Что где-то и неплохо... если не заигрываться... ;-)
 +
 +Тут штука в другом — возможность манипулировать соединителями маршрутов так, что получаются неатомарные структуры,​ не располагает к построению алгоритмов,​ скажем так, контролепригодных. Ведь как строится в таком случае алгоритм?​ Сочинитель выводит какую-то атомарную структуру путём ввода атомов. Формулирует содержание линейных участков (в сущности,​ различных видов действий) и вопросы для развилок. Проверяет,​ соответствует ли исполнение этой структуры с таким текстом тому, что нужно для решения задачи. Обычно для этого "​прокручивается"​ процесс исполнения. Мысленно и/или с помощью имитатора-отладчика.
 +
 +Часто причина несоответствия в том, что в процессе вывода понимание решения уточняется — но это нам сейчас не так важно. Важно другое — что делать сочинителю,​ если обнаружено несоответствие?​ Атомарную структуру нужно в чём-то построить заново (в части вывода «слепыша» и/или содержания вершин). При этом обычно нужно рассмотреть схему или крупный блок в целом, со всеми его условиями. А в лианной можно... просто «приклепать» ещё одну или более развилок в тех местах,​ где «не работает». Пересадить лианы от новых развилок и составить их вопросы так, чтобы «пропатчить» каждую локальную проблему несоответствия. И считать на этом сочинение законченным. Если нужно ещё что-то изменить — снова можно «приклепать» неатомарные маршруты-«заплатки»... Главное — по возможности не трогать уже построенную часть маршрутной логики...
 +
 +Но. Если вспомнить смысл вопросов — то это ведь отношения над величинами алгоритма. И ответ при исполнении развилки — да или нет — зависит от значений величин,​ включённых сочинителем в вопрос. Неважно,​ сформулирован ли он уже в виде логвыра или «качественно». И может оказаться так, что на каком-то сочетании значений сами лианные маршруты станут источником новых проблем исполнения. Ведь они сочинялись во многом отдельно от остальной части схемы (и часто друг от друга — ведь решались каждый раз новые локальные проблемы) — а исполняется-то всё как система... А вот узнать,​ возможно ли такое, для неатомарной структуры оказывается проблематично. Фактически тут возможен только полный перебор сочетаний значений величин в вопросах развилок. И определение,​ какие варианты использования для каждого сочетания получаются...
 +
 +Для атомарных же структур разработаны математические методы вывода нелинейных структур маршрутов. Они принимают во внимание значения величин,​ включаемых в условия. Поэтому,​ во-первых,​ вопросы получаются «сразу правильными» (в пределах знаний сочинителя о задаче). Во-вторых,​ выводится схема сразу с текстом.
 +
 +Важно понимать такую вещь. И в атомарных структурах возможны ошибки. По теории вообще не существует «абсолютной правильности» сочинения — можно установить правильность только относительно конкретных требований к решению. Но атомарные структуры естественно выводятся из чётко сформулированных требований — это раз. И наиболее пригодны для проверки на соответствие таким требованиям — это два.
 +
 +Почему так получается?​ Дело в том, что лианная структура перестаёт быть регулярной. В некотором смысле возвращаясь к «анархии» блок-схем. И то, что шампур-метод накладывает физические ограничения (запрет пересечений маршрутов,​ упорядоченность положения выходов вершин-развилок и действий) — не избавляет от логической нерегулярности. Короче,​ эргономичность формы записи (за счёт замены части текста на графику схем) сочетается с «избыточной сложностью» содержания этой записи (потому что не исключили возможностей произвольно строить структуру).
 +
 +Фактически аналогия с обезьяной лежит именно здесь — в логике. Конкретно — в типе мышления. На это указывал один из современных специалистов в алгоритмизации и программировании — Ф.В. Ткачёв. Способ,​ которым выводятся лианные структуры,​ в его классификации относится к низшему — т.н. //​**комбинаторному**//​ — типу. Человек в этом случае действует аналогично обезьяне в известных экспериментах по изучению мышления приматов — видит «конкретный банан» - тянется к нему, не видит — не тянется (а если охота поесть — двигается,​ пока в поле зрения банан не попадёт :-))... Не правда ли, похоже на описанный нами процесс «клепания» маршрутов?​..
 +
 +Высший тип — //​**рефлексивный**//​ — предполагает,​ что сочинитель критически анализирует возможные варианты и отбрасывает ненужные. При этом «комбинаторность» никуда не девается - просто она управляется рефлексией. И человек может определёнными усилиями и при благоприятных обстоятельствах перейти от первого типа ко второму. Подробнее можно узнать [[http://​forum.oberoncore.ru/​viewtopic.php?​p=64991#​p64991|здесь]] (Ткачёв выступает под псевдонимом Info21).
 +
 +Ну и как же это делается?​ Удобно будет раскрыть суть структурной алгоритмизации в отдельном разделе.
  
atomarnye_i_liannye_struktury.txt · Последние изменения: 2012/04/07 14:48 — Владислав Жаринов