Как построить эргономичный логический текст? 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Как построить эргономичный логический текст?



Ранее мы пришли к выводу, что алгоритм на рис. 79 является эргономически неудачным. Каким образом можно его исправить? Вопрос отнюдь не простой. По-видимому, в разных ситуациях он может приводить к разным ответам. В связи с этим изложенные ниже соображения и советы имеют не обязательный, а всего лишь рекомендательный характер. Их нужно рассматривать как один из возможных способов решения проблемы.

! В иконе “вопрос” не следует записывать логическое выражение, в особенности сложное. Вместо него рекомендуется поместить один-единственный идентификатор, содержащий ясную и четкую словесную формулировку главного вопроса.

! В общем случае указанный идентификатор может оказаться неопределенным. Чтобы исключить эту неприятность, необходимо заблаговременно присвоить ему нужное значение. Для этого существуют два метода: рамочный и визуальный.

! В рамочном методе используется рамочное логическое выражение, записанное в иконе “действие”. Производится вычисление рамочного выражения, результат присваивается идентификатору главного вопроса (рис. 80).

! В визуальном методе применяется визуальное логическое выражение и два оператора “Установить признак” и “Снять признак”, записанные в иконах “полка”.

 

 

В отличие от рамочного при визуальном методе вычисление логического выражения как таковое отсутствует. Визуальное выражение разветвляет процесс и приводит его в одну из двух точек (А или В на рис. 81). В первой точке выполняется оператор “Установить признак”, во второй — “Снять признак”. Алгоритмы на рис. 80 и 81 эквивалентны.

Инструментальные программы языка ДРАКОН должны обеспечить автоматический перевод рамочного алгоритма (рис. 80) в визуальный (рис. 81) и наоборот. Предоставление такой услуги пользователю создает для него дополнительный интеллектуально-эргономический комфорт, позволяет сравнить две формы представления логических знаний и выбрать ту, которая ему больше по душе. Поскольку вкусы автора алгоритма и его читателей могут отличаться, каждый из них может получить листинг (чертеж) программы в том виде, который лично ему больше нравится, реализуя тем самым свое право на индивидуальное предпочтение той или иной формы представления знаний.

Оптимальная длина формального смыслового идентификатора составляет примерно 32 символа. Имеется в виду, что инструментальные программы осуществляют обработку 32-байтового поля идентификатора. Желательно, чтобы конкретные идентификаторы в зависимости от сложности понятия имели длину не менее 25 и не более 32 символов. Чтобы исключить ошибки при ручном вводе столь длинных идентификаторов в компьютер, целесообразно ввести запрет повторного ввода. Это значит, что идентификатор вводится в систему только один раз и запоминается в базе данных. При необходимости повторного ввода осуществляется копирование из базы данных. Такой способ требует наличия специальных инструментальных средств, но гарантирует идентичность всех копий одного и того же идентификатора.

Вывод об оптимальности 32-символьных идентификаторов согласуется с анализом истории развития языков программирования, который обнаруживает отчетливую тенденцию: от абстрактных кодов и имен к
8-символьным мнемоническим именам, а затем — к 32-символьным смысловым идентификаторам. Вместе с тем многие программисты, следуя устоявшимся привычкам, “застряли” на этапе 8-символьных имен, так что опыт использования новых возможностей, связанных с разрешением использовать 32 символа, пока еще относительно невелик. Между тем, эргономические перспективы, открывающиеся с увеличением длины до 32 символов, обещают существенно изменить наши прежние представления и привычки, так как благодаря этому замечательному нововведению язык формальных идентификаторов по своей доходчивости значительно приближается к естественному человеческому языку, что отчетливо видно на рис. 80 и 81. В самом деле, множество 32-символь­ных идентификаторов образует весьма выразительный, хотя и своеобразный язык, законы и правила оптимизации которого еще предстоит открыть, обсудить и подвергнуть экспериментальной проверке.

