Дружелюбный Русский Алгоритмический язык, Который Обеспечивает Наглядность/Надёжность
Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
texnojazyk_i_shampur-metod_-_suschnost_preemstvennost_razvitie [2012/04/07 13:23] Владислав Жаринов [Вложение и структурные изменения на графах] |
texnojazyk_i_shampur-metod_-_suschnost_preemstvennost_razvitie [2012/12/25 10:58] (текущий) Владислав Жаринов [Отступление об исполнителях: «наши машины» и люди - «винтики» и «творцы»] |
||
---|---|---|---|
Строка 83: | Строка 83: | ||
Вообще каждый формальный язык подразумевает какую-то модель исполнителя. Если она соответствует какому-то реальному исполняющему устройству — то говорят, что это язык низкого уровня. Если же модель абстрагирует (т.е. отвлекается от несущественных деталей, скрывает их за укрупнённым представлением) реального исполнителя — то говорят, что язык, соответствующий ей, высокого уровня.На рисунках далее мы будем пользоваться элементами когнитивной графики, как принятой у Паронджанова, так и новой. Словарь обозначений можно найти [[http://grafit-basis.narod.ru/L3/usl_obozn.html#Pril1-n12|здесь]]. | Вообще каждый формальный язык подразумевает какую-то модель исполнителя. Если она соответствует какому-то реальному исполняющему устройству — то говорят, что это язык низкого уровня. Если же модель абстрагирует (т.е. отвлекается от несущественных деталей, скрывает их за укрупнённым представлением) реального исполнителя — то говорят, что язык, соответствующий ей, высокого уровня.На рисунках далее мы будем пользоваться элементами когнитивной графики, как принятой у Паронджанова, так и новой. Словарь обозначений можно найти [[http://grafit-basis.narod.ru/L3/usl_obozn.html#Pril1-n12|здесь]]. | ||
+ | |||
+ | ==== Отступление о синтаксисе: эргономично — не всегда неформально ==== | ||
+ | |||
+ | |||
+ | Далее как в графике, так и в тексте мы будем пользоваться новыми для читателя обозначениями. Дадим некоторые пояснения в дополнение к упомянутым ранее определениям. | ||
+ | |||
+ | В общем случае содержание можно описать с привлечением метаязыка РБНФ, что и сделано в этой статье. Определение принятой версии РБНФ можно найти среди условных обозначений, к которым Вас отсылали ранее. | ||
+ | |||
+ | РБНФ у нас применяется не только к текстам, но и к графике. Принцип простой — в индексе части вводятся РБНФ-скобки, если часть необязательна в данном месте схемы. А если скобки задают возможность повтора, то очередное место указывается там же стрелочками. Если в одну сторону — то новая часть должна входить в схему всегда с этой стороны (получается, что после предыдущей введённой части с таким же индексом — ряд растёт по стрелке). А если в обе — то можно выбирать место в ряду — с левого края, правого или где-то посередине (если в ряду уже больше двух частей — между любыми двумя). Нельзя только выйти за место самого ряда в схеме. Сами индексы, если необязательно приводить их полностью, замещаем знаком '#' (кстати, знаки как элементы структуры текста везде берутся в апострофы). | ||
+ | |||
+ | В графике мы тоже акцентируем возможность отсутствия фигур и/или связей — пунктиром линий. Если надо зрительно объединить разные части схемы — используем цвет линий и/или фона, толщину контуров и/или связей. Применяем и специальные операторы выбора частей. При этом на схеме выделяются позиции частей, к которым выбор применяется. Здесь интуитивно д.б. понятно следующее правило — когда в результате выбора данная часть отсутствует, отсутствуют и её внешние связи. Обычно индексы выбора мы даём для вершин — связанные с ними рёбра выбираются, так сказать, автоматически. | ||
+ | |||
+ | Конечно, для чтения этих обозначений нужен некоторый навык. Поэтому мы часто кое-что поясняем по их употреблению. В дальнейшем читатель, думается, сможет и сам пользоваться ими. | ||
+ | |||
+ | Может возникнуть вопрос — а зачем они? Одна из основных ролей — сокращать объём представления. Если рисовать/писать всё, что может повторяться — то при большом числе повторов получится чересчур «габаритное» описание. Помимо его большой площади (и трудной обозримости), возникает и взаимосвязанная проблема восприятия — когда «за деревьями не видно леса». :-) Т.е. логическая структура предмета описания неясна. И вот тут выделение частей, которые могут повторяться или быть необязательными, кроме сокращения объёма, работает и на прояснение структуры. Как правило, это оказываются именно те части, на которые можно поделить предмет в результате структурного анализа его содержания. И получается, что физическое и логическое структурирование в значительной степени совмещаются. | ||
+ | |||
+ | ==== Отступление об исполнителях: «наши машины» и люди - «винтики» и «творцы» ==== | ||
+ | |||
+ | Так называются машины для переработки данных у Б. Мейера — одного из современных специалистов по инженерии программ. Мы уже говорили, что исполнителя алгоритмов можно описать формальной моделью. При этом важно понимать, что он так или иначе связан с окружающим миром — иначе превращается в «вещь в себе», для решения задач бесполезную. Законы связи, взаимодействия и реализации задач, поставленных исполнителю (а где-то — и установления целей и постановки задач) изучает специальная наука — //**кибернетика**//. И исполнитель вместе с окружением образует некую кибернетическую систему как объект изучения в этой науке. | ||
+ | |||
+ | Начнём с простой системы, которая показана в «детской» книжке по техноязыку - «[[http://drakon.su/biblioteka/start#knigi|Занимательная информатика]]»: | ||
+ | |||
+ | {{ :sxemavklispolnitelja_-_ill_zaniminfor_.png?800 |}} | ||
+ | |||
+ | Здесь показан исполнитель, устроенный так, что может и получать данные от окружения — по связи «информация о внешнем мире» (её ещё называют обратной), и выдавать воздействия во внешний мир — по связи «движения Мускула» (ещё её называют прямой). Собственно «наша машина» - устройство-исполнитель программы — это блок «Мозг». Идущие от него вопросы — это тоже команды, управляющие получением данных обратной связи. | ||
+ | |||
+ | Здесь исполнитель подразумевается как техническое устройство. Но задачи он решает в интересах человека-пользователя. Человек выбирает алгоритм (а если это не предусмотрено задачей, для которой сделан исполнитель — то запускает его исполнение — хотя бы просто включив робота). | ||
+ | |||
+ | Многие машины устроены по такой схеме. Это и программируемая бытовая техника, и станки с ЧПУ (в режиме работы по программе), и самонаводящиеся боеприпасы. | ||
+ | |||
+ | Во многих задачах человек присутствует непосредственно — когда он участвует в процессе решения. Вот пример структуры исполнителя для такого случая: | ||
+ | |||
+ | {{ :page3_graph_a3ls_taskdataproc_111_drakon-schdesign_curr.png?800 |}} | ||
+ | |||
+ | Тут человек-оператор представлен «крупным блоком» вверху, а машина (КСА — от «комплекс средств автоматизации») — таким же блоком внизу. Внутри каждого блока находятся элементы — это части т.н. информационного пространства. Оно выделяется в модели исполнителя — наряду с т.н. операционным устройством. В упомянутых «машинах Тьюринга/Поста» это «лента» и «головка». | ||
+ | |||
+ | Эта схема относится к [[http://grafit-basis.narod.ru/L3/viz_alg_TFZ.html#Doc-n42-1B-I2|задаче оформления дракон-схем]]. Можно изучить описание задачи полностью — может пригодиться. Если, скажем, надо нарисовать схему — а под рукой только редактор из офисного пакета. Или есть и специализированный дракон-редактор — но он для простого рисования слишком сложен... | ||
+ | |||
+ | Что мы здесь видим? Человек хранит не только точные описания алгоритмов, подобные машинным — но и знания, умения, навыки (ЗУН). А ещё — цели, представления о том, как можно ставить задачи и находить их решения. И чем нужно ограничивать себя в целеполагании и в решении задач (в самом общем смысле это нормы этики), а также чем должны ограничиваться люди в отношении к окружающему миру (это нормы морали). Всё это составляет интеллектуальные ресурсы. | ||
+ | |||
+ | Если же думать, что поведение человека описывается только алгоритмически строго — то мы приходим к упрощённой модели человека — т.н. «винтику». В каких-то задачах, которые поставлены уместно с т. зр. общих норм поведения — да, можно составлять алгоритмические инструкции и следовать им. Но в целом, если не упрощать — мы не можем дать «фундаментального алгоритма поведения»... | ||
+ | |||
+ | Вот и повод показать более общий случай структуры исполнителя. Здесь различные люди имеют отношение к одной «предметной области», решая разные задачи: | ||
+ | |||
+ | {{ :graph_a3l_3211_task_senscontr-activsch_dsk.gif? |}} | ||
+ | |||
+ | Оператор, решающий рассматриваемую задачу (её описание можно найти [[http:///drakonografika.narod.ru/L3/automatization_know.html#Pril4-n3211-2|здесь]]), связан с объектом. И этот же объект используется его персоналом — другими людьми. Иногда цели их м.б. нейтральны друг к другу, иногда совместны, иногда и противоположны. | ||
+ | |||
+ | А что внутри у исполнителя алгоритма? Устройство его сложно, и описать можно по-разному. В большинстве случаев структура подобна показанной на следующей схеме: | ||
+ | |||
+ | {{ :grafit-abc_html_m5c6b9f1d.gif? |}} | ||
+ | |||
+ | Схема составлена на [[http://grafit-basis.narod.ru/L3/aktiv-vspom.html#Pril2-n73|СТ-языке]]. | ||
+ | |||
+ | Важно понимать, что все эти блоки тоже работают в определённом порядке. Только алгоритм здесь не программируется, а как говорят, "зашит в железе" - реализован аппаратно, за счёт соединения деталей. Для переработки данных существуют определённые законы устройства аппаратуры, делающие её работу максимально правильной. Интересующиеся могут прочесть [[http://www.mcst.ru/e2k_arch.shtml|эту работу]]. | ||
+ | |||
+ | Можно видеть, что «наша машина» (здесь это устройство — ДСК) может и не использоваться при решении — если она стала неработоспособной. Кто это определяет? Оператор. А бывает и так — машина в какой-то момент начинает работать неправильно. А определить это оказывается невозможно — по крайней мере, вовремя... | ||
+ | |||
+ | Чтобы свести такую возможность к минимуму, изделия рук человеческих д.б. гарантоспособны. По-простому это значит — их создатели должны полностью отвечать за то, что изделие работает так, как положено. Но не только — ещё нужно, чтобы ущерб от неправильной работы был в допустимых пределах или вообще была возможность его предотвратить. Если изделие программируется — то гарантоспособность исполнения программ «нашей машиной» в его составе — важная часть решения этой проблемы в целом. Если же и нет — то понимание работы изделия, строгое алгоритмически, тоже важно. Для этого в конечном счёте и нужно описывать алгоритмы точно и понятно. Для человека... | ||
+ | |||
+ | ==== Отступление: формализация и языки представления знаний ==== | ||
+ | |||
+ | В отличие от исходного определения, здесь задаются также текстоэлементы языка. Дело в том, что смысл и лексики, и отдельных конструкций (типовых и уникальных подсхем) и законченных схем не сводится к тому, который представлен графикой вершин и линий. Это отражено ещё автором техноязыка в названии авторской технологии его применения — ГРАФИТ-ФЛОКС (от ГРАФика И Текст; ФЛОКС — дополнительный к ДРАКОНу табличный язык, используемый для описания величин) — и в предварительной классификации содержания программно строгих описаний деятельности. Последовательно этот принцип проведён в [[http://grafit-basis.narod.ru/L2/gen_struct_dan.html|классификации формализуемых знаний]] и в графит-методе — новом виде исчисления схем, определённом [[http://grafit-basis.narod.ru/L3/grafit-rules.html|здесь]]. Графит-метод использует и основные принципы, принятые для техноязыка, но также вводит новые. Учёт текста не только для частных случаев (гибридных техноязыков), но и в общем (и в правилах исчисления, когда нужно) — один из графит-принципов. Заметим, что правильно добавлять сюда также и таблицы — как своего рода предтечу схемы текста — и несхематические изображения (скажем, рисунки, вставленные в вершины) — и тогда говорить просто о содержании вершин. | ||
+ | |||
+ | Уже давно специалисты по анализу и проектированию деятельности и взаимодействия человека в трудовом процессе — инженерные психологи — определяли общую структур процесса формализации знаний. Общий результат можно найти на [[http://drakonografika.narod.ru/L2/formalization.html#Doc-n1411|этой странице]]. В структуре процесса можно фактически выделить три стадии - «качественную», математическую и информатическую. Каждой из них соответствует достигаемый уровень формальности языка. Познакомимся с этими уровнями вкратце. | ||
+ | |||
+ | //**Неформальный**// предполагает «почти естественную» формулировку действия — как фразы на родном языке сочинителя, только с заданным подразделением на имена объектов (в экономическом смысле — предметов и результатов труда) и «имя действия» - глагольные обороты, связующие объекты и указывающие применение к ним называемых действий (и, возможно, инструментов). Как действия д.б. знакомы исполнителю по названиям (входить, как говорят Паронджанов, а ранее — [[http://forum.oberoncore.ru/viewtopic.php?p=71218#p71218|В.Ш. Кауфман в книге «Языки программирования. Концепции и принципы»]], в его «репертуар»), так и объекты д.б. известны по именам, образуя, так сказать, «багаж» исполнителя; то же касается и инструментов, образующих, условно говоря, «реквизит» процесса. Понятно, что не меньшие знания обо всём этом д.б. у сочинителя. ;-) | ||
+ | |||
+ | //**Функциональный**// уровень в принципе соответствует уже математической трактовке деятельности. Как некоей структуры функций, применение которых к аргументам (тем же объектам-предметам труда) даёт объекты-результаты труда. Структура объединяет функции прежде всего путём композиции (в цепочку, где результат[ы] одной функции передаются как аргумент[ы] следующей). | ||
+ | |||
+ | //**Информатический**// уровень возникает как результат информатизации представления о деятельности. При этом выделяется императивное формализованное знание — о маршрутах процесса, декларативное — о типах объектов и их структурах, активностное — о типах операций и средствах их выполнения (как структуре механизмов «реквизита»). В пределе обязательно представление объектов как чисел (кодов) и операций — как арифметических и/или логических (в смысле булевых функций над двоичными цифрами-битами). Любым «материальным последствиям» исполнения алгоритма тогда соответствуют (в алгоритмической обстановке, т.е. в модели контекста процесса) значения чисел/кодов на определённых линиях связи внутри исполнителя (между механизмами «реквизита») и в его окружении в определённые моменты времени. Так можно описать то, что Паронджанов называет «техпроцессом». Понятно, что сочинитель должен представлять себе схему исполнителя вместе с окружением, «размеченную» величинами данного процесса. | ||
+ | |||
+ | Таков пролог нашей истории... :) | ||
====== Продолжение следует... ====== | ====== Продолжение следует... ====== | ||
Строка 97: | Строка 170: | ||
[[Упорядочение маршрутов - чем правее, тем... придумай сам|]] | [[Упорядочение маршрутов - чем правее, тем... придумай сам|]] | ||
+ | |||
+ | ===== Шампур-укладка на плоскости: свет и тени силуэта ===== | ||
+ | |||
+ | [[Шампур-укладка на плоскости - свет и тени силуэта|]] | ||
+ | |||
+ | ===== Атомарные и лианные структуры ===== | ||
+ | |||
+ | [[Атомарные и лианные структуры|]] | ||
+ | |||
+ | ===== Структурная алгоритмизация и шампур-метод: сочинитель становится мудрецом ===== | ||
+ | |||
+ | [[Структурная алгоритмизация и шампур-метод - сочинитель становится мудрецом|]] | ||
+ | |||
+ | ===== Разметка схем и гибридные техноязыки ===== | ||
+ | |||
+ | [[Разметка схем и гибридные техноязыки - ДРАКОН начинает, ГРАФИТ выигрывает|]] |