Создание «однообъектных» приложений Печать
Ускоренное создание графических интерфейсов
Типичные приложения, для разработки которых предназначена данная библиотека (ниже для краткости называемые «лабоподобными») – это программы научного и/или учебного назначения – программы для расчета и визуализации результатов расчета. Библиотека называется ALab и является основной частью проекта ALES (Abstract Laboratory for Education and Science).

По сравнению приложениями AXIS, пользователи ALES-программ должны быть более продвинуты (им от программы нужны сложные результаты, а не просто структурированная информация из БД), а с другой стороны, они могут быть менее продвинуты в пользовательских интерфейсах (или могут не иметь времени разбираться с ними) – в частности, они могут не иметь опыта работы не только с информационными системами, но и с «офисоподобными» приложениями.

Пользователь «лабоподобного» приложения сразу сосредотачивается на своей основной задаче, причем без обучения и даже без чтения справки по интерфейсу. Смысл задачи не требует от пользователя ни навигации по множественным объектам, ни поиска объектов по критериям (как в информационных системах), ни заботы об отмене сделанных изменений (как в «офисоподобных» приложениях). Все основные возможности программы показываются ему сразу после ее запуска (если не помещаются на один экран – представляются на нескольких вкладках, названия которых сразу бросаются в глаза), и для работы с большинством функций программы совсем не требуется пользоваться меню или панелью инструментов (хотя они имеются для вспомогательных операций – для запоминания/восстановления состояния программы, для редактирования настроек программы, для получения справки и т.п.).

Основные данные «лабоподобных» программ укладываются в единственный объект (хотя он иерархически организован – представляет собой дерево подобъектов). Основной объект хранит значения всех ключевых данных интерфейса (для расчетных программ – всех исходных данных и основных результатов расчета). Впрочем, это не исключает хранения дополнительных данных (например, анализируемых таблиц или табличных результатов расчета) в других объектах, сохраняемых в другие файлы. Редактирующие действия пользователя изменяют основной объект сразу (нет открывающихся в отдельном окне форм и кнопок OK/Отмена в них, т.е. все содержимое программы пользователь легко видит); а если требуется отменить проведенные изменения, пользователь просто может открыть ранее сохраненное состояние интерфейса.

Хранение множественных объектов при необходимости реализуются через множественные файлы, в которые пользователь может сохранить состояния интерфейса, называемые вариантами. В принципе, можно заставить «лабоподобное» приложение быть похожим на информационную систему в том, что касается одновременного редактирования разнотипных объектов (библиотека имеет т.н. общий интерфейс, который осуществляет навигацию по лабам и их вариантам, а также может в одном окне открывать несколько «лаб» и даже несколько вариантов одной «лабы»). Однако в отличие от информационных систем, эти объекты (варианты) не связаны друг с другом ссылками, так что совместное использование возможно только для однотипных вариантов и сводится к их сравнению (например, сравнению полученных в них результатов расчета).

Сверхбыстрая разработка приложений на базе данной библиотеки достигается, в том числе, за счет того, что при разработке почти не требуется вводить метаданные, на основе которых автоматически строятся формы графического интерфейса. Точнее, метаданные определяются структурой тестовых данных, вводимых в XML-файл «варианта по умолчанию». Конечно, это не позволяет через метаданные задавать поведение программы или произвольные представления данных. Однако чрезмерное увлечение метаданными (которое имеет место во многих [других библиотеках] для построения графических интерфейсов) часто приводит не к повышению, а к понижению скорости разработки (не говоря уже о существенно большем объеме кода библиотеки, которая обязуется «на всякий случай» иметь много представлений однотипных данных и много логик обработки действий пользователя). Дело в том, что самый быстрый и компактный способ дополнить приложение нетипичной функцией – это программирование на его языке, а изучение принятых в библиотеке правил написания метаданных для программиста зачастую может быть более трудоемкой задачей, чем программирование. Кстати, аналогичный подход с отсутствием явно вводимых метаданных для построения форм реализован и в библиотеке AXIS из раздела 6.2.2 (там требуются явно вводимые метаданные, но лишь для построения запросов).

Метаданные определяют лишь базовую структуру интерфейса (иерархию форм и набор их графических компонентов, по простым правилам соответствующих полям объекта-варианта, см. библиотеку ADMEdit). Однако «лабоподобные» приложения имеют несколько других механизмов для изменения/расширения приложения пользователем:

  • Команды (обработчики действий, общие для всех «лаб») – указываются в текстовом файле *.ini именами классов и кодами действий, и при необходимости пользователь, знакомый с программированием, может модифицировать поведение любого пункта меню и инструмента. Кроме того, любой пользователь может заблокировать элемент управления путем удаления из файла соответствующей команды.
  • Плагины (plug-ins, надстройки) – невидимые или видимые в отдельных окнах программные модули, для которых в XML-файле указывается область применения (для всех или для заданных «лаб») и метод активации (при загрузке программы или через новый пункт меню). Если новые команды обычно программируются для нетипичной функциональности (и требуют знания большой части библиотеки), то плагины – для типичной, но зависящей от конкретного проекта (при этом писать их намного легче за счет того, что имеется несколько «каркасов плагинов» – при этом теряется универсальность, но зато уменьшаются требования к пользователю-программисту).
  • Наборы строк для UI– файлы *.properties – могут редактироваться продвинутыми пользователями с целью изменения любых надписей и сообщений программы. Поддерживается несколько версий файла для разных языков, из которых выбирается та версия, которая соответствует установленному в пользовательском компьютере языку (кстати, та же возможность имеется для файлов вариантов (*.var) и других файлов (*.xml), которые тоже могут содержать локализованные строки).

Все это очень удобно для хранения версий каких-либо моделей и для экспериментов с ними: в научных задачах – с целью детального исследования модели, в учебных задачах – с целью выполнения многоэтапного задания (а также сопоставления результатов). Также библиотека может использоваться для задач, не связанных с расчетами – в частности, для сверхбыстрого создания редакторов каких-то отдельных объектов (при этом «лабоподобные» редакторы, в отличие от «офисоподобных», обладают более высокой usability). Ограничение: редактируемые объекты не должны иметь графического представления (за исключением формульного), а должны представлять собой наборы взаимно согласованных полей (в т.ч. полей-списков, полей-таблиц). Смысл такого использования может быть в том случае, когда получатель объекта – например, консольная программа или драйвер оборудования – не имеет собственного пользовательского интерфейса и/или когда программа-получатель не поддерживает хранение версий объектов (в то время как необходимо хранить много версий).

Однако вне расчетных приложений область применения достаточно узка: библиотека по умолчанию хранит варианты в файловой системе в своем собственном XML формате. В то время как для передачи объекта в программу-получатель (независимо от того, расчетная она или не расчетная) требуется либо написание альтернативного модуля хранения данных, либо запуск получателя (консольной программы или DLL) прямо из «лабы» – с преобразованием данных в нужный формат (тогда «лаба» может быть полнофункциональным графическим интерфейсом для неграфической программы). Впрочем, оба варианта несложны в реализации – благодаря расширяемой структуре данной библиотеки (см. выше), а также благодаря возможностям библиотеки [ABridge] по запуску внешнего исполняемого кода и по преобразованию соответствующих входных/выходных данных.

LAST_UPDATED2
 
Joomla Templates by Joomlashack