Научная статья на тему 'Алгоритмы укладки диаграмм состояний'

Алгоритмы укладки диаграмм состояний Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
393
53
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Коротков М.А.

В статье приведен обзор методов плоской укладки графов, поставлена задача плоской укладки диаграмм состояний UML. Описан аналитический алгоритм QMATH-STATECHART.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Алгоритмы укладки диаграмм состояний»

АЛГОРИТМЫ УКЛАДКИ ДИАГРАММ СОСТОЯНИЙ

М.А. Короткое Научный руководитель - к.ф.-м.н., ст.н.с. Ф.А. Новиков

(Санкт-Петербургский государственный политехнический университет)

В статье приведен обзор методов плоской укладки графов, поставлена задача плоской укладки диаграмм состояний иМЬ. Описан аналитический алгоритм рМЛТИ^ТЛТЕСИЛЯТ.

Введение

Программный пакет с открытым исходным кодом итМоё [1] обеспечивает разработку и выполнение автоматно-ориентированных программ. Он позволяет создавать и редактировать диаграммы классов и состояний иМЬ [2], которые соответствуют графу переходов и схеме связей конечного автомата [3]. После создания диаграмм существует возможность выполнить их. При этом содержимое диаграмм преобразуется в ХМЬ-описание, которое передается интерпретатору, также входящему в пакет итМоё. Разработанный пакет базируется на парадигме автоматного программирования [4].

Во многих случаях возникает потребность автоматической укладки диаграмм. В частности, в первых версиях итМоё отсутствовал графический редактор, поэтому при загрузке сохраненных файлов предыдущих версий необходимо обеспечить автоматическую укладку. В рамках проекта итМоё основной интерес представляет укладка диаграмм состояний языка иМЬ.

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

Постановка задачи

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

Диаграмма может быть изображена на плоскости, или, например, может быть построена объемная модель [6]. Для представления на мониторе современного персонального компьютера наиболее естественным представляется выбор плоского носителя.

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

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

Укладкой графа О = (У; Е) в декартовой системе координат (X; У) назовем множество Ь = (О; ¥У; ¥Е), где ¥У - функция из множества вершин в множество параметров, необходимых для представления вершины в выбранной системе координат (в нашем случае ¥У : У ® X х У х Я х Я , где последняя пара параметров - ширина и высота прямоугольника). ¥Е - функция из множества ребер в множество параметров, необходимых для представления ребра в выбранной системе координат (в нашем случае ¥Е :У ® (XхУ)п,п е N, где параметр п - количество изломов, вообще говоря, меняется от ребра к ребру). Для простоты будем говорить, что в уложенном графе заданы геометрические параметры каждого элемента.

Укладку на плоскости мы будем называть плоской. Данный термин не является общепринятым, в литературе (например, [7]) чаще говорят о плоском представлении графа. Укладку, в которой ребра представляют собой ломаные, состоящие только из горизонтальных и вертикальных отрезков, будем называть плоской ортогональной (или просто ортогональной).

Теперь необходимо оценить качество укладки (точнее, качество изображения, полученного по некоторой укладке). Выделим набор эстетик, по которым может оцениваться качество укладки. Основная задача такого выделения - обеспечить «читаемость» графа (однозначность представления информации). В работе [8] мною были выделены следующие эстетики:

• минимизация числа пересечений;

• минимизация площади;

• ограничение «свободного места»;

• минимизация изломов;

• минимизация общей длины ребер;

• минимизация коэффициента сторон;

• унификация длин ребер.

В результате анализа результатов работы алгоритмов, созданных в рамках работы [8], а также новых алгоритмов, следующие эстетики были отброшены как менее значимые:

• минимизация коэффициента сторон;

• унификация длин ребер.

Кроме того, следующие критерии в большой степени учитываются в других критериях и нарушаются только в очень специфических алгоритмах [9]:

• минимизация изломов;

• минимизация общей длины ребер.

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

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

• разнесение начального и конечного состояний - расстояние между начальным и конечным состоянием должно быть достаточно велико.

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