Специальные обозначения для значений логических переменных как принадлежность языка программирования — это анахронизм, который следует исключить из всех языков как совершенно не нужное и даже вредное “архитектурное излишество”. Чтобы оправдать этот вывод, сравним два выражения в условном операторе:

Если (Норма 1 = 1) & (Норма 2 = 1) & (Авария = 0), то... (10)

Если Норма 1 & Норма 2 & ┐Авария, то.... (11)

Формула (10) читается так:

  Если признак “Норма 1” равен единице и признак “Норма 2” равен единице и признак “Авария” равен нулю, то…   (10 а)

 

Формула (11) читается так:

  Если есть признак “Норма 1” и есть признак “Норма 2” и нет признака “Авария”, то…   (11 а)

 

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

Выводы

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

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

3. Предложен двухэтапный метод эргономизации логических выражений. На первом этапе производится разделение логических записей на две части, из которых одна подлежит визуализации, а другая сохраняется в текстовом виде. Второй этап — эргономизация обеих частей: визуальной и текстовой.

4. Эргономизация текстовой части включает, в частности, следующие приемы:

! оптимизацию длины и правил записи идентификаторов;

! выбор альтернативы: логическое выражение или идентификатор главного вопроса;

! исключение обозначений для значений логических переменных;

! сравнительный анализ визуальной и рамочной форм записи и выбор одной из них.

 


Г лава 11:
Визуальные операторы
реального времени

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

Александр Зенкин

Список операторов реального
времени

В языке ДРАКОН имеется пять икон реального времени (рис. 1, иконы И16 — И20):

! пауза;

! период;

! пуск таймера;

! синхронизатор (по таймеру);

! параллельный процесс.

 

Три из них (пауза, пуск таймера и параллельный процесс) — простые операторы. Две другие (период и синхронизатор) служат “кирпичиками” для построения составных операторов и вне последних не используются.

Икона “период” является принадлежностью цикла ЖДАТЬ (рис. 2, макроикона 7). Икона “синхронизатор” служит для образования тринадцати составных операторов (рис. 2, макроиконы 8—20).

Назначение операторов поясним, как всегда, на примерах.

Операторы ввода-вывода

В языке ДРАКОН предусмотрены два визуальных оператора ввода-вывода: “вывод” (рис. 1, икона И14) и “ввод” (рис. 1, икона И15). Они не относятся к операторам реального времени и рассматриваются здесь только потому, что встречаются в ближайшем примере.

Из рис. 1 видно, что иконы ввода-вывода имеют мнемоническую форму: икона И14 содержит полую стрелку, направленную наружу, что символизирует “вывод”, а икона И15 — стрелку, направленную внутрь (ввод). Оба оператора “двухэтажные”, причем на верхнемэтаже пишется ключевое слово или ключевая фраза, а на нижнем (в прямоугольнике) — содержательная информация, подлежащая вводу и выводу (рис. 82, 83).

Оператор “Пауза”

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

Рассмотрим конкретный пример. Предположим, управляющий компьютер должен:

! выдать команду ОТКРЫТЬ.ТРУБОПРОВОД;

! подождать две минуты;

! выдать две команды: ВКЛЮЧИТЬ.НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ;

! подождать 45 секунд;

! выдать команду ПОДАЧА.ТОПЛИВА;

! подождать три минуты;

! выдать команду ПУСК.АГРЕГАТА.

 

Соответствующая программа на языке ДРАКОН-2 представлена на рис. 82. Задержка выдачи команд реализуется с помощью иконы “пауза”, внутри которой указывается время необходимой задержки, например, 2 мин (2 минуты), 45 с (45 секунд) и т. д. Если говорить более точно, верхний оператор “пауза” на рис. 82 работает так: после выдачи команды ОТКРЫТЬ.ТРУБОПРОВОД в управляющем компьютере запускается виртуальный счетчик времени на 2 минуты, по окончании которых компьютер выдает в линию связи команды ВКЛЮЧИТЬ.НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ.

Операторы
“Пуск таймера” и “Синхронизатор”

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

