Санкт-Петербургский государственный университет
Опубликован: 04.12.2007 | Доступ: свободный | Студентов: 2431 / 255 | Оценка: 4.30 / 3.65 | Длительность: 16:28:00
ISBN: 978-5-94774-823-9
Лекция 13:

Знакомство с DSM-платформой Microsoft DSL TOOLS

< Лекция 12 || Лекция 13: 123
Аннотация: В этой лекции рассказывается, как создавать предметно-ориентированные языки (DSLs) с помощью продукта Microsoft DSL Tools и как на основе этих спецификаций разрабатывать свой собственный графический редактор.

Данная лекция предполагает, что вы готовы попробовать поработать с пакетом Microsoft DSL Tools самостоятельно. Для этого у вас должен быть некоторый опыт работы со средой разработки Microsoft Visual Studio, а также вы должны быть знакомы с языком C#. Впрочем, эта лекция может использоваться и для получения общего представления о том, что такое DSL Tools, но тогда вам придется смириться с тем, что часть материала будет непонятна.

Общие слова о том, как работать с пакетом

Пакет DSL Tools является одной из DSM-платформ и позволяет создавать собственные языки визуального моделирования, а также быстро, затрачивая небольшие усилия, реализовывать для них программный инструментарий - графический редактор с рядом дополнительных возможностей. Причем, набив руку, простые редакторы можно создавать прямо за несколько часов.

