Г Р А Ф И Т — б а з и с

Концепция | Основы структуризации языков


Содержание

Доалгоритмическая формализация

Структура императивной семантики

Доалгоритмическая формализация

Существует правило (своего рода неформальное военное поучение): «Хороший командир указывает, ЧТО, но не указывает, КАК». Применительно к теме оно отражает важное обстоятельство — алгоритмизация (и последующее программирование/инструктирование) требуют от сочинителя понимания постановки задачи (что «дано» решателю и что «надо» от него — включая различные начальные и граничные условия). А эта постановка, в свою очередь, отражается на соответствующих языках представления отчуждаемых знаний — дескриптивных — по своей сути ничего общего с императивными языками не имеющих. И решение в этом случае тоже отражается дескриптивно — какие отношения и сущности надо преобразовать и что для этого надо сделать (формально — какие логико-математические операции, функции и где применить).

«ЧТО»-язык отражает некие сущности решаемой задачи и её предметной области (не обязательно объекты алгоритма) и некие отношения между ними. Такие языки тоже бывают как чисто текстовыми, так и графитными. Пример последнего — язык информационного моделирования IDEF1X. Он отражает только систему отношений между сущностями. Для записи преобразований (отдельно или вместе с сущностями-отношениями) существуют другие языки — скажем, т.н. функционального или логического программирования. Ряд таких языков имело бы смысл «графитизировать» — но делать это нужно по иным принципам, чем для императивных языков. Примером могут служить языки схем зависимостей, потоков данных, такие как функциональные схемы, ДПД, Анимо. Следует выработать эргономические оптимальные правила организации таких схем. В чём-то может помочь опыт эргономизации системных схем, частично зафиксированный в стандартах на такие схемы (типа ЕСКД).

Условия применения «ЧТО»-описаний хорошо сформулированы у Кауфмана:

«Людей как исполнителей характеризует прежде всего наличие у них модели реального мира, в достаточной мере согласованной с моделью мира у создателя плана <т.е. описания поведения исполнителя>. Поэтому в плане для людей можно указывать цели, а не элементарные действия». (ЯП. Концепции и принципы, с. 31)

Такую возможность как раз даёт аппарат мышления человека. Не случайно идут поиски объяснений механизмов мышления, попытки их формализации.

В более практическом смысле дескриптивные языки можно применять для более качественной постановки задач. А их графические разновидности — и для эргономизации представления «ЧТО»-описаний.

Возможны разные рода дескриптивных языков. Прежде всего это:

Пример первого рода — язык информационного моделирования IDEF1X. Он отражает только систему отношений между сущностями. Для записи преобразований (отдельно или вместе с сущностями-отношениями) существуют другие языки — скажем, т.н. функционального или логического программирования.

Ряд текстовых «ЧТО»-языков имело бы смысл «графитизировать» — но делать это нужно по иным принципам, чем для императивных языков. Примером могут служить языки схем зависимостей, потоков данных, такие как функциональные схемы, ДПД, Анимо.

Определение синтаксиса описания в целом (в т.ч. каждого применяемого ЯПЗ) осуществляется посредством метаязыка моделирования/формализации. Традиционно это т.н. расширенные Бэкуса-Наура формы (РБНФ). После указанных авторов РБНФ-метаязык также расширялся и уточнялся другими специалистами. Здесь используется авторская версия РБНФ с дополнительными расширениями. Графическим эквивалентом РБНФ служат т.н. синтаксические диаграммы.

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

Структура императивной семантики

Информатическое время протекает дискретно, по шагам алгопроцесса; на каждом шаге исполнитель совершает целостное действие, изменяющее объекты процесса и обстановку в целом. Его категории можно выделить так. Положим, что имеется конечный набор «обстоятельств времени» алгопроцесса, а при алгоритмизации конкретной задачи учитывается большая или меньшая их часть. Тогда можно построить следующую иерархию информатического времени:

Как правило, «школьные» информатические задачи составляются для абстрактного времени.

Пример. Хорошая иллюстрация деятельности в реальном времени – сцена из известного фильма Чаплина «Великий диктатор», где герой-парикмахер бреет клиента под музыку Брамса, привязывая определённые фазы бритья к музыкальным фразам:))

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

Информатическое движение – это изменение обстановки в ходе деятельности. Движение в алгопроцессе складывается из выполнения операторов и переходов.

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

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

Можно выделить следующие классы операторов:

Рабочий – отражает совершение действия исполнителем.

Холостой – отражает бездействие исполнителя в течение некоторого времени.

Служебный (системный) – отражает изменение исполнителем конфигурации (режима работы) для настройки на оптимальное продолжение выполнения алгоритма.

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

Мы можем усовершенствовать это представление, как показано далее в п/п 2.3.1.8.



На уровне алгоритмического моделирования допускаются также т.н. псевдооператоры объявления, отражающие декларативное знание. В техноязыке для объявления существует икона Полка.