Исходя из этого, сформулируем задачу управляющего компьютера. Он должен:

! включить “секундомер”, т. е. обнулить и запустить виртуальный таймер;

! выдать команду ОТКРЫТЬ.ТРУБОПРОВОД;

! когда таймер отсчитает две минуты, выдать пару команд ВКЛЮЧИТЬ.НАСОС и ОТКРЫТЬ.ЗАСЛОНКУ;

! когда таймер отсчитает 2 минуты 45 секунд, выдать команду ПОДАЧА.ТОПЛИВА;

! когда таймер отсчитает 5 минут 45 секунд, выдать команду ПУСК. АГРЕГАТА.

 

Программа, реализующая описанный алгоритм, изображена на рис. 83. В ней используются операторы “пуск таймера” и “синхронизатор”, совместная работа которых обеспечивает нужный эффект.

Оператор “пуск таймера” порождает, обнуляет и запускает виртуальный таймер и присваивает ему имя А. Оператор “синхронизатор” задерживает выполнение размещенного справа от него визуального оператора до наступления момента, описанного в иконе “синхрони­затор”. Например, синхронизатор А = 2мин 45с на рис. 83 задерживает выдачу команды ПОДАЧА.ТОПЛИВА до момента, когда таймер А отсчи­тает 2 минуты 45 секунд.

Сравнивая программы на рис. 82 и 83, можно заметить, что они почти эквивалентны. Почему почти? Если взять идеальный случай и предположить, что время, необходимое для выдачи одной команды равно нулю, обе программы будут выдавать команды синхронно. Однако в действительности указанное время больше нуля, поэтому в реальной жизни программы работают по-разному.

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

На рис. 84 представлен более сложный алгоритм, в котором используются операторы “пауза”, “пуск таймера” и “синхронизатор”.

 

В средней ветке изображена икона “пауза” с записью 2мин48с. Это означает, что после завершения процедуры ВОЛШЕБНЫЙ РЕМОНТ ТАРЕЛКИ отсчитывается пауза длительностью 2 минуты 48 секунд и только после этого производится снятие признака АВАРИЯ ТАРЕЛКИ. Еще одна четырехсекундная пауза предусмотрена в левой ветке.

В правой ветке есть икона “пуск таймера” с записью А = 0. Данный оператор порождает, обнуляет и запускает виртуальный таймер А. В той же ветке установлены три иконы “синхронизатор по таймеру” с записями А = 3мин, А = 5мин и А = 8мин. При этом вызов процедуры ВКЛЮЧИТЬ ТЕЛЕПОРТАЦИЮ произойдет не сразу, а только после того, как таймер А отсчитает 3 минуты. Соответственно включение в работу процедур ОТКЛЮЧИТЬ ГРАВИТАЦИЮ и ВЫХОД ИЗ АСТРАЛЬ­НОГО ТЕЛА будет задержано до тех пор, пока таймер А не примет значения 5 и 8 минут соответственно.

Из рис. 84 видно, что оператор “пуск таймера” можно применять двумя способами. Во-первых, совместно с иконой “синхронизатор” (этот случай мы обсудили), во-вторых, совместно с иконой “вопрос”. Последний случай рассмотрен в следующем параграфе.

Цикл Ждать

Предположим, требуется в течение трех минут ждать появления хотя бы одного из двух признаков ЛЕВЫЙ ДВИГАТЕЛЬ В НОРМЕ и ПРАВЫЙ ДВИГАТЕЛЬ В НОРМЕ. При наступлении этого события (появлении признака) необходимо включить плазменный реактор. Если же названные признаки отсутствуют, по истечении трех минут следует включить фотонный двигатель.

