Диссертация (1148239), страница 14
Текст из файла (страница 14)
Состав DSM-решения на основе QRealПолучаемое типовое предметно-ориентированное решение на базе QRealвключает в себя следующие инструменты.5.4.1. Графический интерфейс пользователяГрафический интерфейс(graphical user interface, GUI) получаемых средразработки предоставляет пользователям типичные инструменты для подобногорода инструментариев (внешний вид редактора блок-схем представлен на рис. 15):обозреватели модели, редактор свойств элементов, рабочую область редактора82диаграмм, палитру доступных для моделирования элементов, “миникарту”,являющуюся уменьшенной версией текущей диаграммы (бывает весьма полезнойпри работе с крупными диаграммами, занимающими более одного экрана), окно дляотображения предупреждений и сообщений об ошибках, а также ряд набор меню ипанелей главного окна для управления остальными инструментами.При желании любые элементы графического интерфейса можно скрыть.Рисунок 15.
Графический интерфейс DSM-решения на основе QReal5.4.2. РепозиторийРепозиторий QReal представляет собой простую объектно-ориентированнуюбазу данных, хранящую все создаваемые в QReal модели. Репозиторий представленв виде отдельной динамически загружаемой библиотеки, реализованной на языкеC++, в результате чего может быть использован сторонними программами(например, генераторами кода или анализаторами моделей) через специальный83программный интерфейс. Из других модулей платформы QReal репозиторийиспользует qrkernel и qrutils.Доступ к данным репозитория осуществляется через интерфейс RepoApi,который соединяет в себе три других интерфейса: интерфейсы моделейGraphicalRepoApiиLogicalRepoApiиинтерфейсслужебныхоперацийRepoControlInterface.
Интерфейс RepoControlInterface содержит несколько операцийзагрузки и сохранения содержимого репозитория, а также методы, реализующиепоиск среди содержимого репозитория.Интерфейсымоделейпредоставляютполный доступ к данным: диаграммам, элементам и связям между ними. Доступныоперации создания и удаления произвольных элементов и связей, запрос иизменение свойств, помещение элементов в другие как в контейнеры, проверкаэлемента с заданным идентификатором на существование и другие.5.4.3. Средства для работы с логическими и графическими моделямиЛогическая модель системы отражает её внутреннюю структуру, и это то, с чемработают генераторы и другие инструменты. Графическая модель системы — этонабор диаграмм, отображающих её логическую модель, с ней работает пользователь.В самом простейшем случае между элементами логической и графической моделейустанавливается соотношение «один к одному», однако это удобно далеко не всегда.Некоторые элементы модели могут визуального представления не иметь вовсе(например, значения перечислимых типов или специальные служебные вещи типанастроек генерации), некоторые, наоборот, имеют только визуальное представлениеи на логику системы никак не влияют (например, декоративная линия илипрямоугольник на диаграмме), некоторые могут иметь несколько представлений(например, один и тот же класс UML может присутствовать на нескольких разныхдиаграммах, причём выглядеть по-разному).Поддержка разделения логических и графических моделей реализована в QRealна нескольких уровнях.84●На уровне графического интерфейса присутствуют отдельные обозревателилогической и графической моделей.
С их помощью можно создавать,перемещать и удалять элементы каждого типа моделей, помещать логическиеэлементы на диаграммы (создавать графические элементы), число «копий»одного логического элемента на диаграмме не ограничено. В редакторесвойств для элемента на диаграмме отображаются как его графическиесвойства (позиция, размеры), так и свойства соответствующего логическогоэлемента (свойства элемента, описанные в метамодели языка). Например,изменение имени приведет к изменению имен всех элементов на диаграммах,соответствующих данному логическому элементу.●На уровне репозитория существует два различных интерфейса для работы слогической и графической моделями. Операции данных интерфейсовразличаются:черезAPIграфическоймоделиврепозиторииможнооперировать данными о диаграммах (позиция и размеры элементов, отношениевложенности контейнеров и т.п.), через API логической модели работать слогическими свойствами элемента (например, управлять трассировкой —невизуальным типом связи между элементами, используемым в некоторыхредакторах).
Для связи элементов моделей для каждого элемента графическоймодели в репозитории возможно получить идентификатор соответствующегоему элемента логической модели (если он существует).5.4.4. Средства обеспечения многопользовательской работыДля обеспечения коллективной работы над проектом в QReal несколькихпроектировщиков была добавлена возможность версионирования создаваемыхмоделей с помощью систем контроля версий (version control system, VCS): доступныоперации сохранения моделей на удаленном сервере и загрузки на рабочее место(операции check-in и check-out систем контроля версий соответственно), откат кпредыдущим версиям, просмотр изменений между версиями.85Рассмотрим, как в QReal устроена работа с файлами сохранений. Файлысохранений имеют расширения .qrs (QReal Save file) и получаются следующимобразом: содержимое репозитория сериализуется на диск в виде иерархиидиректорий, разделяющих элементы логической и графической моделей (далееэлементы каталогизируются по типу элемента для логической модели, дляграфической — вначале по принадлежности диаграмме, а затем уже по типуэлемента).
Сам элемент сериализуется в виде XML-файла, содержащего всюинформацию о нем: идентификатор элемента, его имя, значения всех свойств и т.п.Для получения единого файла сохранения данная иерархия каталогов архивируется.При загрузке файла сохранения на рабочее место репозиторием производятсяобратные операции: разархивирование каталогов и рекурсивное чтение ихсодержимого.Благодаря подобному внутреннему устройству файлов сохранения поддержкаверсионирования моделей выглядит довольно несложной задачей, однако встаетследующаятехническаяпроблема.Очевидно,чтофункциональностьверсионирования должна быть потенциально отключаемой, т.е.
быть реализована ввиде плагина инструментов. Однако, описанные выше операции над файломсохранения производит объект класса Serializer, который является внутреннимобъектом плагина репозитория. Расширять интерфейс репозитория операциямисистемы контроля версий видится неразумным, так как добавляет этому объекту ещеодну функцию, слабо связанную с основной — предоставлением доступа к данным.Ктомуже,существеннымтребованиембыламаксимальнаягибкостьирасширяемость — добавление поддержки новой системы контроля версий должнотребовать минимума изменений существующего кода. Использование еще одногоэкземпляра объекта Serializer в плагине версионирования также было затруднено:для этого потребовалось бы раскрывать детали реализации репозитория.Очевидным решением было бы версионировать уже заархивированные файлы86сохранения, но в таком случае будет осуществляться версионирование бинарныхфайлов, и вся информация о семантике изменений, осуществляемых в моделях,теряется.В результате было реализовано следующее решение (см.
рис. 16). Для того,чтобы дать произвольным компонентам QReal возможность распаковать файлсохранениябезнарушенияинкапсуляции,былсозданинтерфейсWorkingCopyManagementInterface, содержащий две операции: prepareWorkingCopy(),распаковывающуюфайлсохранениявкаталогсрабочейкопией,иprocessWorkingCopy(), соответственно запаковывающую директорию с рабочейкопией в файл сохранения. Интерфейс репозитория RepoControlApi, содержащийслужебныеоперациинадрепозиторием,былунаследованWorkingCopyManagementInterface.Рисунок 16. Встраивание компонент версионирования в архитектуру QRealот87Следующая задача — обеспечение контроля за изменениями файлов в рабочейкопии.
Например, если на диаграмме был создан новый элемент, в файле сохраненияпоявится соответствующий файл, который нужно добавить в рабочую копию VCSсоответствующей командой. Для обработки изменений в рабочей копии был созданинтерфейс WorkingCopyInspectionInterface, а в RepoControlApi был добавлен методпринимающийsetWorkingCopyInspector(),подобныйобъект-инспекторипередающий его в сериализатор. Сериализатор, выполняя сохранение, узнает, какиефайлы добавились, удалились или изменились и вызывает соответствующие методыобъекта-инспектора.