Холостой оператор имеет следующие разновидности:

Локальное время отсчитывается по счётчику (таймеру) заведённому в данном визуале (до оператора задержки). Таймеров м.б. много; тем самым ведётся отсчёт от ряда точек процесса.

При ожидании события исполнитель проверяет условие его наступления в цикле. Конечно, на это затрачивается некоторое время, поэтому чтобы реакция на событие была своевременной, нужно соответствующее быстродействие.

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

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

К служебным относятся и т.н. псеводооператоры организации данных (величин).

Переходы в алгоритме бывают следующих классов:

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

Безусловный переход – изменяющий порядок следования по сравнению с естественным независимо от алгоритмической обстановки (без к.-л. логического выбора).

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

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

Для возврата сохраняется состояние выполнения текущего алгоритма на момент перехода.

Формально безусловный переход с возвратом разделяется на следующие особые переходы между визуалами:

Вызов вставки – переход, изменяющий естественный порядок следования с сохранением текущего состояния вызывающего алгоритма и установлением начального состояния алгоритма-вставки (с учётом указаний в основном алгоритме).

Возврат из вставки – переход, восстанавливающий естественный порядок следования с установлением текущего состояния вызывающего алгоритма (с учётом результатов исполнения алгоритма-вставки) и (если нужно) сохранением конечного состояния вставки.

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

Условный переход, кроме направления (прямой, формирующий ветвления и обратный, образующий циклы), можно подразделить по мощности выбора на:

В конечном счёте выбирается то или иное продолжение маршрута. Т.о. имеем четыре типа условных переходов.

Цикл формально есть возвращение на уже пройденный участок маршрута, но в новой алгоритмической обстановке.

Переход можно представлять как прыжок «дракон-поезда» на один «перегон» по линии, соединяющей выход текущей иконы (для развилок один из выходов) со входом следующей.

Все ли аспекты движения мы рассмотрели? Если исходить из тернарности, то кроме операторов и переходов должно существовать ещё что-то равноправное; однако это «что-то» не должно вводиться искусственно, «ради троичности» структуры. Пожалуй, такое понятие есть – это состояние алгопроцесса, т.е. конкретный набор значений величин, входящих в алгоритмическую обстановку (т.е. по сути – в модель мира, созданную для данной задачи).

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

Только правильность устройства (организации) и принципа действия носителей состояний гарантирует, что из одного установившегося состояния мы придём к другому установившемуся (и именно к тому, которое подразумевалось при формальном определении движения как алгопроцесса).

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

Известно, что пространство мы воспринимаем в трёх измерениях; поэтому теоретически полная символическая форма алгоритма есть трёхмерное изображение его структуры (практически – объёмный макет). Однако человеку свойственно воспринимать объёмные данные визуально на плоскости (двумерной информационно-оптической сцене, кратко диосцене); поэтому удобно свести трёхмерное изображение к двумерному, напр., описать алгоритм перспективным чертежом. Практически используют не чертежи, а граф-схемы алгоритмов (ГСА); типичные стандарты ГСА, т.н. блок-схемы, не отвечают ряду требований информатического качества (так, множественный выбор изображают как цепочку бинарных).

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

Математически при переходе к двумерному изображению говорят о т.н. укладке графа на плоскости. Однако на этом «приключения графа в пространстве» не заканчиваются.

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

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

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

Отметим, что в ветвлениях каждый горизонтальный участок от излома вертикали до точки слияния фактически визуализирует неявный БП-обход вперёд содержимого главной вертикали, а в множественном – также и других вертикалей (предшествующих данной, если предполагается, что в лиоформе они записаны после неё); в некоторых ТЯП этот переход иногда делался явным, напр. в классическом Си – по ключевому слову "break" в конструкции множественного ветвления на базе "switch-case"1; в бинарном ветвлении данный БП обычно неявный, через правило связывания then- и else-частей в if-операторе. В циклах с разветвлённым телом возможен досрочный выход (БП вперёд за пределы тела в конце некоторой ветви, влекущий за собой прекращение выполнения цикла); в Си это было возможно также по "break" с переходом всегда на оператор, следующий за заканчиваемым циклом2.

В основе цикла неявно лежит БП-обход назад содержимого главной вертикали, визуализируемый как петля цикла; в ТЯП его обычно обозначает закрывающая операторная скобка тела цикла (слово "end" с различными суффиксами или без таковых, правая фигурная скобка); в русской алгонотации употребляется ключевое слово "КЦ"; также возможен досрочный обход (пропуск части тела, следующей за БП); в Си – по ключевому слову "contihue" в циклах while, do и for3.

На уровне командных моделей указанные БП обязательны для представления соответствующих структур (вставляются при генерации кода конструкции).


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

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

1См. напр.: Болски М.И. Язык программирования Си. Справочник. – М.:Радио и связь, 1988. – С.36.

2 Болски М.И. – С.33.

3 Болски М.И. – С.34.

Hosted by uCoz