Для решения задачи на рис. 84 используются два оператора: пуск таймера Т, отсчитывающего три минуты, и цикл ЖДАТЬ. В состав последнего входит икона “период” и три иконы “вопрос”, в которых размещены надписи ЛЕВЫЙ ДВИГАТЕЛЬ В НОРМЕ?, ПРАВЫЙ ДВИГАТЕЛЬ В НОРМЕ? и Т > 3мин (последний оператор проверяет: значение таймера Т больше трех минут?). Если оба признака отсутствуют, а значение таймера не превышает трех минут, опрос условий периодически повторяется, причем период опроса указывается в иконе “период”. В данном примере он равен 4 секундам.

Как явствует из рисунка, работа цикла ЖДАТЬ закончится в момент обнаружения одного из ожидаемых признаков, а если они так и не появятся — через три минуты.

В общем виде цикл ЖДАТЬ показан на рис. 85. Он позволяет организовать режим ожидания признаков В, С, D,..., Е. Если первым появится признак В, выполняется действие F. Если В отсутствует и первым придет признак С, реализуется действие G. И так далее. Операторы А и L обычно не используются.

Задача ожидания нескольких признаков (когда система должна по-разному реагировать на каждый признак) является одной из наиболее типичных при разработке систем управления реального времени. Цикл ЖДАТЬ предлагает чрезвычайно простое, удобное, наглядное и эффективное средство для ее решения, удовлетворяя тем самым важную потребность практики.

Оператор “Период”

Сравнивая макроиконы 4 и 7 на рис. 2 (обычный цикл и цикл ЖДАТЬ), мы видим, что они очень похожи. Поэтому во избежание путаницы нужно иметь какой-то различительный признак. Эту функцию выпол­няет икона “период”. Если она есть в петле цикла — перед нами цикл ЖДАТЬ. Если нет — обычный цикл.

Человек, который стоит на остановке и ждет появления трамвая или троллейбуса, воспринимает ожидание как нечто непрерывное. Однако программа реального времени организует ожидание как дискретный процесс и запускает цикл ЖДАТЬ периодически. Отсюда вытекает, что период — важная характеристика цикла ЖДАТЬ.

А теперь зададим самый интересный вопрос: как работает оператор “период”? Фокус в том, что на этот вопрос придется дать два совсем разных ответа.

С точки зрения человека, читающего программу на рис. 84, все обстоит очень просто: цикл ЖДАТЬ “крутится” по своей петле с периодичностью 4 секунды, пока не выполнится одно из трех условий, после чего произойдет выход из цикла. Таким образом, оператор “период” задает период повторения цикла ЖДАТЬ.

С точки зрения функционирования программы реального времени, дело обстоит иначе. Суть в том, что длительность периода отсчитывает не прикладная программа на рис. 84, а дракон-диспетчер, входящий в состав операционной системы реального времени. Оператор “период” означает выход из прикладной программы: управление переходит к дракон-диспет­черу (с одновременной передачей параметра 4с). Через каждые четыре секунды дракон-диспетчер передает управление в начало цикла ЖДАТЬ (точка А на рис. 84), и если все три условия дают ответ “нет”, оператор “период” всякий раз возвращает управление в дракон-диспетчер. Таким образом, функционирование цикла ЖДАТЬ обеспечивается совместными усилиями прикладной программы и дракон-диспетчера.

Нередко имеет место ситуация, когда разработчик программы реального времени использует цикл ЖДАТЬ, но считает, что для его программы конкретное значение периода не играет роли. В этом случае икону “период” следует оставить пустой; система по умолчанию присвоит периоду максимальное значение из того ассортимента, которым располагает дракон-диспетчер.

Оператор “Параллельный процесс”

Пусть заданы два алгоритма А и В, причем А — основной алгоритм, а В — вспомогательный. Алгоритмы А и В могут работать последовательно (рис. 86) или параллельно (рис. 87). Чтобы организовать последовательную работу, необходимо в дракон-схеме основного алгоритма А нарисовать икону-вставку с надписью В. Например, на рис. 84 в основном алгоритме ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ имеется икона-вставка ПРОВЕРКА ДВИГАТЕЛЕЙ. Эти алгоритмы действуют последовательно. Основной алгоритм передает управление алгоритму ПРОВЕРКА ДВИГАТЕЛЕЙ и прекращает работу. Возобновление работы алгоритма ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ произойдет только тогда, когда алгоритм-вставка ПРОВЕРКА ДВИГАТЕЛЕЙ закончится. В общем виде ситуация показана на рис. 86.

