УДК 004.514
О Е. С. Фереферов, А. А. Ветров
МЕНЕДЖЕРЫ КОМПОНОВКИ ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА, НАПРАВЛЯЕМЫЕ СПЕЦИФИКАЦИЯМИ1
В работе рассматривается задача автоматического размещения визуальных компонентов пользовательских интерфейсов прикладных программных систем, обеспечивающих доступ к базам данных (БД). Управление размещением компонентов позволяет более эффективно использовать пространство формы, а также автоматически адаптировать пользовательский интерфейс под различные разрешения мониторов. Для системы автоматизации создания приложений баз данных авторами разработаны менеджеры компоновки, использующие при размещении компонентов на формах информацию из спецификации систем.
Ключевые слова: информационная система, база данных, интерфейс, менеджеры компоновки, спецификация.
О Е. S. Fereferov, A. A. Vetrov
USER INTERFACE LAYOUT MANAGERS DIRECTED BY SPECIFICATIONS
The article is devoted to current problems of automatic placement of user interface component for information systems, providing access to databases (DB). Directing of components placement allows for more efficient use of space forms, and automatically adapt the user interface to different monitor resolutions. The authors developed a layout managers, using information from the systems specification of for placing components on forms. The automation system of create database applications based on specifications used these layout managers.
Keywords: information system, data base, user interface, layout managers, specifications.
Введение
Разработка интерфейса является одной из самых важных и неотъемлемых задач при создании информационной системы (ИС), поскольку именно эта часть системы отвечает за взаимодействие с пользователями. Интерфейс должен обеспечивать поддержку выполнения заложенных в систему функций и вместе с тем быть удобным для пользователя. В настоящий момент трудозатраты на проектирование и разработку интерфейса при создании ИС остаются достаточно большими.
1 Работа выполнена при частичной финансовой поддержке РФФИ, проект № 1407-31339
Современный рынок предлагает большое количество инструментальных средств для разработки программ. При этом подходы к созданию интерфейса также различны: описание визуальной части непосредственно в коде, визуальное проектирование из компонентов, генерация форм с визуальными компонентами. Одним из перспективных современных направлений создания систем является порождающее программирование [1,2], когда на основе формальных моделей (например, на UML [3] или в виде онтологий [4,5]) генерируется как подпрограммы отвечающие за бизнес-логику системы, так и пользовательский интерфейс. Но, как показывает практика, сгенерированный код практически всегда требуется дорабатывать программисту, при этом полученные изменения не отражаются в исходных моделях системы.
При разработке пользовательского интерфейса одной из важных задач является расстановка визуальных компонентов на форме (компоновка). При этом, с одной стороны, необходимо эффективно использовать пространство формы, а с другой стороны, создать удобный для работы пользователя интерфейс. Особенно актуальна данная задача при автоматическом создании интерфейсов систем на основе моделей.
1. Существующие подходы к компоновке интерфейса
В большинстве современных языков программирования (например, С#, Delphi) реализован механизм визуального проектирования экранных форм, позволяющий программисту точно задавать расположение каждого компонента. Однако в большинстве приложений пользователю оставляют возможность изменения размеров формы. При этом возникает необходимость в определении правил, контролирующих перемещение компонентов при изменении размеров формы. В роли таких правил, обычно, выступают свойства визуальных компонентов такие, как «Выравнивание» (Align) и «Якорь» (Anchors) (или подобные им), позволяющие задавать правила изменения размещения компонентов при изменении размеров формы.
Свойство «Выравнивание» задаёт размещение компонента относительно того компонента, на котором он размещён (своего «родителя»). Это свойство может принимать значения (alNone, alTop, alBottom, alLeft, alRight, alClient). При значении alNone размер и положение компонента относительно его родителя не изменяются при изменении размеров родителя. При следующих четырех значениях компонент располагается вдоль соответствующей стороны родителя, при этом один из его размеров (вдоль стороны) изменяется, а другой остаётся постоянным. Значение alClient означает, что элемент управления занимает всю клиентскую область родительского окна.
Свойство «Якорь» представляет собой набор флагов, установка каждого из которых обеспечивает фиксацию элемента управления относительно соответствующей стороны родителя. При задании «Якоря» по любой стороне расстояние между соответствующими сторонами элемента управле-
ния и его родителя сохраняется неизменным. Свойство «AutoSize» обеспечивает изменение размеров компонента в соответствии с размерами его содержимого (текста, изображения, списка, иерархического дерева и т. д.).
Описанных механизмов перемещения компонентов оказывается достаточно для реализации большинства приложений. Но ни один из этих механизмов не позволяет, например, разделить приращение размера родительского компонента между несколькими его потомками, расположенными в одной строке. При автоматической генерации интерфейса необходимо иметь возможность получения качественного размещения компонентов без участия человека, для этого требуется опираться не на точные координаты компонентов, задаваемые средствами визуального программирования, а на некоторые правила, динамического вычисления этих координат.
Наиболее гибкий механизм управления размещением компонентов реализован в языке Java [6] в виде менеджеров компоновки (размещения), которые расставляют компоненты в определённом порядке и, как правило, не требуют задания точных координат и размеров компонентов. Наиболее часто используются менеджеры компоновки BorderLayout, FlowLayout, GridLayout и GridBagLayout, но программист может создать свои менеджеры размещения, реализовав интерфейсы LayoutManager или LayoutManager2.
Работа менеджера размещения FlowLayout заключается в укладывании в контейнер один компонент за другим слева направо, переходя от верхних рядов к нижним. При изменении размера контейнера компоненты перестраиваются, стараясь занять целиком с начала верхний ряд, а за тем остальные по тому же принципу. При этом размеры каждого компонента остаются статичными. Менеджер GridLayout расставляет компоненты в таблицу с заданным числом строк и столбцов. Все компоненты получают одинаковый размер. Можно задать промежутки между компонентами в пикселях по горизонтали и вертикали. Менеджер GridBagLayout позволяет размещать компоненты в таблице с неопределенным заранее числом строк и столбцов. При этом один компонент может быть растянут на несколько ячеек этой таблицы, заполнить ячейку целиком, расположиться в заданном месте ячейки. Менеджер размещения BorderLayout делит контейнер на пять неравных областей и позволяет заполнить каждую область одним компонентом.
Из недостатков известных менеджеров Java можно отметить следующие: размеры компонентов задаются либо жёстко (GridLayout, GridBagLayout), либо не указываются вообще (FlowLayowt). Данные менеджеры удобно использовать при заранее известном количестве компонентов и их свойствах. В ситуации, когда заранее не известен состав компонентов и взаимодействие между ними (группировки компонентов) использование вышеописанных менеджеров может привести к «не дружественному» интерфейсу. В рамках автоматического создания пользователь-
ского интерфейса данные менеджеры могли бы быть эффективно использованы, если их доработать на предмет использования при расстановке компонент метаинформацию из модели системы (например, тип и размер данных отображаемых в нём).
2. Менеджеры компоновки, учитывающие информацию из спецификаций
Для автоматизации разработки информационных систем в ИДСТУ СО РАН разработана технология создания приложений баз данных (ПБД), на основе декларативных спецификаций. В рамках данной технологии создано инструментальное средство «ГеоАРМ» [9-10], позволяющие как создавать спецификации ПБД, так и интерпретируя их автоматически (без компиляции) становится предметной ИС, обеспечивающей взаимодействие пользователей с БД. Спецификация ПБД является средством представления и хранения модели системы и содержит минимально необходимую информацию о его структуре, которой, однако, оказывается достаточно для автоматической реализации приложения, и, в частности, создания пользовательских интерфейсов, обеспечения выполнения CRUD-функций, построения пользовательских запросов, поддержки взаимодействия с ПД, а также организации взаимодействия с внешними подключаемыми модулями для решения специфических задач.
Для повышения качества автоматически создаваемого интерфейса в «ГеоАРМ» были реализованы два менеджера компоновки. При реализации первого менеджера, за основу была взята идея менеджера компоновки FlowLayout Java, т.е. менеджера, который укладывает компоненты в ряды друг за другом, слева на право. Если в FlowLayout размер у каждого компонента фиксированный, то в разработанном менеджере было положено, что каждый объект имеет три возможных размера: минимальный (szMin), лучший (szBest) и максимальный (szMax). Максимальный размер — это размер компонента, соответствующий размеру поля таблицы БД. Например, полю типа varchar(150) будет соответствовать максимальный размер компонента, отображающий 150 символов. Было замечено, что часто для хорошего восприятия информации достаточно отображать часть поля таблицы, так как информация в них занимает не все поле целиком. Поэтому для каждого объекта можно вычислить лучший размер (70% от размера поля). Минимальный размер компонента - это размер, при котором читаема хотя бы часть данных (8-10 символов). Кроме того, разработанный менеджер стремится поджать ряды компонентов к верху окна.
В спецификации ПБД содержится информация о способах отображения данных. В описании отображения полей некоторого представления могут быть указаны как отдельные поля, так и группы полей, которые на форме отображаются в виде набора полей, объединенных в контейнер (например, GroupBox).
По своей сути, пользовательская форма - это контейнер (главный контейнер) для элементов управления, на котором могут располагаться как
отдельные элементы, так другие контейнеры (вложенные контейнеры) и т.д. Разработанный менеджер компоновки (рис. 1) автоматически размещает элементы управления в контейнере по следующему алгоритму. Сначала менеджер компоновки получает размеры (згМт. вгБез!:, эгМах) всех элементов контейнера и пытается разместить их с максимальными размерами друг за другом, слева на право, сверху вниз. Если при таком размещении все компоненты и контейнеры остаются видимыми на форме, то компоновка останавливается. Иначе, менеджер компоновки пытается разместить компоненты с лучшими (вгБез!:) размерами, при этом, если в какой-то из строк остается место, недостаточное для следующего компонента, то менеджер компоновки проверяет, хватит ли этого места для размещения одного или нескольких компонент данного ряда с максимальными (эгМах) размерами. При этом приоритет имеют компоненты с наибольшими максимальными размерами. Если компоновка с лучшими размерами не дает необходимого результата, менеджер расставляет компоненты с минимальными размерами.
Рис. 1. Пример сформированного интерфейса
Второй разработанный менеджер реализует идеи менеджера GridLayout Java, т.е размещает компоненты в таблицу. Сначала менеджер пытается размещать все компоненты с размером szMax, если же места не хватает, то переходит к предпочитаемым размерам szBest. После расстановки компонентов в ячейки происходит выравнивание их правого края по границе столбца (с учетом отступа). Компонентам с большим весом, к ним относятся выпадающие списки со строковыми значениями, поля для отображения строк, даётся возможность занять место в двух и более столбцах, при условии, что все компоненты помещаются на форме.
Заключение
Разработанные менеджеры компоновки позволяют решить задачу автоматической генерации форм при создании ПБД на основе декларативных спецификаций. Менеджеры компонуют интерфейс так, чтобы пользователю были видны все необходимые данные из таблиц БД (если это возможно), при этом данные были читабельными. В дальнейшем плани-
руется развитие данного менеджера компоновки, а также создание новых менеджеров, реализующих более сложные алгоритмы компоновки элементов управления на форме.
Литература
1. Грибачёв К. Delphi и Model Driven Architecture. Разработка приложений баз данных. - СПб.: Питер, 2004.
2. Чарнецки К., Айзенекер У. Порождающее программирование. Методы, инструменты, применение. Для профессионалов. - СПб.: Питер,
2005. -736 с.
3. Черкашин Е.А., Федоров Р.К., Бычков И.В., Парамонов В.В. Автоматизация синтеза ядра информационной системы с использованием UML-описания // Вычислительные технологии. - 2005. - Т. 10. - С. 114121.
4. Грибова В.В., Кисленок P.C. Автоматизация разработки визуального представления пользовательского интерфейса по модели предметной области // Искусственный интеллект. - 2006. - № 4. - С. 148-152.
5. Грибова В.В., Клещев A.C. Концепция разработки пользовательского интерфейса на основе онтологий // Вестник ДВО РАН. - 2005. - № 6. -С. 123-128.
6. A Visual Guide to Layout Managers. The Java™ Tutorials http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html.
7. Фереферов E.C., Бычков И.В., Ружников Г.М., Хмельнов А.Е. Инструментальное средство автоматизации создания приложений баз данных на основе декларативных спецификаций // Вестник Бурятского гос. ун-та. -2011. -№ 9. - С. 118-122.
8. Фереферов Е.С., Бычков И.В., Хмельнов А.Е. Технология разработки приложений баз данных на основе декларативных спецификаций // Вычислительные технологии. - 2014. - Т. 19, № 5. - С. 85-100.
References
1. Gribachev К. Delphi and Model Driven Architecture. Development of database applications. - SPb.: Peter, 2004.
2. Czarnecki K., Ayzeneker W. generative programming. The methods, tools and application. For professionals. - SPb .: Peter, 2005. - 736 p.
3. Cherkashin E.A., Fedorov R.K., Bychkov I.V., Paramonov V.V. Automation synthesis of core information system using UML-description // Computational technologies. - 2005. - Vol 10. - P. 114-121.
4. Gribova V.V., Kislenok R.S. Automate the development of visual representation of the user interface on the domain model // Artificial intelligence. -
2006. -№ 4. -S. 148-152.
5. Gribova V.V., Kleshchev A.S. The concept of user interface development based on ontologies // Bulletin FEB RAS. - 2005. - № 6. - S. 123-128.
6. A Visual Guide to Layout Managers. The Java™ Tutorials http://docs.oracle.com/javase/tutorial/uiswing/layout/visual.html.
7. Fereferov E.S., Bychkov I.V., Ruzhnikov G.M., Hmelnov A.E. Automation tool to create database applications based on declarative specifications // Bulletin of the Buryat State. Univ. - 2011. - № 9. - S. 118-122.
8. Fereferov E.S., Bychkov I.V., Hmelnov A.E. Technology development of database applications based on declarative specifications // Computational technologies. - 2014. - T. 19, № 5. - S. 85-100.
Фереферов Евгений Сергеевич, кандидат технических наук, учёный секретарь, Институт динамики систем и теории управления имени В.М. Матросова СО РАН, e-mail: [email protected].
Ветров Александр Анатольевич, программист Институт динамики систем и теории управления имени В.М. Матросова СО РАН, e-mail: [email protected].
Fereferov Evgeniy Sergeevich, PhD, scientific secretary of Institute for System Dynamics and Control Theory of SB RAS, e-mail: [email protected].
Vetrov Alexander Anatolievich, programmer of Institute for System Dynamics and Control Theory of SB RAS, e-mail: [email protected].