SoftCraft
разноликое программирование

Top.Mail.Ru

ЦВЕТНОЕ ПРОГРАММИРОВАНИЕ

© Кузнецов Борис Павлович, д.т.н.

(МУФО, Санкт-Петербург)

Каждый Охотник Желает Знать Где Сидит Фазан

Естественной структурой восприятия и переработки информации, присущей человеку от природы, является цветовой образ. Не является открытием, что, в отличие от черно-белой как графической так и текстовой информации, цветные графика и текст придают новое качество соответствующему графическому или текстовому образу. Не считая естественных цветных графических машинных и полиграфических изображений, отметим, что цветная палитра текста уже достаточно давно широко применяется, например, для различения назначения ссылок в гипертекстовых и WEB-документах.

С позиций количества передаваемой информации очевидно, что черная точка на белом фоне позволяет отобразить лишь один бит, в то время как цветная точка в современном мониторе – до 32 бит (232 цветовых оттенка) в машинном аспекте и до 4-5 бит (16 – 32 явно различимых цветовых оттенка) в аспекте дискретного восприятия человеком. Поэтому отрезок черной линии на белом фоне несет лишь один единственный смысл (наличие связи между двумя объектами, отождествляемыми с концами отрезка, если не учитывать кривизну линии, характеризующую среду между связываемыми объектами). Но такой же отрезок, даже монохромно окрашенный каким либо цветом из заданной цветовой палитры имеет уже множественный смысл ( не только наличие связи между объектами, но и ее качественный характер, например, с 16-ю градациями при использовании 16-ти цветной палитры, кодируемой четырьмя битами). Тот же отрезок, но окрашенный на двух и более (N) его участках разными цветами, позволяет закодировать и передать уже 1+16N смысловых оттенков.

По мнению автора, издревле возникшая и до сих пор используемая черно-белая вырожденная палитра текстовых документов оказала негативное влияние как на преимущественное развитие математической двоичной (в отличие от многозначной и непрерывной – аналоговой) логики, так и на до сих пор применяемую парадигму цифровой, сугубо бинарной вычислительной техники. Это отразилось и на системах команд ЦВМ и на управляющих структурах алгоритмов и программ (непременное бинарное условие ЕСЛИ-ТО-ИНАЧЕ почти во всех алгоритмических языках). При этом в таком бинарном программировании рассматривается всего два варианта ветвления по типу «да» - «нет» («выполнено» – «не выполнено»), в то время как в реальной жизни и в реальных управляемых программами объектах различной природы вариантов исхода при проверке условий всегда больше двух. [С учетом этого в некоторых алгоритмических языках включены операторы множественного выбора, а также операторы обработки исключительных ситуаций.]

Цель данной работы состоит в том, чтобы предъявить читателям те новые возможности представления алгоритмов и программ с использованием цветовой палитры, которые:

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

1. СОПОСТАВИТЕЛЬНЫЙ ПРИМЕР

Для представления алгоритмов, не зависимых от используемого языка программирования, в основном применяются граф-схемы [1] (блок-схемы) и диаграммы (графы) пере ходов [2].

На рис. 1 изображен в виде общеупотребительной граф-схемы простой пример бинарной функции, определяющей факт выхода некоторого контролируемого параметра за пределы заданной пороговой величины (значения параметра и порога могут быть как действительными так и целыми числами, выход может быть как в сторону увеличения, так и уменьшения значения относительно порога). Функция возвращает двоичное значение: 1 – есть выход параметра за заданный предел, 0 – параметр в норме. При этом естественно использованы черные линии и текст на белом фоне. Рисунок в программной документации занимает одну страницу формата А4.

рис. 1

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

рис. 2

Воспользуемся к примеру ранее широко применявшимся (в MS DOS) черным фоном и отобразим на нем указанной цветовой палитрой один из возможных вариантов рассмотренной граф-схемы бинарной функции (рис. 3).

рис. 3

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

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

2. ЦВЕТНЫЕ СХЕМЫ АЛГОРИТМОВ

В принципе возможна масса других вариантов отображения цветных схем алгоритмов (ЦСА). Например, вместо отдельного цветового обозначения текстовых логических условий, можно эти тексты размещать поверх горизонтальных цветных отрезков, что с одной стороны может несколько увеличить площадь самой схемы, но с другой стороны позволяет уменьшить общую площадь изображения. Возможен также вариант, в котором каждое логическое условие вместе с подробным комментарием выделяется в текстовой части документа с обязательной цветовой пометкой, например, в следующем виде:

red line flint – параметр с плавающей точкой (1) или целочисленный (0). (Здесь отрезок прямой показан выбранным цветом, используемым далее в рисунке ЦСА.)