Отличие параллельного режима состоит в том, что после начала вспомогательного алгоритма В основной алгоритм А не прекращает работу и действует одновременно с алгоритмом В (рис. 87).

Чтобы организовать параллельную работу, нужно в дракон-схеме основного алгоритма А нарисовать икону “параллельный процесс” (рис. 1, икона И20). Икона “двухэтажная”: на верхнем этаже пишут ключевое слово, обозначающее команду, изменяющую состояние параллельного процесса, например, “Пуск”, “Останов” и т. д. На нижнем этаже помещают идентификатор (название) параллельного процесса.

Обратимся к примеру на рис. 84. В правой ветке находятся два оператора управления параллельными процессами. После окончания процедуры ВЫХОД ИЗ АСТРАЛЬНОГО ТЕЛА производится останов параллельного процесса ШАБАШ ЗЛЫХ ДУХОВ и пуск процесса ШАБАШ ДОБРЫХ ДУХОВ.

При этом предполагается, что до начала алгоритма ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ некий третий алгоритм выдал команду “Пуск” и запустил параллельный процесс ШАБАШ ЗЛЫХ ДУХОВ. Последний работает одновременно с алгоритмом ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ вплоть до момента выдачи команды “Останов” (см. последнюю ветку на рис. 84). Указанная команда ликвидирует параллельный процесс ШАБАШ ЗЛЫХ ДУХОВ, в этот момент одновременная работа заканчивается. Однако следующая команда “Пуск” запускает другой параллельный процесс — ШАБАШ ДОБРЫХ ДУХОВ, который начинает работать одновременно с алгоритмом ПРОВЕРКА ЛЕТАЮЩЕЙ ТАРЕЛКИ.

Особенности операторов
реального времени

Мы уже говорили, что цикл ЖДАТЬ выполняется прикладной программой при участии дракон-диспетчера. Этот вывод относится ко всем операторам реального времени. Вместе с тем следует подчеркнуть, что данное утверждение относится не к языку, а к реализации системы и для разных реализаций может быть различным.

Операторы реального времени — это формальные операторы языка визуального программирования ДРАКОН-2. Однако их можно использовать и в псевдоязыке ДРАКОН-1 при неформальном изображении алгоритмов — для построения наглядных “картинок”, позволяющих легко объяснить ту или иную идею, относящуюся к системам реального времени. Примеры таких картинок представлены на рис. 88 и 89. При этом в цикле ЖДАТЬ икону “период” обычно опускают, чтобы не загромождать рисунок (см. последнюю ветку на рис. 88). Однако если длительность периода нужна для понимания, икону “период” можно сохранить (рис. 89).

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

Дракон-программа может иметь более одного входа. Чтобы организовать дополнительный вход, нужно разместить икону “заголовок” над иконой “имя ветки”, как показано на рис. 84 справа. Таким образом любая ветка может быть объявлена дополнительным входом. Однако есть исключение: если несколько веток образуют веточный цикл, вход разрешается только в начало цикла. Остальные ветки конструкции “веточный цикл” не могут являться входами в программу.

Выводы

1. Наличие операторов реального времени резко расширяет изобразительные возможности языка ДРАКОН и позволяет использовать его при проектировании и разработке не только информационных, но и управляющих систем. Это обстоятельство существенно увеличивает область применения языка.

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

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

4. Четыре иконы (пауза, период, пуск таймера и синхронизатор) — “близкие родственники” в том смысле, что внутри каждой из них указывается значение времени. Эта родственная связь находит свое эргономическое отражение в том, что перечисленные операторы имеют визуальное “фамильное сходство” — все они построены (с вариациями) на основе одной и той же геометрической фигуры — перевернутой равнобедренной трапеции.