Этот пакет входит в состав Visual Studio 2005 SDK и может быть бесплатно взят с сайта компании Microsoft (http://www.microsoft.com/downloads). Он устанавливается в виде надстройки к Visual Studio и используется исключительно как составная часть этой среды разработки. После его инсталляции в Visual Studio появляется возможность создать специальный solution под названием Other Project Types\Domain-Specific Language Designer, и после его создания пакет DSL Tools становится доступным (в рамках данного solution).

В этом solution автоматически создаются два проекта - Dsl и DslPackage. Первый предназначен, главным образом, для хранения различных артефактов метамодели создаваемого DSL, второй хранит настройки пользовательского интерфейса целевого графического редактора. Оба могут содержать вставки на языке C#, с помощью которых базовая функциональность нового редактора может быть расширена.

Спецификация редактора подается на вход генератору DSL Tools, и по ней он создает уже обычный solution в Visual Studio. После его компиляции получается готовый редактор, который тут же, из Studio, можно запустить. Далее этот редактор появляется в списке инструментов, как отдельный Item, и его можно "прицепить" к вновь создаваемому в Visual Studio solution, в разработке которого желательно использовать этот новый редактор. Вне Visual Studio этот редактор использовать нельзя.

Метамодель, модель, сгенерированный код, откомпилированный код…

На практике, создавая графический редактор с использованием DSL Tools, особенно в начале, постоянно путаешься, где модель, а где метамодель, что генерируется, а что компилируется, где какие "исходники" и т. д. Чтобы прояснить общую картину и сделать ее более "операбельной", рассмотрим рис. 13.1, рис. 13.2, рис. 13.3, рис. 13.4, рис. 13.5.

Общая схема разработки графического редактора

Рис. 13.1. Общая схема разработки графического редактора

На рис. 13.1 показано, что действия, связанные с разработкой и использованием нового редактора, делятся на три главных шага.

  1. Создание метамодели нового DSL. Этот шаг подробно расписан на рис. 13.2.
  2. Реализация по этой метамодели нового редактора. Этот шаг подробно расписан на рис. 13.3 и рис. 13.4.
  3. Использование созданного редактора. Этот шаг подробно расписан на рис. 13.5.

Итак, создание метамодели нового языка происходит в два этапа. Первый - разработка концептуальной метамодели с помощью диаграмм классов UML. При этом определяются основные концепции языка, они обсуждаются с разными людьми, а также корректируются. Этот начально-публичный этап проекта по разработке нового редактора очень важен: нужно удачно "поймать" предметную область в сети нового формализма и не забыть важные детали. От этого во многом будет зависеть успех всего проекта. Возможность обсудить найденные абстракции с различными экспертами при этом крайне важна.

Условное предложение в нотации языка VIPR

Рис. 13.2. Условное предложение в нотации языка VIPR

Диаграммы классов UML для этих целей хорошо подходят, так как многим знакомы и не содержат деталей реализации, подобно диаграммам DSL Tools. Здесь можно использовать Microsoft Visio/UML Addon или любой другой UML-инструмент. Графический редактор DSL Tools не позволяет создавать компактные и удобные для обсуждения диаграммы: нет возможности задавать имена классов по-русски, все связи обозначаются специальными классами, что сильно увеличивает объем спецификации и т. д. На рис. 13.6, рис. 13.7, рис. 13.8 представлены спецификации языка SCL, выполненные в DSL Tools. Очевидно, что они более громоздки, чем метамодель с рис. 12.3.

Далее, как следует из рис. 13.2, концептуальная метамодель переносится в DSL Tools. В итоге получается метамодель нового языка, выполненная уже в DSL Tools.

Разработка редактора

Рис. 13.3. Разработка редактора

После этого, как показано на рис. 13.3, метамодель дополняется различными свойствами, определяющими особенности нашего редактора. Задается также пользовательский интерфейс - палитра с графическими символами, всплывающие меню для элементов на диаграммах нового редактора, диалоги свойств и пр. При этом используются настройки DSL Tools, а также может создаваться свой собственный код на C#.

С помощью вставок на языке C# можно определить дополнительные свойства нового редактора в тех случаях, когда не хватает стандартных возможностей DSL Tools. Например, можно самостоятельно реализовать графический символ "ромб", который отсутствует в стандартной палитре DSL Tools, или задать возможность с помощью одной и той же связи соединять разные элементы нотации. Можно задать собственные правила валидации новых визуальных моделей, которые будут создаваться в новом редакторе. Архитектура DSL Tools устроена так, что в большинстве случаев новый код можно реализовать, аккуратно переопределив одни-два метода у автоматически генерируемых классов.

В рамках DSL Tools можно, по специальным правилам, написать генерационный модуль, который будет выполнять генерацию произвольного текста по моделям, созданным в новом редакторе. Для этого нужно описать шаблон генерируемого файла: там, где нужно, вставить статический текст или, если выводимая информация зависит от свойств модели, сделать на языке C# вставку, которая извлекает нужную информацию из модели, надлежащим образом ее форматирует и выводит в это место файла.

На рис. 13.4 показаны последующие действия, которые нужно выполнить после того, как определена метамодель нового языка и все дополнительные свойства нового редактора.

Валидация, генерация, компиляция

Рис. 13.4. Валидация, генерация, компиляция

Итак, первый шаг - это валидация, что означает проверку на правильность и согласованность между собой всех элементов метамодели и их атрибутов. Такая поверка важна, поскольку если при компиляции возникнут ошибки, вызванные нашими нестыкующимися друг с другом действиями в DSL Tools, то понять, что произошло, в каком месте мы ошиблись, может оказаться непросто. Кроме того, часть ошибок может не "пойматься" при компиляции и "перекочевать" в откомпилированный код. Тогда наш целевой графический редактор будет работать неправильно или странно - и непонятно почему!

После успешной валидации происходит генерация кода целевого редактора в тексты на языке C#. После компиляции этого кода средствами Visual Studio получается целевой редактор, с палитрой графических элементов, браузером модели, редактором диаграмм, валидатором, генератором кода и пр. С помощью этого редактора пользователь может создавать свои собственные модели и диаграммы, валидировать их и генерировать по ним целевой код в рамках своего прикладного проекта, как показано на

На рис. 13.5.

Использование нового редактора

Рис. 13.5. Использование нового редактора
< Лекция 12 || Лекция 13: 123
Анна Митюрёва
Анна Митюрёва

http://www.intuit.ru/studies/courses/1041/218/info

С мобильного приложения доступ есть, а через сайт не отображается. Печально =(

Светлана Ведяева
Светлана Ведяева
Россия, Саратов
Артем Барышев
Артем Барышев
Россия, Иваново