С учетом того, что любой сложный алгоритм может быть представлен в виде параллельно-последовательной схемы (ППС) независимых и зависимых фрагментов [4], предлагается использовать цветные ППС и далее детализировать отдельные фрагменты ППС в виде соответствующих ЦСА, подобных рассмотренному примеру.

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

рис. 4

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

рис. 5

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

Что можно предпринять в случае нехватки набора цветов палитры? Один из возможных вариантов – использовать двойные линии разного цвета или на одной линии выделять разноокрашенные отрезки.

Циклические конструкции в схемах алгоритмов существуют в двух основных видах: условие перед входом в цикл и условие перед выходом из цикла. Циклы в ЦСА предлагается выражать прямоугольной рамкой, окрашенной в выбранной для условия цикла цвет со значительно утолщенной верхней или нижней линией, обозначающей, соответственно, проверку условия перед входом в цикл или перед выходом из цикла. На рис. 6 изображены циклическая ППС с проверкой условия перед входом в цикл и циклическая ЦСА с проверкой условия перед выходом из цикла (текстовая часть для упрощения опущена).

рис. 6

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

рис. 7

Каждый программист в состоянии предложить не один вариант цветокодирования ЦСА, в том числе несколько удаленные от стандартного представления (примеры на рис. 8 и 9, отображающие, соответственно, фрагмент из рис. 6 и полностью рис. 7), а также и совершенно новые графические цветовые решения.

рис. 8 рис. 9

3. ЦВЕТОВОЕ КОДИРОВАНИЕ ДАННЫХ, ВЫРАЖЕНИЙ, ФУНКЦИЙ и ОБЪЕКТОВ КЛАССОВ

Обобщая типы переменных, принятых в большинстве алгоритмических языков, выделим следующие:

  • целочисленные (булевы, байтовые, двухбайтовые, четырехбайтовые, восьмибайтовые)
  • дробные (двух-, четырех и восьмибайтовые)
  • строковые (неограниченного размера).

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

рис. 10

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

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

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

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

рис. 11

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

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

4. ЦВЕТНЫЕ ТЕКСТЫ ПРОГРАММ

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

Используя цвет как основу языка программирования можно создать новые языки на основе существующих, но с упрощенным текстовым синтаксисом и использованием незначительного введения графических элементов. Например, оператор выбора (не следует в новом языке разделять бинарный и множественный выбор) представляется следующим образом. Слева указывается цветной идентификатор проверяемой переменной, правее него проводится вертикальная линия того же цвета (на число строк, реализующих возможные варианты выбора), правее этой вертикали в каждой строке указывается цветная константа, переменная или выражение, сопоставление с которыми на равенство (неравенство) дают искомые ветви выбора, а затем в каждой такой строке перечисляются операторы, соответствующие выбранной ветви. Нечто подобное можно предложить для реализации циклов и других языковых конструкций. При этом, за счет использования цвета и примитивных элементов графики можно вообще отказаться от ряда ключевых слов типа if, while, for, switch, int, boolean, float и прочих.

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

Последняя иллюстрация данной статьи представляет собой листинг с текстом программы на предполагаемом языке программирования С++Сolor. Его новые основные элементы показаны следующим образом:

  • оформление идентификаторов переменных цветом
  • оформление оператора цикла в виде цветной прямоугольной рамки с указанием условия его повтора как переменной с единичным значением, причем рамка охватывает операторы тела цикла
  • оформление операторов множественного выбора (switch-case) и бинарного выбора (if-else) в виде топологической конструкции, основу которой составляет вертикальная двойная черта, слева от нее размещено проверяемое выражение, а справа - значения этого выражения, размещенные друг под другом и обрамленные справа двоеточиями, после которых размещены последовательности операторов, образующих ветвление
  • использование таблиц, как объектов класса table, с автоматическим заданием числа строк и столбцов в ходе построения таблицы редактором
  • использование объектов класса automata, базирующегося на использовании класса table для задания совмещенной таблицы переходов и выходов.
рис. 11
Файл с этим примером в формате MS Word ~41кб

ЛИТЕРАТУРА

  1. Блох А.Ш. Граф-схемы и их применение. Минск: Вышейшая школа. 1975.
  2. Хопкрофт Дж.Э., Мотванн Р., Ульман Д.Д. Введение в теорию автоматов, языков и вычислений. М.: «Вильямс». 2002.
  3. Липаев В.В. Качество программного обеспечения. М.: Финансы и статистика. 1983.
  4. Кузнецов Б.П. Структура и сложность модулей циклических программ. // Автоматика и телемеханика. 1999. № 2. С.151-165.