5. Операторы реального времени порождают сложные действия компьютера, связанные с частыми передачами управления между прикладной программой и операционной системой (дракон-диспетчером). Эргономическая изюминка состоит в том, что эти передачи намеренно скрыты от читателя программы, чтобы не загромождать ее текст (чертеж) второстепенными подробностями. Благодаря этому внимание читателя не отвлекается на мелочи и он имеет возможность сосредоточиться на главном, поскольку дракон-схема предоставляет ему ясную, четкую и целостную картину алгоритмического процесса, очищенную от “мелкого мусора”.

 


Глава 12:
Дружелюбное
Программирование

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

Том Мануэль

Гибридный язык программирования
Дракон-Си

Предположим, нужно построить систему визуального программирования на гибридном языке ДРАКОН-СИ. Задачу можно решить, например, с помощью трех программ: дракон-редактора, дракон-конвертора и компилятора языка СИ. Пользователь с помощью дракон-редактора рисует на экране компьютера программу на языке ДРАКОН-СИ (рис. 90, правая графа). Затем дракон-конвертор преобразует внутреннее представление графических кодов в исходный текст языка СИ (рис. 90, средняя графа), после чего стандартный компилятор СИ превращает исходный текст в объектный код.

Чтобы лучше уяснить преимущества языка ДРАКОН-СИ, произведем мысленно обратное преобразование. Как видно из рис. 90, при преоб­разовании текстовой программы в визуальную исходный текст СИ-про­граммы разбивается на две части. Операторы присваивания, условные выражения и декларативные описания почти без изменения переносятся в визуальную программу и размещаются внутри ее икон. Остальные текстоэлементы языка СИ (которые можно назвать удаляемыми или “паразитными”) становятся ненужными, превращаясь в графические линии и ключевые слова “да” и “нет” (yes и no). Рисунок 90 показывает, что список паразитных (удаляемых) элементов языка СИ оказывается внушительным: он включает все ключевые слова в примерах 1—7 кроме default, все фигурные, круглые и косые скобки, двоеточия, метки, комментарии в примерах 3—5, и кроме того, точки с запятой в примерах 2, 3, 7 и отчасти 6.

Таким образом, чтобы построить язык ДРАКОН-СИ, надо по определенным правилам соединить визуальный синтаксис ДРАКОНА с текстовым синтаксисом языка СИ, удалив из последнего все элементы, функции которых реализуются визуальными операторами ДРАКОНА. Пара языков СИ и ДРАКОН-СИ эквивалентна в том смысле, что может быть построен конвертор, выполняющий как прямое, так и обратное преобразование. Такой конвертор может превращать исходный текст программы на языке ДРАКОН-СИ (рис. 90, правая графа) в эквивалентную СИ-программу (рис. 90, средняя графа), и наоборот.

Создание любого гибридного языка (например, ДРАКОН-СИ) вряд ли стоит считать оригинальной разработкой, так как последний почти полностью сохраняет концепцию, структуру, типы данных и другие особенности исходного языка (СИ). Правильнее говорить о том, что построение гибридного языка (ДРАКОН-СИ) есть технический прием, при котором в строго определенном числе случаев текстовая нотация исходного языка заменяется на визуальную. Однако этот технический прием позволяет существенно улучшить эргономический облик исходного языка.

Гибридный язык программирования
Дракон-Модула

Обратимся к верхнему примеру на рис. 91. В средней графе представлена программа на языке МОДУЛА-2, в правой — эквивалентная ей программа на языке ДРАКОН-МОДУЛА. В левой графе приводится список ключевых слов, которые используются в модула-программе и являются “жизненно необходимыми” для языка МОДУЛА, но которые совершенно не нужны в дракон-программе.

