PowerAnt - Могучий Муравей: Научи Свой компьютер Управлять Реальным Миром
PowerAnt это программное управление через RS-232 порт 14 и больше внешними устройствами с помощью компьютера. Открытый, текстовый, хорошо задокументированный протокол управления. Управление электроприборами с потребяемой мощностью до 200Вт. Хотите управлять Реальным Миром даже из MS Excel?.
 Применение
Компьютерный клуб
Компьютерная сеть
Домовая сеть
Умный дом
Прочее
 PowerAnt
Описание
Применение
Тех. характеристики
Документация
Фотографии
 Базовая станция
Описание
Применение
Тех. характеристики
Документация
 Типы PowerAnt
SwSe
SwSw
SeSe
 Скорость работы
MS-DOS
Linux
MS Windows 98
MS Windows 98, Perl
 Программирование
Примеры на Perl
C/C++ - c чего начать
C/C++ - примеры
MS Access 2000
MS Excel 2000
 Заказ
Комплектность
Цены
 ЧаВо
 Новости сайта RSS
 Статьи
 Контакты
 Рейтинги

Применение стандарта XML при проектировании
пользовательского интерфейса интерактивных программ

Пастухов А.В., Казимир В. В.

Черниговский Государственный Технологический Университет,
кафедра Информационных Компьютерных Систем,
250027 г. Чернигов - 27     ул. Шевченко, 95 Телефон. (0462) 95-56-87,
e-mail: A.Pastukhov@itek.com.ua V.Kazimir@cs.stu.cn.ua

У статтi розгляда≤ться проблема проектування та побудови iнтерфейсу користувача. В якостi стандарту опису iнтерактивного iнтерфейсу запропоновано використання стандарту XML. Наведено варiант втiлення запропонованого рiшення до операцiйно⌡ системи Linux, який збудовано на основi вiльно поширювально⌡ бiблiотеки Qt. Запропоновано пiдхiд побудови документообiгу, в основi якого ≤ XML, що забезпечу≤ об'≤днання зусиль колективу програмiстiв.

The problem of designing and construction the interactive interface with the user is considered. As the universal standard of the program interactive interface description the standard XML is offered. The realization variant of the offered decision for operational system Linux, constructed on a basis of freely distributed library Qt is given. The construction approach of documents circulation based on XML, suitable for  collective work of programmers is offered.

Введение

В мировой практике широко распространены два варианта модели жизненного цикла ПО [1]: каскадный и спиральный. Обе модели в фазе проектирования предусматривают формирование технического задания. Несмотря на постоянное развитие систем программирования, передача технического задания программистам часто происходит в виде бумажного документа, например в виде файла в формате MS Word. В некоторых случаях одной из составляющих частей технического задания является составление описания пользовательского интерфейса, который прорабатывается особенно тщательно. При этом в текстовом документе, как правило, в прямом виде присутствуют графические изображения окон и элементов управления. В дальнейшем эти элементы пользовательского интерфейса должны быть повторены в виде программных компонентов в программном продукте. Это указывает на то, что одна и та же работа фактически выполняется дважды. Первый раз рисование окон интерфейса выполняет проектировщик технического задания, второй раз - программист. Программист производит перевод описания интерфейса программы с графического языка проектировщика на язык используемой системы программирования.

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

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

Язык XML как единый формат описания пользовательского интерфейса

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

Разделение программы на интерфейсную и функциональную части

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

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

Рис. 1 Схема построения интерактивной программы

На первом уровне интерактивного взаимодействия программы с пользователем расположены драйвера устройств. Следующим идет уровень системных вызовов, который недостаточно явно выражен при программировании в ОС Windows, но зато четко определен в виде стандарта X-Windows.

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

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

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

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

Бланк параметров

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

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

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

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

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

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

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

Применение стандарта CORBA

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

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

Возможность совмещения описания пользовательского интерфейса и базы данных

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

Разграничение прав доступа

