Организация доступа к функциям
Еще одной сложность межмодульного взаимодействия является ситуация, когда один модуль должен вызвать обработчик, находящийся в другом модуле. Модуль, в свою очередь, может вовсе не иметь информации о таком обработчике. Подобная ситуация может привести к полному краху системы, однако если использовать абстрактный класс, то от подобной проблемы можно избавится.
Абстрактный класс в объектно-ориентированном программировании - это базовый класс, который не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП - полиморфизм. Абстрактный класс может содержать абстрактные методы и свойства. Абстрактный метод не реализуется для класса, в котором описан, однако должен быть реализован для его неабстрактных потомков. Абстрактные классы представляют собой наиболее общие абстракции, то есть имеющие наибольший объём и наименьшее содержание [7].
Проблема доступа к функциям в различных библиотеках решена путем создания абстрактного класса AbstractInterface. В нем нет реализации ни одной функции, а только объявлены их прототипы. Этот класс является одним из предков для класса - модуля ядра системы (InterinClient). Таким образом, любой модуль может использовать функции в абстрактном классе для обращения к модулю ядра системы, а затем, используя менеджер модулей, обратится к функциям или визуальным компонентам, объявленным в другой библиотеке.
Основной причиной использования именно абстрактного класса является возможность объявления функций, реализация которых может находиться в а различных библиотеках. Если не использовать абстрактный функций, то, например, для реализации общесистемной возможности записи в лог, то придется добавить реализацию класса ЛОГ во все модули.
2.3 Проектирование ядра системы
Основным компонентов всей системы является ее ядро. Именно с этого модуля начинается логика работы программы. В реализации данной системы, ядро является не визуальным компонентом, поэтому его основные задачи:
. Запуск ядра системы.
. Проверка обновлений.
. Получение обновлений.
. Установка обновлений.
. Инициализация библиотек.
. Передача управления модулю главного окна.
Структурная схема ядра системы представлена на рисунке 2.1.
Основная идея ядра системы заключается в его окончательности. Оно
реализовано таким образом, что для изменения логики работы всей системы не
нужно будет вносить изменения в ядро. Такой подход позволят сразу прилучить
готовое, отлаженное решение, для модификации которого нужно лишь изменить набор
используемых библиотек.
Рисунок 2.1 - Структурная схема ядра системы.
Менеджер модулей
Менеджер модулей - это подсистема, которая реализована в виде класса. Она осуществляет загрузку модулей, их выгрузку, проверку необходимости обновления модулей, их загрузку и непосредственно обновление. Так же, менеджер модулей осуществляет получение информации о визуальных компонентах и обработчиках подключаемых библиотек.
Гланый цикл программы (Main Loop)
Главный цикл программы - это подсистема, реализуемая средствами библиотеки QT, а именно классом QAplication, но над ней выполнена надстройка для интеграции с подсистемой работы с параметрами. Ее основной задачей является обработка сообщений от операционной системы.
Подсистема работы с параметрами
Подсистема работы с параметрами - это общедоступный для всех библиотек функционал, который позволяет работать с настройками как системы в целом, так и с настройками функциональных надстроек. Эта подсистема имеет возможность работы с несколькими конфигурационными файлами для различных частей системы. Такой подход позволяет организовать абсолютно уникальную настройку всего программного продукта.
Модуль логирования
Модуль логирования - это составная часть ядра системы, которая может работать с модулями и имеет в своем составе функционал для работы с лог файлами. Благодаря абстрактному классу, любая подключенная библиотека может вести лог независимо от её внутренней функциональности.
2.4 Проектирование главного окна системы
В разрабатываемой системе модуль главного окна является основным
визуальным модулем, он обеспечивает работу с веб-контентом. Разработка с нуля
такого модуля большая и трудная задача, но кроссплатформеннная библиотека Qt в
своем составе уже имеет похожее решение. Оно называется «Demo Browser», Снимок экрана работы которого представлен на
рисунке 2.2.
Рисунок 2.2 - Снимок экрана работы проекта «Demo Browser»
Данное решение является как кроссплатформенным, так и многофункциональным, а за работу с веб-контентом отвечает ядро CEF (Chrome Embedded Framework). Оно работает со всеми актуальными веб-протоколами, взаимодействует с java-скриптами, а так же имеет в своем составе инструментарий для организации канала связи «Webchannel». Поддерживает как оконную, так и вкладочную модель навигации по веб-страницам. Таким образом «Demo Browser» является отличным модульным решением, которое можно использовать в качестве основы для реализации модуля главного окна системы [8].
Chrome Embedded Framework
Chromium Embedded Framework (CEF) - это проект с открытыми исходными кодами, созданный в 2008 году как элемент управления Web browser, работающий на базе Chromium от Google [9].
Основные возможности фреймворка:
. CEF позволяет создать свои обработчики протоколов, таким образом, реализовать свой «закрытый» алгоритм шифрования. Этим же можно воспользоваться, чтобы подгружать данные из статических ресурсов программы.
. CEF позволяет делать обертку над нативными функциями в пространстве объектов виртуальной машины Javascript. Ресурсоемкие операции по обработке больших массивов данных можно переложить на более строгие и быстрые языки программирования.
. CEF позволяет обрабатывать события навигации, скачивания файлов и так далее.
2.5 Проектирования модуля печати
Модуль печати основан на стандартном классе QPrinter, позволяющем организовать обмен данными с принтером, и сторонней библиотеке Debenu PDF Library для работы с PDF файлами [10]. Над ней сделана надстройка, где все вызовы функции приведены к стандартному виду Qt.
Основные возможности Debenu PDF Library:
. Обширный список функций.
. Безопасность, подпись и защита PDF-файлов.
. Создание, заполнение и редактирование PDF-формы.
. Разделение, слияние, добавление и объединение PDF-файлов.
. Преобразование EMF в PDF.
. Извлечение текста и изображений из PDF-файлов.
. Редактирование начального вида и свойств документов формате PDF.
. Расширенная поддержка JavaScript, закладок.
.Функция прямого доступа (загружает файлы с диска, а не из памяти).
Основными функциями модуля печати является либо печать документа, либо его просмотр. Его основными задачами является получение файла, определение его задачи на исполнении. Если файл нужно просто прозрачно отправить на принтер, то модуль, в зависимости от настроек в реестре, может использовать принтер по-умолчанию или заданный в реестре. Перед печатью может задать размер бумаги, определить ориентацию страницы и указать количество копий. Если файл необходимо открыть, то модуль определяет разрешение файла и, в зависимости от него, отправляет команду на открытие приложению, которое умеет работать с этим типом файлов.
2.6 Допущения и ограничения
Ни при каких условиях несовместимость продукта и модуля не должна приводить к падению того или другого. Проверка версий и совместимости должна проводиться своевременно и безопасно. Разработчиком должны строго выполняться правила ведения версии модуля и обеспечения механизма проверки версии и совместимости.
Модуль должен поддерживать программный механизм определения версии как минимум по соглашению мажорная/минорная версия. Мажорная версия библиотеки меняется (увеличивается) при изменениях интерфейсов или принципов работы, делающих библиотеку несовместимой со старыми версиями продукта. Минорная версия библиотеки меняется при инкрементальных изменениях, позволяющих старым версиям продукта использовать новую библиотеку абсолютно прозрачно и без каких-либо последствий для функциональности. Таким образом, существует правило бинарной обратной совместимости модуля в рамках одной мажорной версии: Старые версии продукта должны гарантированно работать с новыми минорными версиями модуля, и при этом вся функциональность должна полностью сохраняться. Вся работа с библиотекой должна быть построена на интерфейсах. браузер плагин инсталлятор программный
Все методы, функциональность которых подразумевает возможность ошибок или отказа в выполнении запроса, должны возвращать численный результат операции типа CHAR.
При наличии в проекте логической части (функционального кода) и
графической оболочки (GUI), они должны быть полностью разделены и должны
физически находиться в разных DLL библиотеках. Взаимодействие между GUI и
алгоритмической частью должно осуществляться по интерфейсам согласно общим
правилам взаимодействия библиотек.
За исключением специально оговоренных случаев, алгоритмическая часть должна
быть способна функционировать при отсутствии своего GUI-модуля. При этом она
может иметь функциональность для предупреждения пользователя или продукта об
отсутствии GUI компоненты, но также, при необходимости, должна уметь работать
без каких-либо лишних сообщений об этом.
2.7 Структурная схема системы
На рисунке 2.3 представлена структурная схема системы.
Рисунок 2.3 - Структурная схема системы
2.8 Функциональная схема системы
На рисунке 2.4 представлена функциональная схема системы.
Рисунок 2.4 - Функциональная схема системы
3.1 Среда разработки Qt Creator
Введение
Qt Creator это полностью интегрированная среда разработки (IDE), которая
предоставляет вам инструменты проектирования и разработки сложных приложений
для множества настольных и мобильных платформ. На рисунке 3.1 представлен
логотип среды разработки Qt Creator с указанием ее основных компонентов
[11].
Рисунок 3.1 - Логотип Qt Creator с указанием основных компонентов
На рисунке 3.2 представлен снимок экрана главного окна среды разработки Qt Creator.
Проекты
Одним из главнейших достижений Qt Creator является то, что он позволяет команде разработчиков работать над проектом на различных платформах с использованием общих инструментов для разработки и отладки.
Рисунок 3.2 - Снимок экрана главного окна среды разработки Qt Creator
Но зачем вам нужны проекты? Чтобы быть в состоянии собирать и запускать приложения, Qt Creator нуждается в той же информации, которая потребуется компилятору. Эта информация указана в настройках сборки и запуска проекта.
Создание проекта позволяет:
. Группировать файлы вместе.
. Добавить собственные шаги сборки.
. Включить формы и файлы ресурсов.
. Указать настройки для запускаемых приложений.
Можно или создать проект с нуля, или импортировать существующий проект. Qt Creator генерирует все необходимые файлы в зависимости от типа создаваемого проекта. Например, если выбрать создание приложения с графическим интерфейсом пользователя (GUI), Qt Creator создаст пустой .ui файл, который вы можете изменить в интегрированном Qt Designer.интегрирован с кроссплатформенными системами автоматизации сборки: qmake и CMake. Также вы можно импортировать существующие проекты, которые не используют qmake или CMake, и указать Qt Creator просто проигнорировать систему сборки [12].
Редакторы
Qt Creator поставляется с редактором кода и Qt Designer для проектирования и сборки графических интерфейсов пользователя (GUI) из виджетов Qt.
Так как он является IDE, Qt Creator отличается от текстового редактора тем, что знает как собирать и запускать приложения. Он понимает языки C++ и QML как код, а не как простой текст. Это позволяет ему:
. Дать возможность писать хорошо форматированный код.
. Угадывать что разработчик хочет написать и дополнять код.
. Отображать сообщения об ошибках и предупреждения.
. Дать возможность перемещаться между классами, функциями и символами.
. Предоставлять контекстно-зависимую справку по классам, функциям и символам.
. Осмысленно переименовывать символы так, что другие символы с таким же именем но принадлежащие другим областям действия не будут переименованы.