С эргономической точки зрения, эти и многие другие ключевые слова, присутствующие в текстовых языках, есть не что иное как визуальные помехи, притягивающие к себе внимание читателя и отвлекающие его внимание от содержательной стороны дела. Эргономическое преимущество ДРАКОНА состоит в том, что вместо ключевых слов используется визуальный образ, который воспринимается читателем бессознательно, на интуитивном уровне, в то время как канал сознательного внимания действует более продуктивно — для восприятия наиболее важных, содержательных аспектов задачи.

 

Пример эргономической оптимизации
программы

 
 

На рис. 91 (внизу, в средней графе) написана программа на языке ПАСКАЛЬ. Действуя по аналогии с предыдущими примерами, ее можно легко преобразовать в программу на языке ДРАКОН-ПАСКАЛЬ. Для этого нарисуем визуальный оператор “развилка” и в иконе “вопрос” поместим запись

 

Нижний выход иконы “вопрос” пометим словом “да” и присоединим к нему переключатель с двумя иконами “вариант”, а правый выход (ответ “нет”) подключим к иконе “вывод”, в которой сверху напишем WRITELN, снизу — ОШИБКА. В итоге получим дракон-схему, которая несомненно является совершенно правильным решением поставленной задачи. (Для наглядности советуем читателю выполнить описанные построения на бумаге.)

А теперь изменим условие задачи. Попытаемся создать программу, которая была бы не только эквивалентной паскаль-программе на рис. 91, но и эргономически оптимальной для русскоязычного читателя. Искомая программа, написанная на языке ДРАКОН-2, представлена на том же рисунке внизу справа.

Бросается в глаза структурное различие между программами. Паскаль-программа содержит две конструкции: if-then-else и case-of. Эргономическая оптимизация состоит в том, что в дракон-программе используется всего один визуальный оператор (переключатель с тремя вариантами), который тем не менее “в одиночку” выполняет те же самые функции, что и два текстовых оператора языка ПАСКАЛЬ. В итоге сложное условие K = 1 OR K = 2 и другие излишества паскаль-про­граммы устраняются, а дракон-схема заметно упрощается и становится лаконичной, прозрачной, элегантной.

Диалоговые программы

Продолжим изложение одного из возможных подходов к построению языка программирования ДРАКОН-2. Еще раз напомним: читатель не найдет здесь описания языка. Наша цель гораздо скромнее: показать, что формализация текстового синтаксиса для языка ДРАКОН вполне осуществима, и привести несколько примеров, подтверждающих эту мысль.

Рассмотрим диалоговые программы на рис. 92 и 93, имеющие улучшенные дидактические (педагогические) характеристики. Для этого применяется обширный набор эргономических средств. В частности, при заполнении иконы “комментарий” используется зонирование текста. Текст комментария для облегчения восприятия пространственно делится на две зоны, которые, во-первых, имеют четко очерченные и легко различимые границы, во-вторых, отличаются по цвету фона (белый и серый). В серой зоне помещается текст, появляющийся на экране компьютера, в белой — пояснения к нему. Отграничение экранного текста от пояснений облегчает чтение комментариев и улучшает их понимаемость.

Эргономический прием “зонирование текста” полезно использовать не только в комментариях, но и в других случаях, например в операторах ввода-вывода.

Оператор “Сообщение”

Оператор “Сообщение” служит для вывода информации на экран компьютера. Он содержит икону “вывод”, на верхнем этаже которой помещают ключевое слово “Сообщение”, на нижнем — выводимую ин­формацию. При описании последней применяется зонирование текста: в серой зоне пишут имена переменных или выражения (значения которых следует вывести на экран), в белой зоне — постоянную информацию (которая выводится на экран без изменений). Признаком новой строки служит черный кружок. Например, на рис. 92 с помощью оператора “Сообщение” на экран выводится фраза “Сумма чисел равна” и значение выражения m + n.

Оператор “Запрос”

Оператор “Запрос” осуществляет ввод в компьютер значений переменных, вывод на экран постоянной информации, имен переменных и введенных значений. В верхней части иконы “ввод” пишут ключевое слово “Запрос”, в нижней — вводимую и выводимую информацию. Здесь также присутствует зонирование текста: в серой зоне указывают имена переменных, подлежащих вводу в компьютер, в белой — помещают постоянную информацию.