Представление всех бланков параметров в виде единого XML описания делает возможным простую реализацию механизма разграничения доступа к данным. Для этого необходимо создать специальный компонент, определяющий правомочность открытия затребованного окна текущим пользователем с возможным назначением прав доступа к каждому окну в отдельности. Также допустимо назначение прав доступа для определенных инструментов. Например, можно запретить пользователю во всей программе пользоваться инструментами: <сохранить>, <добавить>, <удалить>, при помощи которых производится изменение данных в программе. При этом полностью сохраняется возможность пройти по всем состояниям программы.

Единая система генерации интерфейса пользователя

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

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

 Расширение возможностей определения интерфейсов

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

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

Конвертирование XML описания в программу

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

<window name="Sample">
                <title>Пример описания окна</title>
                <form>
                               <lineedit name="Text">
                                               <title>Текстовое поле ввода</title>
                               </lineedit>
                               <checkbox name="Yes_no">
                                               <title>Да или нет</title>
                               </checkbox>
                </form>
</window>

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

Дополнительно должны быть созданы специальные структуры для обмена параметрами между интерфейсной частью и функциональной частью. Ниже приведен вариант преобразования приведенного в примере XML описания в текст программы на С++ с использованием библиотеки Qt[5]:

Class WindowSample: public QWindow {
                QLineEdit * Text;
                QCheckBox * Yes_no;
                public:
                               WindowSample( QWidget * );
                               ~WindowSample( );
                               QWindow * create( QWidget *);
};

QWindow * WindowSample::create ( QWidget * parent ){
                QHBoxLayout * layout = new QHBoxLayout( this );
                setTitle(tr("Пример описания окна"));
                Text = new QLineEdit( this );
                QLabel * ql = new QLabel(tr("Текстовое поле ввода") ,this , Text );
                layout->add( ql );
                layout->add( Text );
                Yes_no = new QCheckBox( this );
                ql = new QLabel(tr("Да или нет"),this , Yes_no );
                layout->add( ql );
                layout->add( Yes_no );
                layout->activate();
                return this;
};

Возможность построения программных продуктов для различных платформ

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

Координация работы коллектива программистов

Современные программные системы обычно разрабатываются коллективами программистов. Одним из решающих моментов в процессе интеграции усилий коллектива является документооборот. Все используемые документы должны быть хорошо понятны не только тем, кто их создал, но и тем, для кого они предназначаются. В качестве примера можно взять применение программистами, для организации совместной работы, спецификаций, выполненных на C/C++ в виде заголовочных файлов (*.h). Однако данный формат легко читается программистом, знающим язык программирования C/C++, но абсолютно неприемлем для сотрудников других подразделений организации.

В то же время XML создавался как открытый стандарт. Одной из его отличительных особенностей является так называемая <читаемость человеком> ( Human readable). Кроме того, сходство XML с широко применяемым HTML увеличивает круг людей, способных без усилий понять XML описания. Такими специалистами могут быть дизайнеры, составители справочной системы, переводчики и программисты функциональной части.

Фактически применение XML приводит к тому, что просмотр полученного интерфейса, для его обсуждения на всех фазах разработки, можно производить стандартными средствами представления XML, такими как Internet Explorer. При этом не требуется даже наличие макета готовой программы. В фазе разработки программы различные узкоспециализированные разработчики, получив XML описание пользовательского интерфейса, сразу могут приступать к работе.

Предложенная последовательность разработки предусматривает следующее распределение работы между подразделениями организации:

·         XML описание поставляться дизайнерам для оформления пользовательского интерфейса программы (рисование соответствующих изображений, размещение интерфейсных элементов программы);

·         программисты функциональной части получает техническое задание в виде XML описания интерфейсной части программы;

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

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

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

Реализация пользовательского интерфейса на основе стандарта XML и библиотеки Qt

Рассмотренный подход построения интерфейса пользователя получил программную реализацию для операционной системы Linux с использованием библиотеки Qt. Задачей данной реализации являлось построение программы <рабочее место оператора> для Многофункционального Интеллектуального Сервера Связи (МИСС) [6].

