Визуализация графа с использованием парадигмы объектно-ориентированного программирования

3. Информационные системы и технологии

УДК 004.424

О А. Ю. Ткаченко

ВИЗУАЛИЗАЦИЯ ГРАФА С ИСПОЛЬЗОВАНИЕМ ПАРАДИГМЫ ОБЪЕКТНО-ОРИЕНТИРОВАННОГО ПРОГРАММИРОВАНИЯ

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

Ключевые слова: граф, объектно-ориентированное программирование, проектирование, технологическая карта, сетевой график.

©A Yu. Tkachenko

VISUALIZATION OF GRAPH BY USING PARADIGM OF OBJECT-ORIENTED PROGRAMMING

This article describes a method of constructing a component for the design of graphs and finite state machines using separation of functionality into separate classes and objects. The article presents possibilities of application properties, abstraction, polymorphism and inheritance component to provide additional functionality through the implementation of your own classes, as well as the encapsulation that hides critical data and the functionality of the component from the programmer. The basic entity needed to render the graph and how to display vertices and edges on a target coordinate axis о of the picture. Shows the way of interaction between implemented classes used to build, visualize, and provide human-machine user interaction with the projected graph. Presents methods for optimizing the workload on the graphics subsystem by using buffering and outputting only the visible part of the graph.

Keywords: graph, object-oriented programming, design, process map, roadmap.

Введение

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

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

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

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

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

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

2. Применение объектно-ориентированного подхода

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

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

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

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

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

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

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

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

На рис. 1. представлена диаграмма наследования классов объектов графа. Во главе классов лежит абстрактный класс ТОКСгарИО^сй. реализующий общий для всех объектов графа функционал, такой как размеры, занимаемые объектом при его отображении на мониторе, хранение адреса памяти привязанной к объекту дополнительной информации, а также основные события, такие как изменение размеров и положения объектов, изменение состояния объектов.

Рис. 1. Диаграмма наследования классов объектов графа

От абстрактного класса ТОКСгарЬОЬусс! унаследованы отдельные классы реализующие поведение свойственное ребрам ТОКОгарИЕс^е и вершинам ТБКОгарЬТЧоск.

Для ребер, дополнительно хранятся ссылки на начальную и конечную вершину графа ТБКОгарЬТЧоск, а также информацию об ортогональном расположении ребер графа. Для вершин дополнительно хранится информация об их координатах.

От класса вершин унаследованы классы, реализующие отображение

вершин графа в разных видах - прямоугольник или эллипс.

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

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

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

Рис. 2. Диаграмма наследования классов модификаторов

Каждый из приведенных на диаграмме классов выполняет задачу преобразования входных координат в соответствии со своим предназначением. Рассмотрим работу каждого из модификатора.

ТВКБга\¥Вох8са1ег отвечает за масштабирование конечного отображения координат на координатной сетке, которое задается в виде коэффициента 8. При 8 = 1- масштаб равен 1:1, при 8 < 0 - масштаб уменьшится на заданный коэффициент, а при 8 > 0 - масштаб увеличится на заданный коэффициент.

ТВКБга\¥ВохРо8Шоп предназначен для смещения отображения рисунка относительно видимой части окна вывода. Смещение задается в пикселях отдельно для оси абсцисс Бх и ординат Бу.

ТВКТ)га\¥ВохСоп81:гат18 позволяет задавать границы выводимого рисунка при выполнении смещений по оси абсцисс Бх и ординат Бу.

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

точка А', выводимая на экране монитора.

А =

На рис. 3 изображен вывод одного графа с разными значениями коэффициента масштабирования и смещения.

Рис. 3. Масштабирование и смещение при визуализации графа

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

Рис. 4. Диаграмма наследования классов визуализации графа (а), ортогональная визуализация графа (б), сеточная визуализация графа (в) Классы алгоритмов предназначены для наделения компонента возможностью выполнения различных алгоритмов над графом. Для реализации необходимого алгоритма необходимо унаследовать свой класс от абстрактного ТБКОгарЬА^огкЬт и запрограммировать необходимые действия над данными, хранящимися в графе и способом его визуализации на

экране монитора.

Каждый класс алгоритмов получает на вход граф в виде списка вершин и ребер, выполняет свои внутренние расчеты. Отображение результатов производится при помощи перехвата метода рисования вершин и ребер 0пВга\¥01уес1:, а также метода рисования холста графа ОпОга\\СгарЬ.

На рис. 5 приведен пример выполнения алгоритма поиска кратчайшего пути между 14 и 22 вершиной графа. При этом найденный путь выделен другим цветом и утолщенными стрелками.

Механическое оборудование

Рис. 5. Применение алгоритма поиска кратчайшего пути к графу