Предположим, нужно ввести значения m = 23 и n = 45 (рис. 92). Делается это, например, так: подводят курсор в зону m, набирают на клавиатуре число 23 и нажимают клавишу “возврат каретки”. При этом зона m на экране гаснет и вместо нее загорается число 23. Значение n вводится аналогично. Таким образом, оператор “Запрос” запрашивает у пользователя значения переменных, записывает их в память и одновре­менно отображает на экране вместе с постоянной информацией (если последняя указана на нижнем этаже оператора “Запрос” в белой зоне).

Описание данных

Для описания данных служит икона “полка”. На верхнем этаже пишут ключевое слово “Данные”, на нижнем — описание данных. Например, на рис. 92 в иконе “полка” указано, что переменные m и n имеют тип “целый”.

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

Идентификаторы

Приведем правила записи идентификаторов.

! Длина идентификатора 1...32 символа.

! Разрешается использовать любые русские и латинские буквы, цифры, точку и, возможно, специальные символы.

! Первый символ должен быть буквой (не цифрой и не точкой).

! Внутри идентификатора запрещается использовать пробелы.

! Слова следует разделять точками, чтобы облегчить чтение.

! Запрещается использовать сокращение слов, если длина идентификатора меньше 32 символов.

! Если длина идентификатора больше 32 символов, надо заменить некоторые слова сокращениями или уменьшить число слов.

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

 

Примеры правильных идентификаторов

Номер.вагона.скорого.поезда
Номер.вагона.пассажир.поезда
Цена.билета.поездом.до.Магадана
Цена.билета.самолет.до.Магадана

Примеры неправильных идентификаторов

Номер.вагона.пассажирского.поезда (здесь 33 символа,
а можно не более 32)

Число.вагонов товарного поезда (используются пробелы)

3-й.запуск.аварийного.насоса (здесь две ошибки:
первый символ — цифра;
кроме того, есть дефис)

Пример сокращения длины сложного понятия

Предположим, нужно создать идентификатор для следующего понятия: “Радиус-вектор центра Земли в центре взлетно-посадочной полосы в посадочной системе координат”. Словесное описание понятия содержит 92 символа. Задача состоит в том, чтобы сократить 92-символьное описание до 32-символьного, сохранив по возможности ясный смысл понятия.

Сокращение проведем по следующему плану:

! “Радиус-вектор центра Земли” заменим на “Радиус.земли”.

! Вместо “В центре взлетно-посадочной полосы” напишем “на.полосе”.

! “В посадочной системе координат” заменим на ПСК, поскольку такое сокращение является общеупотребительным в коллективе разработчиков данной системы.

В итоге получим 26-символьный идентификатор

 
 

который сохраняет почти все опорные слова исходного понятия и обеспечивает довольно высокую понимаемость.

Правила записи арифметических выражений
в операторах присваивания

Следует различать два случая. Если выражение простое, рекомендуется использовать 32-символьные идентификаторы и “вертикальную” запись математических формул, как показано на рис. 94 и 95.

Однако если речь идет о сложных математических вычислениях, описанный способ не годится, поскольку “вертикальные” формулы с 32-символьными идентификаторами не позволяют читателю увидеть математическую структуру вычислений, отвлекая его внимание на чтение длинных идентификаторов, которые парадоксальным образом превращаются из полезной подсказки в свою противоположность и начинают играть негативную роль визуальной помехи. Таким образом, возникает эргономический тупик: короткие идентификаторы не позволяют быстро уяснить смысл понятий, а длинные — затемняют структуру сложных формул.

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

! Для каждого математического понятия предусматриваются два идентификатора: длинный (32-символьный) и короткий (алиас).

! В арифметических выражениях используются только алиасы, что делает структуру формул прозрачной.



Поделиться:


Последнее изменение этой страницы: 2016-09-20; просмотров: 315; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.108.9 (0.13 с.)