При построении программы требовалось обеспечить возможность быстрой разработки модулей управления опционально устанавливаемыми компонентами системы МИСС, простую локализацию программы, ориентированность на неподготовленного пользователя, наличие подсистемы разграничения прав доступа и возможность работы в полноэкранном режиме (имеется ввиду отсутствие оконного менеджера для X-Windows).

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

Под указанную задачу была разработана следующая иерархия XML описаний:

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

Окно (бланк параметров) - описание окна может содержать ссылки на другие окна.

Инструменты - описание часто используемых действий.

Поля ввода - разнообразные элементы ввода и представления данных.

Общее представление интерфейса, описанного в формате XML не содержит указаний, как должен выглядеть пользовательский интерфейс в конечном итоге. За представление интерфейса пользователю отвечает  разборщих XML. Разработанная система представления интерфейса реализована на основе разборщика XML, встроенного в программу отображения интерфейса (прямое применение XML).

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

1.        Заголовок окна - отображает текущее состояние программы.

2.        Область ввода данных - занимает максимально возможную площадь окна (особенно это критично по вертикали; горизонтальной области обычно хватает с избытком).

3.        Служебную область - содержит сообщения о статусе работы программы.

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

Автоматическое размещение элементов ввода производится сверху вниз (применяется класс размещения QGridLayout). В случае необходимости их можно расположить в два и более столбца, для чего определен специальный тег label .

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

Рис 2. Представление окна бланка параметров с указанием множества доступных действий.

Приведенное на рис.2 окно построено на основе следующего XML описания:

<window name="MsgDelivArch">
                <title>IPFax: Архив уведомлений о вручении</title>
                <form>
                               <lineedit name="BOX_ID" enabled="false">
                                               <title>Код абонента</title>
                               </lineedit>
                               <lineedit name="fio" enabled="false">
                                               <title>Фамилия Имя Отчество (название организации)</title>
                               </lineedit>
                               <listview name="ipfax_ackn_arch">
                                               <title>Сообщения</title>
                                               <coltitle>Рег. номер</coltitle>
                                               <coltitle>Номер получателя</coltitle>
                                               <coltitle>Номер получателя уведомления</coltitle>
                                               <coltitle>Количество попыток передачи</coltitle>
                                               <coltitle>Состояние сообщения</coltitle>
                                               <coltitle>Время создания уведомления</coltitle>
                               </listview>
                <label stretchh="10"/>
                </form>
</window>

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

Пример окна меню приведен на рис3.

Рис 3. Представление окна меню

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

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

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

Заключение

Полная реализация рассмотренного подхода требует дополнительных средств и значительных усилий со стороны программистов на начальном этапе разработки интерактивных программ. Необходимо разработать соответствующий инструментарий (конвертор либо интерпретатор XML для конкретной системы программирования) и полностью отработать механизм взаимодействия между различными специалистами. Кроме того, применение такой технологии требует серьезного отношения к фазе составления технического задания, учитывающего распараллеливание труда разработчиков по созданию программного продукта. Однако предложенный подход предоставляет несомненную гибкость в плане выбора системы программирования и операционной системы, так как не привязывает пользовательский интерфейс к конкретной программной платформе. Это обеспечивает при уже практически полностью разработанном пользовательском интерфейсе, при необходимости, достаточно просто сменить ОС и/или систему программирования.

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

Литература

1.        Буч Г. Объектно ориентированное проектирвание с примерами применения. - М.: Конкорд, 1992

2.        XML  http://www.w3.org/TR/1998/REC-xml-19980210

3.        Patrick J. Yale C/AIM Web style guide, El University, - 1997

4.        Коутс Р., Глеймник И. Интерфейс <человек-компьютер> -М.: Мир, 1990

5.        Qt http://www.trolltech.no

6.        НПП ИТЕК http://www.itec.cn.ua

PowerAnt это программное управление через RS-232 порт 14 и больше внешними устройствами с помощью компьютера. Открытый, текстовый, хорошо задокументированный протокол управления. Управление электроприборами с потребяемой мощностью до 200Вт. Хотите управлять Реальным Миром даже из MS Excel?.
  © 2004-2022 by  www.anthillsolutions.com