BC/NW 2003г., №1(3)/ 15.1
ОСОБЕННОСТИ ВИЗУАЛИЗАЦИИ ОБЪЕКТОВ ГРАФИЧЕСКОГО ИНТЕРФЕЙСА FLOGOL-СИСТЕМЫ ФУНКЦИОНАЛЬНО-ЛОГИЧЕСКОГО ПРОГРАММИРОВАНИЯ
Бебчик Ан.М., Бебчик Ал.М.
(Москва, Московский государственный институт радиотехники,
электроники и автоматики (технический университет), Россия)
Широко
применяемое в последнее время понятие визуального программирования фактически
имеет отношение лишь к практически удобным средствам создания диалогового
интерфейса программы с пользователем, но при этом не связано с ощутимой пользой
для написания самой программы. Использование графических средств построения
программ способно существенно повысить наглядность, исключить многие ошибки еще
на этапе их написания, предоставит удобные средства анализа и модификации уже
созданных программ. Основная причина отказа от применения графических средств
построения программ, написанных на традиционных алгоритмических языках
программирования, обусловлена самим стилем таких программ. Графически
отображаемая взаимосвязь компонентов таких программ либо очень проста, либо, по
крайней мере, внешне носит малоинформативный характер. Для
функционально-логического стиля программирования характерно то, что основное
внимание программиста уделяется построению формального описания решения задачи,
а не пути его получения, что открывает новые возможности эффективного
графического программирования.
Для языка
функционально-логического программирования FLOGOL, о котором идет речь в
данной статье, объекты визуализации обусловлены сетевым представлением схем
направленных отношений [1,2]. Согласно приведенному в этих работах формальному
определению сети, объектами изображения являются сама сеть, ее точки и
элементы. Элементы сети изображаются прямоугольниками, в левом верхнем углу
которых находится имя сорта элемента. Размер элементов по горизонтали
фиксирован, а по вертикали – соответствует максимуму арности входов и выходов.
Точки сети изображаются закрашенными кружками.
Однако, помимо объектов,
полученных непосредственно из определения сети, существуют графические объекты,
которые напрямую в нем не отражены. Это так называемые дуги – соединительные
линии между входами и выходами элементов сети и точками. Дуги состоят из
горизонтальных и вертикальных ребер, соединенных между собой, плавными переходами
(кривыми). Пример сетевого представления приведен на рис.1.
Графическое
конструирование сетей возможно разными способами. Первоначально нами был
использован метод, при котором все объекты создавались непосредственно
пользователем, а затем каким-либо способом связывались. Однако, в процессе
работы выяснилось, что намного удобнее позволять пользователю создавать лишь
элементы сети, а точки и дуги формировать автоматически. При этом вводятся
дополнительные операции – слияние и расщепление точек. Расщепление
характеризуется тем, что в общем случае возможны различные комбинации связей
полученных в результате расщепления точек. Для решения этого вопроса может
использоваться дополнительная информация об объектах сети, не отображаемая
графически. Кроме точек, в первый момент создания пользователем новой сети
определенной арности вместе с внешним контуром сети одновременно создаются ее
входные и выходные точки.
Автоматическое
создание точек сети и построение нужной сети способом их слияния предъявляет
особые требования и к автоматическому построению дуг при перемещении элементов сети и точек, слиянии или
расщеплении последних. Построенная дуга должна иметь минимально возможное
количество изгибов (и ребер, соответственно), одновременно не пересекать, по возможности,
другие элементы и точки сети, а также не совпадать графически с другими дугами.
Исключение в несовпадении графических маршрутов составляют те дуги, которые
начинаются в одной и той же точке сети. Такие дуги, наоборот, желательно
представлять общей линией на протяжении их общего направления. Однако в любом
случае пользователь должен иметь возможность раздельного редактирования таких
дуг. Для осуществления этой возможности в его распоряжение предоставляется два
инструмента – внесение дополнительных точек изгиба и перемещение уже созданных
ребер.
Вернемся
к автоматическому формированию дуги.
На рис. 2 изображен принцип действия алгоритма
формирования дуги методом итеративного разбиения прямой, соединяющей начальную
и конечную точки будущей дуги по пересекаемым ею элементам сети. Заметим, что
элементы сети в данном алгоритме представлены своими оболочками, которые не позволяют
ребрам дуги пройти слишком близко к элементам, а также оставляют место для
скругления участков перегиба.
Далее под точкой будем
понимать графическую точку изображения,
если не указано иное. Точка 1 получена простым созданием ребра, идущего от
точки начала дуги к точке пересечения с оболочкой элемента сети. Далее вступает
в действие итеративная часть алгоритма. Проводятся воображаемые линии из точки
1 в точку назначения (точка 5) так, чтобы они стали ребрами определяемого
точками прямоугольника (изображены мелким пунктиром). Такие Г-образные линии
будем называть кратчайшими. Если обе линии не встречают препятствий (ими
считаются только элементы сети), то выбирается линия, первое ребро которой
совпадает по направлению с последним построенным ребром (такую линию будем
считать приоритетной). Если обе линии встретили препятствие, как в
рассматриваемом случае, то строится новая воображаемая прямая линия (изображена
крупным пунктиром) между последней построенной точкой дуги и конечной точкой
(линия 1-5). При пересечении данной линией препятствия над или под ним строится
горизонтальная линия (линия 2-3), и итеративная часть алгоритма повторяется.
Если же препятствие не встретилось (линия 3-5), то строится линия до
препятствия по приоритетной кратчайшей линии, и итеративная часть алгоритма
также повторяется.
Минусами данного алгоритма
является то, что он не учитывает положение возможных соседних дуг и точек сети,
а также то, что дуги получаются «прижатыми» к элементам сети, что вызывает
неоправданные при взгляде на сеть изгибы дуг, особенно тогда, когда элементов в
сети не много. Последний эффект, впрочем, можно уменьшить, произведя
дополнительный анализ дуги на возможность спрямления. Скругление участков
перегиба вводится после построения всей дуги в целом.
Особым
случаем является перемещение объектов сети, вызывающее изменение точек,
определяющих дугу. В таком случае полное перестроение дуги нежелательно, так
как пропадут все ручные корректировки, внесенные пользователем средствами
редактирования. В то же время изменение дуги необходимо даже в тех участках,
которые пользователь изменил вручную, так как положение объектов и их
количество могло измениться с момента редактирования. Для решения этого вопроса
предлагается изменять ближние к концевой точке ребра дуги следующим образом.
Если новое положение точки можно достичь лишь изменением длины ребра, то оно и
производится (при длине ребра, равном нулю, оно удаляется). В противном случае
производится аналогичный анализ следующего ребра, но уже с учетом пересечения
возможных препятствий предыдущим ребром. На каждом шаге рассматривается
возможность сокращения ребер дуги путем соединения ребер, параллельных друг
другу.
Испытание программы
показало, что ее использование позволяет быстро формировать на экране
графические представления сетей. Полученные изображения достаточно наглядны и
эстетичны. В настоящее время проводится работа над расширенной версией
программы, обеспечивающей выполнение в полной мере всех требований,
предъявляемых к ней как к компоненту графического редактора FLOGOL-системы
функционально-логического программирования.
ЛИТЕРАТУРА
1.
Фальк В.Н. Теория направленных
отношений и ее приложения // Дисс. … докт. техн. наук. М: – МЭИ. -2001.
2.
Кутепов В.П., Фальк В.Н. Направленные отношения:
теория и приложения // Изв. РАН. Техническая кибернетика, 1994. № 4,5.