Диссертация (1148239), страница 12
Текст из файла (страница 12)
Даннаяфункциональность может понадобиться, например, при визуализации различныхформальных алгоритмов на графах.Заданная семантика визуального языка может быть предназначена как для69интерпретации и отладки, так и для генерации полноценного кода по моделям.Таким образом, в зависимости от вида семантики в настройках модуля заданиясемантики нужно указывать разное время задержки между шагами исполнения, т.е.применения правил к модели.Рассмотрим пример одного из правил исполнимой семантики языка блок-схем,отображенного на рис. 12.Рисунок 127.
Пример правила преобразования графа моделиДанное правило позволяет начать интерпретацию модели и состоит изследующих элементов:●элемента SemanticsRule с идентификатором “Start”, являющегося контейнеромдля всех остальных элементов правила;●элемента InitialNode языка блок-схем, отображаемого на диаграмме в видечерного круга;●элемента Wildcard, отображаемого в виде звезды;●связи ControlFlow языка блок-схем, соединяющей элементы InitialNode иWildcard;●двух элементов ControlFlowMark, отображаемых незакрашенными кругамименьшего размера;●двух связей ControlFlowLocation, соединяющих элементы ControlFlowMark сэлементами InitialNode и Wildcard.Данное правило означает следующее — необходимо найти в графе исполняемоймодели элемент типа InitialNode (начальный узел блок-схемы), который в настоящее70является текущим элементом исполнения (на это указывает связь этого элемента сControlFlowMark), и передать исполнение элементу модели, который соединен сInitialNode связью ControlFlow.
Последнее осуществляется за счёт того, что элементControlFlowMark,ассоциированныйсInitialNodeбудетудалён(атрибут“@deleted@”), зато будет создан новый ControlFlowMark, и он будет ассоциирован сэлементом, связанным с InitialNode. При этом тип элемента, которому передастсяисполнение, в данном случае совершенно не важен, поэтому используется элементWildcard, который при поиске шаблона в модели будет сопоставлен с элементомлюбого типа.4.3.3. Реакция на применение правилаПомимографическойсоставляющей,которуюсоставляютправилапреобразования графов, в семантике визуального языка в QReal также присутствуети текстовая часть в виде начальной инициализации интерпретации, ограничений иреакций на применение правил.
Рассмотрим каждую из них более подробно.На каждое исполнение модели создаётся новый экземпляр интерпретаторавыбранного текстового языка6, использующегося для задания поведения элементов,разного рода ограничений на элементы и реакций на применение правил. Такимобразом, определённые в этом интерпретаторе сущности (переменные, функции ит.д.) доступны в любой части текстовой составляющей семантики визуальногоязыка. Задать начальное состояние интерпретатора (начальные значения общихпеременных, общие функции и т.п.) перед непосредственным исполнением моделиможно при помощи инициализации интерпретации. Это код на интерпретируемомязыке, который записывается в элементе Initialization и гарантированно будетисполнен до применения первого подходящего правила преобразования графов.6В настоящее время в качестве текстового языка может быть использован Python или некий собственный язык,используемый в редакторе блок-схем, созданном на базе QReal (см.
раздел с описанием блок-схем). Также ведетсяработа над реализацией возможности использования языка QtScript, входящего в состав инструментария Qt.71Ограничения на применение правил нужны для задания более сложных условий,чем соответствие типу или равенство определенному значению заданного атрибута.Такие ограничения представляют собой функцию на выбранном интерпретируемомязыке, возвращающую значение логического типа и имеющую доступ к значенияматрибутов элементов правила (а также к прочим сущностям, определённым приинициализации или в ходе интерпретации при выполнении других правил). Еслиограничение на соответствующем правилу участке модели возвращает ложноезначение, то это правило не может быть применено для данного подграфа.Например, в случае моделей на языке блок-схем для создания правила переходапотока исполнения с условного элемента далее по одной из веток, соответствующейистине, в ограничение на применение правила можно поместить значение типасвязи, которая из него выходит и условие равенства истине, записанного в атрибутесоответствующего элемента.Для исполнения поведения элементов правила и организации их взаимодействиямежду собой, а также организации взаимодействия правил между собой быловведено понятие реакции на применение правила.
Это процедура на выбранномтекстовом языке, которая имеет доступ к значениям атрибутов элементов правилакак на чтение, так и на запись. Как и ограничения, реакция может использовать ужеопределённые (например, при инициализации) объекты и любой другой функционал,доступный данному языку. Исполняется же этот код сразу после непосредственногосоздания новых и до удаления старых элементов согласно правилу.4.3.4.
Модуль работы с графамиВ предложенном подходе модель на визуальном языке рассматривается кактипизированный ориентированный мультиграф с атрибутами и метками на узлах ирёбрах. Данный модуль отвечает за поиск указанных подграфов в исходной модели,а также за корректное применение самих преобразований, т.е. за создание, удалениеи замену элементов согласно правилу.
Основными подзадачами, которые были72решены при реализации данного модуля, являются создание алгоритма поискаподграфа в графе и корректное размещение новых элементов в модели. Разберем ихподробнее.4.3.4.1. Поиск подграфа моделиСуществует ряд открытых программных средств, предназначенных дляприменения преобразований графов и автоматической верификации моделейотносительно итоговой системы преобразований. Среди них GROOVE [12, 137],AGG [155], GenGED [11, 65] и некоторые другие (см., например, обзор подобныхсредств [46]).
Однако, интеграция их на уровне исходного кода в платформу QRealвидится проблематичной из-за несоответствия языков реализации, а использованиеих в качестве стороннего инструмента сделает платформу QReal тяжеловесной именее однородной. Кроме того, большинство средств нацелены на специалистов вобластипреобразованияграфовиплохоподходяткиспользованиюнепрофессионалами.
В результате было принято решение сделать собственнуюреализацию на основе существующих алгоритмов.В итоге для организации поиска заданного шаблона в модели был предложенитеративно-рекурсивный алгоритм, накопление результата в котором будетпроисходить постепенно. Данный алгоритм находит все вхождения заданногошаблона в модели, промежуточным результатом работы будет одно найденноевхождение. Более подробное описание алгоритма см. в приложении C.4.3.4.2. Изменение модели согласно правилуВторойважнойподзадачейвмодулеработысграфамиявляетсянепосредственное изменение модели согласно правилу после нахождения местаприменения этого правила.
Оно осуществляется при помощи стандартного APIрепозитория, предоставляемого QReal, но для корректного его исполнениянеобходимо сделать еще несколько дополнительных действий.73При создании и замене элементов необходимо, во-первых, установитьсозданному элементу значения атрибутов, равные значениям соответствующихэлементов из правила. Также этот вновь созданный элемент нужно добавить всоответствие элементов правила элементам модели, чтобы его можно былоиспользовать при интерпретации реакции на применение правила. Во-вторых, призамене элемента нужно правильно повторно подсоединить все связи, одним изконцов которых был заменяемый элемент.Также возникает вопрос, нужно ли удалять все связи элемента с другими при егоудалении с диаграммы.
На данный момент такие связи автоматически не удаляются,в идеале же это можно сделать настраиваемым.Самой главной сложностью корректного преобразования модели согласноправилу является автоматическая раскладка элементов на диаграмме после создания,замены и удаления элементов. Это происходит из-за того, что новые элементы недолжны перекрывать старые, т.к. от этого теряется информативность и читаемостьдиаграммы. Удаление и замену элементов можно производить практически всегдабез перераскладки элементов (в этом случае добавленный элемент имеет те жекоординаты, что и заменяемый). Создание же нового элемента требует расчёта егоместа на диаграмме.
В текущем решении новые элементы либо просторасполагаются правее всех остальных на диаграмме, либо после добавленияэлементаосуществляетсяавтоматическоеперераскладываниеэлементовнадиаграмме (позиции элементов рассчитываются с помощью утилиты dot израспространенного пакета визуализации графов graphviz [10]).4.4.
Архитектура реализованного решенияПредложенный способ задания семантики визуальных языков и визуальнойинтерпретации моделей был реализован в рамках проекта QReal в виде отдельногоподключаемого модуля, а части, отвечающие за поиск подграфов в модели и за74добавление различных новых атрибутов и элементов в метамодель, были вынесены вмодуль qrutils (см. раздел 5.3), чтобы другие компоненты системы (например,модуль задания и осуществления рефакториингов моделей, см. раздел 5.4.7) принеобходимости также могли ими воспользоваться.Для корректной работы реализованного визуального интерпретатора взапущеннойсистемедолженприсутствоватьмодульметаредактора, чтобыобеспечить возможность сборки сгенерированного по визуальному языку редакторасемантики. Также данный плагин зависит от сторонней свободной библиотекиQScintilla [1], предоставляющей удобный текстовый редактор с автодополнением иподсветкойсинтаксисаииспользующейсяприработестекстовымиинтерпретируемыми языками в реакции на применение правил, ограничениями и т.п.Наличие в операционной системе интерпретатора языка Python не обязательно, ножелательно, т.к.
с его помощью можно задавать сложные ограничения и реакции наприменение правил.4.5. ЗаключениеВ данной главе рассмотрен вопрос использования аппарата операционнойсемантики для создания инструментов интерпретации и отладки поведенческихвизуальных языков. Выбран подкласс языков, семантика которых обычноосновывается на понятии токена исполнения и которые формализуется с помощьюсетей Петри (например, диаграммы деятельности UML 2 или язык блок-схем), дляних реализован инструментарий, позволяющий интерпретировать формальнозаданную семантику языка, тем самым выполняя определённые полезные действияпри обходе диаграммы (например, исполнение кода на некотором языке илигенерацию текста).