Диссертация (1148272), страница 21
Текст из файла (страница 21)
Этот интерфейс определяетинформацию, которую настраиваемый визуальный редактор, входящий в ядро системы, должен знать о синтаксисе визуального языка, чтобы давать возможностьсоздавать диаграммы. С точки зрения ядра системы подключаемый визуальныйредактор представляет собой набор диаграмм (различных визуальных языков,входящих в состав редактора, их может быть несколько), каждая диаграммасодержит в себе список элементов. Элемент может быть либо узлом, либо связью.Любой элемент обладает списком свойств (свойства с точки зрения абстрактногосинтаксиса представляют собой тройки «имя - тип - значение по умолчанию») ивнешним видом.
Внешний вид узла задаётся в векторном графическом формате,близком к SVG [100], но с некоторыми расширениями (возможностью определитьпорты, к котором могут подключаться связи и областями для вывода значений свойств из репозитория). Внешний вид связи определяется стилем линии(сплошная, пунктирная и т.д.) и видом конца линии, выбираемым из несколькихпредопределённых значений (открытая и закрытая стрелки, закрашенный инезакрашенный ромб и т.д.).
Для узла также указывается, какие связи можно кнему подключить и какие узлы он может содержать внутри себя как составныеэлементы.Редактор визуального языка можно создать вручную, реализовав описанныйвыше интерфейс на языке C++ и собрав подключаемую библиотеку. Однако такойподход весьма неэффективен, поэтому был использован лишь однажды, для нуждтестирования системы. Далее речь пойдёт об автоматизации создания визуальныхредакторов. Здесь был дан лишь краткий обзор возможностей ядра системы,необходимый для дальнейшего изложения, более подробно см.
статьи [40, 109,136].1054.3. Инструментальные средства поддержкисоздания визуальных языков4.3.1. МетаредакторВ системе QReal для быстрого создания редакторов используется визуальный метаязык и соответствующий редактор, называемый метаредактором. Повизуальной метамодели языка, созданной в метаредакторе, генерируется код наC++, реализующий интерфейс подключаемого модуля, который требуется ядрусистемы.Визуальный метаязыкВ основу метаязыка системы QReal заложены принципы, используемые,например, в метаязыке MOF [59]: элементы моделируемого языка (сущностии связи) моделируются сущностями метаязыка (Node и Edge), эти сущностимогут быть связаны отношениями наследования и «является контейнером для».И сущность, и связь могут иметь свойства, значения для которых можно задаватьпри редактировании модели в редакторе свойств QReal.
Имеется ряд вспомогательных элементов метаязыка, определяющих поведение элементов языкапри взаимодействии с ними пользователя, например, позволяет ли контейнеррасполагать внутри себя элементы произвольным образом, или сам располагаетэлементы подряд друг под другом.
Подробнее об имеющихся элементах см. вприложении B.Особенности языкаМетаязык QReal имеет следующие особенности, важные для создания CASEинструментов промышленного уровня.1. Принцип «Если функциональность не требуется, о ней можно не знать».Для создания языка требуется использовать следующие сущности: «метамодель», «диаграмма», «узел», «связь». Остальные элементы можно добавлятьв метамодель по мере необходимости, генерация редактора возможна безних.1062.
Возможность определения нескольких языков в рамках одной метамодели.3. Возможность задания отношения вложенности между элементами.4. Типизированные порты — они дают возможность различать места на фигуре, к которым могут быть подключены связи, и по-разному обрабатыватьсвязи в зависимости от того, к какому конкретно порту они подключены.5. Отношение раскрытия (или эксплозия) позволяет реализовать иерархическую декомпозицию в редакторе. При задании этого отношения можноуказать, как редактору следует его обрабатывать — следует ли обязательносоздавать целевой элемент при создании элемента-источника, следует липомещать целевой элемент на «пользовательскую палитру». Нужно этодля реализации подпрограмм в тех языках, где есть это понятие (например, QReal:Robots).
Для некоторых языков раскрытие не имеет семантикиподпрограммы (например, вложенные пакеты в UML), поэтому семантикараскрытия и настраивается в метаредакторе.Генерация редакторовСозданную в метаредакторе метамодель можно использовать для того, чтобыполучить редактор, несколькими способами: сгенерировать исходный код редактора непосредственно по метамодели, сгенерировать сначала XML-описание, азатем по XML-описанию исходный код редактора, либо открыть метамодельв интерпретаторе метамоделей и обойтись вовсе без генерации.
Схематическиразные способы представлены на рисунке 4.3.Способ, использующий XML-описание метамодели, концептуально сложнее,чем генерация кода по метамодели напрямую, но он более устойчив к изменениямв метаязыке — XML-описания при необходимости легко поправить вручную,файлы с метамоделью требуют метаредактора версии, которая может их редактировать. Поэтому большинство языков в QReal используют сейчас схему спромежуточным XML-представлением.Структура XML-файла практически полностью соответствует структуре метамодели языка (точнее, визуальный метаязык появился как визуализация существующего XML-языка). Синтаксис языка был впервые предложен в дипломной107Рис. 4.3: Получение редактора по метамодели.работе А.А.
Симоновой в 2007 году, однако претерпел с тех пор ряд значительных изменений. Новые возможности ядра QReal реализуются сначала вXML-языке, а уже затем переносятся в метаязык, и на данный момент XMLязык обладает возможностями, которые в метаязыке пока отсутствуют.
Примертакой возможности — задание групп в палитре. Эта возможность позволяютсобрать близкие по смыслу элементы языка и сворачивать или разворачиватьв палитре группы элементов. Также есть возможность задать одновременноесоздание сразу нескольких элементов, например, чтобы при создании диаграммыповедения робота на неё сразу же добавлялся блок «начало», обязательный длявсех диаграмм.Интерпретатор метамоделей позволяет избежать необходимости генерациикода на C++ и компиляции редактора. Метамодель языка, подготовленная вметаредакторе, загружается в интерпретатор, и он с её помощью эмулируетповедение сгенерированного плагина-редактора. При таком подходе скоростьработы системы несколько меньше, чем в случае скомпилированного редактора(в работе [138] приводятся результаты эксперимента по сравнению скоростейвыполнения типичных операций).
Однако отсутствие необходимости пересобирать редактор после каждого изменения языка значительно снижает времяцикла «разработка-тестирование» для вносимых в язык изменений. Кроме того,интерпретатор делает возможным внесение в метамодель изменений прямо108в процессе работы с редактором языка, поэтому применение такого подходанеобходимо для реализации инструментальной поддержки режима «метамоделирования на лету». На данный момент в QReal применяется и генеративный, иинтерпретативный подходы к созданию редакторов, интерпретатор используетсядля быстрого прототипирования языка, генераторы — для финализации языка исоздания инсталляционных пакетов, поставляемых пользователям.Для того, чтобы гарантировать, что результирующие редакторы ведут себяодинаково для одной метамодели языка вне зависимости от способа полученияредактора, была разработана и включена в процесс сборки тестирующая система,создающая тестовые редакторы для нескольких разных метамоделей всеми тремяспособами и проверяющая, что функции интерфейса редактора во всех трёхслучаях возвращают одинаковый результат.
Метамодели выбраны так, чтобыиспользовать все возможности ядра системы, обеспечивая достаточно высокийуровень тестового покрытия. В качестве входных данных система используетфайл с метамоделью, по метамодели генерируются редакторы либо метамодель загружается в интерпретатор, после чего последовательно вызываютсявсе методы интерфейса редактора на наборе тестовых данных, эмулирующихвзаимодействие ядра QReal с редактором.
Тест считается пройденным, если всеметоды вернули одинаковый результат.4.3.2. Редактор формы фигурРедактор формы фигур предназначен для задания конкретного синтаксисаязыка и представляет собой простой векторный редактор, запускаемый из метаредактора при редактировании свойства «Форма» узла. Использовать существующие графические редакторы оказалось невозможным в связи с тем, чтотребуется задавать не только внешний вид элемента, но и поведение элемента привзаимодействии с ним пользователя — куда можно подключать связи, как должнаизменяться форма элемента при его растягивании или сжатии, где выводитьзначения свойств из репозитория.Редактор позволяет использовать изображения, заранее подготовленные вобычных графических редакторах, в качестве элементов создаваемой формыфигуры, например, так реализованы фигуры блоков в QReal:Robots.109Изображения могут быть дополнены точечными и линейными портами.Порт — место на фигуре, к которому можно подключить связь, точечный портотличается от линейного тем, что к линейному порту связь может подсоединятьсяв любом месте линии.