Материал: Разработка и реализация программных средств для работы с веб-контентом в рамках проекта INTERIN PROMIS

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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

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

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

Библиотека QT предназначена для разработки GUI, разработанная компанией Trolltech AS. Qt была представлена в 1996 году, с тех пор, с помощью этой библиотеки было создано большое количество разнообразных приложений с графическим пользовательским интерфейсом [3].

Qt является кроссплатформенной, есть реализации библиотеки для MS/Windows, Unix/X11 (Linux, Sun Solaris, HP-UX, Digital Unix, IBM AIX, SGI IRIX и пр.), Macintosh ( Mac OS X ) и Embedded платформ. Библиотека является объектно-ориентированной, базирующейся на компонентах и имеет богатое разнообразие различных визуальных элементов - виджетов (widgets), предоставляемых в распоряжение программиста.

Эта библиотека является безусловным лидером среди имеющихся средств разработки межплатформенных программ на языке C++. Широко известная и часто используемая в мире Linux, она, благодаря распространению графической оболочки KDE, стала де-факто стандартом проектирования программного обеспечения на этой платформе.

Достоинства библиотеки QT:

.        Кроссплатформенная разработка приложений.

.        Удобная работа со строками.

.        Поддержка оконного интерфейса.

.        Возможность работы с сетевыми протоколами.

.        Поддержка разработки сложных графических объектов.

.        Модульность библиотеки.

.        Обновляемость.

Таким образом, данная библиотека в своем составе уже имеет модуль

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

 

2. ПРОЕКТИРОВАНИЕ СТРУКТУРЫ СИСТЕМЫ


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

Программный модуль - это любой фрагмент описания процесса, оформляемый как самостоятельный программный продукт, пригодный для использования в описаниях процесса [4]. Это означает, что каждый программный модуль программируется, компилируется и отлаживается отдельно от других модулей программы, и тем самым, физически разделен с другими модулями программы. Более того, каждый разработанный программный модуль может включаться в состав разных программ, если выполнены условия его использования, декларированные в документации по этому модулю. Таким образом, программный модуль может рассматриваться и как средство борьбы со сложностью программ, и как средство борьбы с дублированием в программировании.

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

2.1 Основная идея модульного деления

Разрабатываемый клиент большой корпоративный системы использует множество технологии для реализации различных автоматизированных рабочих мест (АРМ). Он вынужден собирать различные информационные технологии для организации таких возможностей как:

.        Организация звонков с рабочих мест.

.        Просмотр файлов.

.        Мониторинг работы оборудования.

.        Работа с текстовыми документами.

Таким образом, получается, что для реализации всех возможностей

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

2.2 Межмодульное взаимодействие

Для обеспечения работоспособности всех компонентов системы необходимо организовать связь модулей друг другом. Для этого применяют такие технологии как AciveX, элементы NativeAPI, подключение динамических библиотек (DLL) и другие.

Одним из требований к системе является ее кроссплатформенность, однако элементы AciveX и NativeAPI предназначены для работы только в операционных системах семейства Windows. Однако разработка с использование DLL библиотек позволяет получить платфомонезависимое приложение [5].

Динамически подключаемые библиотеки (DLL)

Библиотека DLL представляет собой коллекцию подпрограмм, которые могут быть вызваны на выполнение приложениями или подпрограммами из других библиотек. Подобно модулям, библиотеки DLL содержат разделяемый (sharable) код или ресурсы. Однако, в отличие от модулей, библиотеки содержат отдельно откомпилированный исполняемый код, который подключается к приложению динамически на этапе его выполнения, а не компиляции.

Для того чтобы библиотеки можно было отличить от самостоятельно выполняемых приложений, они имеют расширение .dll.

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

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

Использование динамических библиотек предлагает следующие преимущества:

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

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

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

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

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

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

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

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

)        соответствующая библиотека обновилась до новой версии;

)        внесены изменения в зависимую dll-библиотеку;

)        соответствующий dll-файл перезаписывался с более ранней версией;

)        соответствующий dll-файл не найден системой или удален с компьютера.

Обычно эти действия называются конфликтами dll-библиотек. Если не обеспечивается обратная совместимость, программа не может быть успешно запущена. Такие действия называют конфликтом dll-библиотек. Программа может быть успешно запушена и нормально использоваться только в случае обеспечения обратной совместимости [6].

Преимущества использования динамических библиотек (по сравнению со статическим подключением подпрограмм на этапе сборки приложения) следующие:

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

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

Библиотеки обеспечивают также послепродажную поддержку (after-market support). Например, дисплейный драйвер, предоставляемый библиотекой, может быть обновлен для того, чтобы поддерживать дисплей, который не существовал в момент продажи приложения.

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

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

Реализация межмодульного взаимодействия

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

Такими функциями являются:

1.      Init.

2.      Start.

3.      Stop.

4.      About.

После загрузки каждого конкретного модуля в память, в функции Init размещается код для инициализации и создания используемых объектов, которые объявлены внутри DLL библиотеки. Функция About позволяет получить строку с описанием модуля и его функционала. Интерфейсная функция Start используется в тех случаях, когда загруженный модуль содержит исполняемый код, которому нужно передавать управление. Stop - это функция останавливает выполнение исполняемого кода. Если загруженная библиотека только предоставляет набор функций, то интерфейсные функции Start и Stop должны быть пустыми.

Поскольку разрабатываемая система отображает веб-страницы, то в подключаемых библиотеках могут быть как элементы управления (окна, виджеты, кнопки, и прочее), так и элементы меню, которые имеют собственные обработчики команд. Для этого в каждой библиотеке предусмотрено две структуры, которые инициализируются в методе Init, такие как: Get_actions и Get_widgets. Эти структуры возвращают список визуальных элементов управления и список обработчиков команд, которые присутствуют в библиотеке.

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

Источник: https://www.bibliofond.ru/view.aspx?id=897371