Обратим внимание на то, что принятые в диаграмме состояний иМЬ начальное и конечное состояние не имеют прямоугольной формы. Для простоты заменим их объемлющими прямоугольниками.

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

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

• минимизация числа пересечений;

• минимизация площади;

• ограничение «свободного места»;

• унификация размеров вершин, соответствующих простым состояниям.

Типы алгоритмов укладки графов

Для задачи укладки диаграммы не существует универсального решения, в связи с тем, что набор критериев, применяемых для оценки качества укладки, зависит от типа диаграммы. В [9] приведена классификация алгоритмов, применяемых для решения данной задачи. Рассмотрим две большие группы, принципиально отличающиеся подходом к решению:

• алгоритмы с физическим аналогом [11];

• аналитические алгоритмы [7].

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

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

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

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

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

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

На практике (рассмотрено три реализации [12], [13], [14]). Аналитические алгоритмы позволяют относительно быстро получать наиболее качественные и красивые графы, в связи с этим для укладки диаграммы состояний в проекте итМоё было принято решение использовать эту группу алгоритмов в качестве основной.

Ниже будет описан алгоритм QMATH-STATECHART, базирующийся на аналитическом алгоритме QMATH,

Алгоритм ОМАТН^ТАТЕСНАЯТ

Данный алгоритм использует в качестве основы алгоритм QMATH, но адаптирован для укладки диаграмм состояний. Алгоритм состоит из следующих шагов:

1. разделение графа на слои;

2. укладка подграфов в каждом слое;

3. объединениеграфов.

Основная проблема, с которой мы встречаемся при укладке графа - это проблема укладки составных состояний. В рамках рассматриваемого алгоритма на первом шаге будем рассматривать множества состояний, находящихся непосредственно в одном составном состоянии, отдельно. Таким образом, будет получен набор графов, которые будут подвергнуты укладке независимо друг от друга. Для ребер, соединяющих состояния из различных подграфов, будут зарезервированы порты (это необходимо при определении размеров состояний). При этом необходимо учитывать 81;-нумерацию на каждом слое (чтобы определить, будут ли ребра, которые необходимо добавить позже, входящими или исходящими) На рис. 1 приведен пример укладки графа (выполненной алгоритмом QMATИ-STATECHART), в вершинах у2, у5 и у6 которого есть вложенные слои.

Каждый подграф, полученный на предыдущем шаге, укладывается с помощью алгоритма QMЛTИ. Алгоритм QMATИ работает только с 81;-ориентированными двусвяз-ными графами (вопросы преобразования графа к диграфу, 81;-ориентации, обратного преобразования, а также основных идей, на которых базируется алгоритм QMATИ, не рассматриваются в связи с тем, что объем работы ограничен). Все ребра направлены от вершин с меньшим номером к вершинам с большим номером. Размер прямоугольника, соответствующего вершине, определяется в момент добавления вершины в укладку. Все исходящие ребра выходят из портов на верхней грани вершины, все входящие ребра входят в порты на боковых сторонах. При этом мы не используем точечные вершины (таким образом, минимальный размер вершины - 1).

Рис. 1. Укладка графа со слоями

Рассматривая очередную вершину, распределим входящие ребра между правой и

левой гранями прямоугольника. Пусть в вершину входит т(у) ребер, тогда

т(у)

2

ре-

бер входят в правую сторону, а оставшиеся

2

добавлении вершины нам потребуется добавить не более

- в левую. Таким образом, при т(у)

2

рядов и вШ(у) КОЛОНОК

(исключением являются вершины с одним входящим или исходящим ребром, так как для них добавляется две колонки или ряда, соответственно).

Рассмотрим вершину V и все вершины и такие, что существует ребро е = (и, V). Пусть число т(у) - четное. Тогда найдутся колонки с1 и с2, соответствующие ребрам е1 и е2, такие, что: • с1 находится левее с2; 1п(у)

есть ровно вее с1; есть ровно С2.

2

т^) 2

-1 колонок, содержащих ребра, входящие в V, и расположенных ле-

-1 колонок, содержащих ребра, входящие в V, и расположенных правее