После того, как все сущности определены и имеют свое поведение, необходимо объединить их работу в единую, взаимосвязанную систему. Для взаимодействия классов между собой используется класс ТВКСш1:от-СгарЬ. изображенный на рис. 6, который является связующим звеном между классами объектов, модификации, отображения и алгоритмов графа. Данный класс отвечает за процесс выполнения отдельных этапов построения и управления графом, производит необходимые промежуточные вычисления перед передачей информации в ТОКСизШтОгахчОгарЬ. а также координирует работу классов алгоритмов и передает подготовленные для вывода данные в ТВКСш1:отВга\¥Вох.

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

Рис. 6. Диаграмма взаимодействия классов

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

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

3. Визуализация графа

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

Метод 1. Вывод только видимой части. Для каждого объекта, при изменении размеров или положения, вычисляется прямоугольная область, описывающая данный объект. В дальнейшем, в процессе визуализации, проверяется условие попадания вычисленной области в окно вывода. Если область попадает, то производится рисование объекта, если область не

попадает в окно вывода, то рисование данного объекта не производится.

Метод 2. Вывод построенного изображения через буфер. При этом каждый новый цикл вывода графа на экран сопровождается предварительной отрисовкой графа в буфере, размер которого соответствует размеру экрана вывода. После полного построения кадра в буфере производится его вывод на экран при помощи \VinAPI функции ВкВк.

Метод 3. Применение допуска. Каждое перемещение объекта или смещение холста вывода сопровождается полной перерисовкой всего холста. Для уменьшения количества перерисовок в работе используется допуск Я, задаваемый в пикселях, при достижении которого выполняется полная перерисовка холста.

Применение на практике всех трех методов позволило снизить нагрузку на графическую подсистему, тем самым повысить производительность вывода графа. Для вычисления эффективности методов были проведены замеры производительности вывода изображения на экран монитора, в рамках которых производилась визуализация графа с различным количеством объектов и различным соотношением попадания объектов на экран. Результаты замеров представлены в таблице 1 и показывают, что применение данных методов позволяет уменьшить нагрузку при визуализации графа в 24 раза, а также увеличить количество объектов в отображаемом графе в 100 раз, при условии, что в видимую часть будет попадать до 500 объектов, что вполне достаточно для отображения графа.

Таблица 1

Серия проведенных замеров производительности вывода графа на экран монитора

Общее количество объектов, шт Количество объектов, попадающих в область видимости, шт Производительность вывода на экран без применения методов оптимизации. FPS Производительность вывода на экран с применением методов оптимизации. FPS

500 500 12 277

500 50 16 395

5000 5000 1 26

5000 50 - 37

50000 50 - 8

50000 500 - 8

500000 50 - 1

Заключение

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

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

Приведенные методы оптимизации визуализации графа позволили снизить нагрузку на графическую систему ЭВМ, тем самым увеличить количество отображаемых объектов графа, а применение допуска позволило уменьшить отклик при изменении масштаба и позиции отображаемого графа.

Литература

1. Касьянов В. В. Графы в программировании. Обработка, визуализация и применение. - СПб: BHV-СПб, 2003. - 1104 с.

2. Takao Nishizeki, Md Saidur Rahman. Planar Graph Drawing: World Scientific, 2004.-312 c.

3. Трахтенброт Б.А., Барздинь Я.М. Конечные автоматы (поведение и синтез). М.: Наука, 1970. 400 с.

4. Константайн Л., Локвуд Л. Разработка программного обеспечения. СПб., Питер, 2004. 592 с.

5. Ткаченко А. Ю. Методика контроля полноты информации по технологическим процессам в реляционных базах данных // Современные технологии. Системный анализ. Моделирование. - 2015. - № 2. - С. 75-79.

References

1. Kasyanov V. V. Graphs in programming. Processing, visualization and application. - St. Petersburg: BHV-SPb, 2003. - 1104 p.

2. Takao Nishizeki, Md Saidur Rahman. Planar Graph Drawing: World Scientific, 2004.-312 c.

3. Trakhtenbrot B. A., Barzdin J. M. Finite automata (behavior and synthesis). M.: Nauka, 1970.400 р.

4. Constantine L., Lockwood L. Software Development. St. Petersburg, Peter, 2004. 592 p.

5. Tkachenko A. Yu., Method of monitoring completeness of the information on technological processes in relational database systems // Modern technologies. System analysis. Modeling. - 2015. - No. 2. - Pp. 75-79.

Ткаченко Антон Юрьевич, аспирант Иркутского государственного университета путей сообщения, e-mail: tkachenkoayu@mail.ru

Tkachenko Anton Yurievich, Postgraduate student of Irkutsk State Transport University, e-mail: tkachenkoayu@mail.ru