При разработке приложений, где необходима визуализация данных (например, построение графиков), появляется проблема: реализовывать необходимый функционал своими силами или использовать готовые специализированные библиотеки. Первый вариант является трудоемким, использование же библиотек позволяет упростить разработку и уменьшить ее время. Однако, возникает проблема выбора наиболее подходящей библиотеки под конкретную практическую задачу.
В данной статье будет описано решение, выбранное авторами в процессе разработки программы синтеза и анализа весовых функций, и полученные с его помощью результаты.
Разрабатываемая программа представляет собой инженерный инструмент для моделирования и расчета частотных характеристик интегрирующих аналого-цифровых преобразователей с весовым интегрированием.
Рассмотрим наиболее популярные из применяемых сегодня библиотек для визуализации данных: QWT, mCtrl, GtkGraph, Qt Charts.
Преимущества и недостатки каждой приведены в сравнительной таблице 1.
Таблица 1 - Сравнительные характеристики библиотек
Библиотека |
Платформы |
Варианты визуализации |
Дополнительные функции |
Стоимость |
QWT |
Windows, Linux, OS X, Android, Symbian |
Графики кривых, точечные графики, спектрограммы, гистограммы |
Масштабирование, перемещение, стилизация, экспортирование графиков. Дополнительные виджеты: шкалы, ползунки, компас, таймеры. |
бесплатная |
mCtrl |
Windows |
Графики кривых, точечные графики, гистограммы, круговые диаграммы. |
Стилизация графиков, дополнительные элементы пользовательского интерфейса. |
бесплатная |
GtkGraph |
Windows, Linux, OS X |
Графики кривых |
Стилизация графиков |
бесплатная |
QtCharts |
Windows, Linux, OS X, Android, Symbian |
Графики кривых, точечные графики, гистограммы, круговые диаграммы. |
Стилизация графиков, перемещение, масштабирование. |
платная |
Среди перечисленных вариантов самой функциональной и гибкой библиотекой является QWT. Эта графическая библиотека позволяет упростить процесс визуализации данных в программе. При использование данной библиотеки нет необходимости вручную прописывать элементы отображения, такие как оси координат, сетки, кривые данных и другие. Необходимо лишь задавать параметры этих элементов. Так же Qwt позволяет работать с достаточно большими объемами данных. [1].
Выбор данной библиотеки так же был обусловлен, тем что её можно использовать в разработке кроссплатформенных решений с использованием библиотек Qt. Qt - кроссплатформенный инструментарий разработки ПО на языке программирования C++. Включает в себя все основные классы, которые могут потребоваться при разработке прикладного программного обеспечения, начиная от элементов графического интерфейса и заканчивая классами для работы с сетью, базами данных и XML. [2]
При разработке была поставлена цель получить код соответствующий современным стандартам качества. Это позволило сократить количество строк кода, увеличить стабильность программы. Были использованы новые возможности стандарта С++11, такие как For-цикл по коллекции (рисунок 2.11), Лямбда-выражения, автоматическое определение типа данных (auto), потоки. [3] Так же во время разработки проводился множественный рефакторинг, в результате которого удалось сократить кол-во строк кода и сделать его более понятным для дальнейшей поддержки.
Лямбда-выражение (в программировании) - это специальный синтаксис для объявления анонимных функторов по месту их использования. Используя лямбда-выражения, можно объявлять функции в любом месте кода. [4]
Поток - это независимая задача, которая выполняется внутри процесса и разделяет вместе с ним общее адресное пространство, код и глобальные данные. [5]
Рефакторинг - это процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы.[6]
Для управления версиями программы была использована система Git. Это распределённая система управления версиями файлов. Проект был создан Линусом Торвальдсом для управления разработкой ядра Linux, первая версия выпущена 7 апреля 2005 года. [7]
Чтобы увеличить производительность и воспользоваться многоядерностью современных процессоров, в программе используется многопоточность, т.е. функции генерации точек для графиков АЧХ и временного представления СВФ выполняются параллельно в раздельных потоках. Применение данной технологии позволило добиться увеличения производительности на многоядерных системах при работе с большим объемом данных.
Выбор библиотеки QWT и следование вышеперечисленным методам разработки позволит получить современный, конкурентоспособный, стабильный продукт с высокой производительностью на многоядерных процессорах, обладающий хорошо читаемым кодом, что упрощает дальнейшую его поддержку.
Библиографический список
1. Информационный сайт "Хабхабр" [Электронный документ] URL: http://habrahabr.ru/post/211204/ (дата обращения: 20.08.2015).
2. Информационный сайт "QT" [Электронный документ] URL: http://doc.qt.io/QtCharts/ (дата обращения: 23.08.2015).
3. Информационный сайт "Open Standards" [Электронный документ] URL: http://www.open-std.org (дата обращения: 23.08.2015).
4. Г. Шилдт C++. Базовый курс / Пер. с англ. Н. Ручко. Изд.: «Вильямс», 2014. - 624 с.
5. Роберт Лафоре. Объектно-ориентированное программирование в С++. / Пер. с англ. А. Кузнецов, М. Назаров, Владимир Шрага Изд.: «Питер», 2015. - 928 с.
6. Информационный сайт "Git" [Электронный документ] URL: http://git-scm.com (дата обращения: 23.08.2015).
7. Пискаев К.Ю., Никулкин В.А., Васильев М.А. Выбор графической библиотеки для визуализации данных при разработке программных средств синтеза и анализа весовых функций // Современная техника и технологии. 2015. № 9 [Электронный документ]. URL: http://technology.snauka.ru/2015/09/7771 (дата обращения: 21.10.2015).