Ребра е1 и е2 назовем входящими медианами вершины V. е1 - левая медиана, е2 -

правая медиана. Если же число т(у) - нечетное, то есть ровно одно ребро-медиана е,

т^) _

колонок с ребрами,

справа и слева от колонки соответствующей которому есть входящими в V.

При добавлении вершины в укладку добавляется необходимое количество колонок и рядов. Причем колонки добавляются между входящими медианами (если их две) или справа от медианы (если она одна).

Для уменьшения занимаемой площади к алгоритму может быть применена техника использования рядов и колонок, аналогичная таковой в алгоритме QMATH-4 (подробно эта адаптация описана в [16]). На рис. 2 приведена укладка графа алгоритмом QMATH.

12

Рис. 2. Укладка графа алгоритмом ОМЛТИ

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

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

Алгоритм QMAT-STATECHART без повторного использования рядов и колонок был реализован в рамках проекта UniMod и входит в UniMod версии 1.3. На рис. 3 приведен пример конечного автомата, уложенного с помощью этого алгоритма.

Рис. 3. Результат укладки с помощью алгоритма QMATH-STATECHART

Заключение

В работе исследована проблема плоской укладки диаграмм состояний UML. Поставлена задача укладки, дан обзор наиболее популярных методов. На базе существующих аналитических алгоритмов плоской укладки графа разработан алгоритм QMATH-STATECHART, позволяющий уложить произвольную диаграмму состояний языка UML. Ценность алгоритма заключается в том, что он разработан специально для укладки UML-диаграммы состояний.

Литература

1. Гуров B.C., Мазин М.А. Веб-сайт проекта UniMod. // http://unimod.sourceforge.net/

2. Rumbaugh J., Jacobson I., Booch G. The Unified Modelling Language Reference Manual, Second Edition. MA //Addison-Wesley, 2004.

3. Шалыто A.A. Switch-технология. Алгоритмизация и программирование задач логическогоуправления. СПб.: Наука. 1998.

4. Шалыто А.А., Туккель Н.И. Танки и автоматы. //BYTE/Россия. 2003. № 2. С. 69-73.

5. Новиков Ф.А. Дискретная математика для программистов. СПб: Питер. 2001.

6. Tamassia R. Advances in the Theory and Practice of Graph Drawing. http://www.cs.brown.edu/people/rt/papers/ordal96/ordal96.html

7. Battista G., Eades P., Tamassia R., Tollis I. Graph Drawing. Algorithms for the Visualization of Graphs. New Jersey: Prentice Hall. 1999.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

8. Короткое M. Разработка и реализация алгоритма укладки диаграмм состояний. СПбГУ ИТМО. Дипломная работа. 2005.

9. Sugiyama K. Graph Drawing and Applications for Software and Knowledge Engineers. Singapore: Mainland Press. 2002.

10. Касьянов B.H., Евстигнеев B.A. Графы в программировании: обработка, визуализация, применение. СПб: БХВ-Петербург, 2003.

11. Frutcherman T., Reingold E. Graph Drawing by Force-directed Placement. // Software -Practice and Experience. 1991. № 21. P. 1129-1164.

12. Веб-сайт проекта AGD (Algorithms for Graph Drawing). // http://www.ads.tuwien.ac.at/AGD/

13. Веб-сайт проекта GDT (Graph Drawing Toolkit). //http://www.dia.uniroma3.it/~gdt

14. Веб-сайт проекта Graph Layout Toolkit компании Tom Sawyer Software // http://www.tomsawyer.com/tsl/tsl.java.php

15. Battista G., Garg A., Liotta G., Tamassia R., Tassinari E., Vargiu F. An Experimental Comparison of Four Graph Drawing Algorithms. // Computational Geometry. 1997. V. 7. № 5-6. P. 303-325.

16. Papakostas A., Tollis I.G. Algorithms for area-efficient orthogonal drawings. // Computational Geometry. 1998. V. 9. № 1-2. P. 83-110.

i Надоели баннеры? Вы всегда можете отключить рекламу.