Данная лекция предполагает, что вы готовы попробовать поработать с пакетом Microsoft DSL Tools самостоятельно. Для этого у вас должен быть некоторый опыт работы со средой разработки Microsoft Visual Studio, а также вы должны быть знакомы с языком C#. Впрочем, эта лекция может использоваться и для получения общего представления о том, что такое DSL Tools, но тогда вам придется смириться с тем, что часть материала будет непонятна.
Пакет DSL Tools является одной из
Этот пакет входит в состав Visual Studio 2005 SDK и может быть бесплатно взят с сайта компании Microsoft (http://www.microsoft.com/downloads). Он устанавливается в виде надстройки к Visual Studio и используется исключительно как составная часть этой среды разработки. После его инсталляции в Visual Studio появляется возможность создать специальный solution под названием Other Project Types\Domain-Specific
В этом solution автоматически создаются два проекта - Dsl и DslPackage. Первый предназначен, главным образом, для хранения различных артефактов C#, с помощью которых базовая функциональность нового редактора может быть расширена.
Спецификация редактора подается на вход генератору DSL Tools, и по ней он создает уже обычный solution в Visual Studio. После его компиляции получается готовый редактор, который тут же, из Studio, можно запустить. Далее этот редактор появляется в списке инструментов, как отдельный Item, и его можно "прицепить" к вновь создаваемому в Visual Studio solution, в разработке которого желательно использовать этот новый редактор. Вне Visual Studio этот редактор использовать нельзя.
На практике, создавая графический редактор с использованием DSL Tools, особенно в начале, постоянно путаешься, где модель, а где
(рис 13.1) Общая схема разработки графического редактора
На рис. 13.1 показано, что действия, связанные с разработкой и использованием нового редактора, делятся на три главных шага.
DSL. Этот шаг подробно расписан на рис. 13.2.Итак, создание UML. При этом определяются основные концепции языка, они обсуждаются с разными людьми, а также корректируются. Этот начально-публичный этап проекта по разработке нового редактора очень важен: нужно удачно "поймать" предметную область в сети нового формализма и не забыть важные детали. От этого во многом будет зависеть успех всего проекта. Возможность обсудить найденные абстракции с различными экспертами при этом крайне важна.
(рис 13.2) Условное предложение в нотации языка VIPR
Диаграммы классов UML для этих целей хорошо подходят, так как многим знакомы и не содержат деталей реализации, подобно диаграммам DSL Tools. Здесь можно использовать Microsoft Visio/UML Addon или любой другой UML-инструмент. Графический редактор DSL Tools не позволяет создавать компактные и удобные для обсуждения диаграммы: нет возможности задавать имена классов по-русски, все связи обозначаются специальными классами, что сильно увеличивает объем спецификации и т. д. На рис. 13.6, рис. 13.7, рис. 13.8 представлены спецификации языка SCL, выполненные в DSL Tools. Очевидно, что они более громоздки, чем
Далее, как следует из рис. 13.2, концептуальная
(рис 13.3) Разработка редактора
После этого, как показано на рис. 13.3, C#.
С помощью вставок на языке C# можно определить дополнительные свойства нового редактора в тех случаях, когда не хватает стандартных возможностей DSL Tools. Например, можно самостоятельно реализовать графический символ "ромб", который отсутствует в стандартной палитре DSL Tools, или задать возможность с помощью одной и той же связи соединять разные элементы нотации. Можно задать собственные правила валидации новых визуальных моделей, которые будут создаваться в новом редакторе. Архитектура DSL Tools устроена так, что в большинстве случаев новый код можно реализовать, аккуратно переопределив одни-два метода у автоматически генерируемых классов.
В рамках DSL Tools можно, по специальным правилам, написать генерационный модуль, который будет выполнять генерацию произвольного текста по моделям, созданным в новом редакторе. Для этого нужно описать шаблон генерируемого файла: там, где нужно, вставить статический текст или, если выводимая информация зависит от свойств модели, сделать на языке C# вставку, которая извлекает нужную информацию из модели, надлежащим образом ее форматирует и выводит в это место файла.
На рис. 13.4 показаны последующие действия, которые нужно выполнить после того, как определена
(рис 13.4) Валидация, генерация, компиляция
Итак, первый шаг - это валидация, что означает проверку на правильность и согласованность между собой всех элементов
После успешной валидации происходит генерация кода целевого редактора в тексты на языке C#. После компиляции этого кода средствами Visual Studio получается целевой редактор, с палитрой графических элементов, браузером модели, редактором диаграмм, валидатором, генератором кода и пр. С помощью этого редактора пользователь может создавать свои собственные модели и диаграммы, валидировать их и генерировать по ним целевой код в рамках своего прикладного проекта, как показано на
На рис. 13.5.
(рис 13.5) Использование нового редактора
Рассмотрим детально процесс создания
(рис 13.6) Пример метамодели (часть I)
(рис 13.7) Пример метамодели (часть II)
(рис 13.8) Пример метамодели (часть III)
Рисунки 13.6, 13.7, 13.8 представляют одну диаграмму в DSL-дизайнере, разрезанную на три части. Можно заметить, что эта диаграмма разделена на две горизонтальные области - Classes and Relations и Diagram Elements. Абстрактный синтаксис языка определяется в первой секции, а конкретный - во второй. Класс из первой секции соединяется линией-отношением с классом из второй секции, если определяет конструкцию, которая должна изображаться на диаграммах будущего графического редактора.
Эта SCL в предыдущей лекции. Во-первых, в прежней UML 2.0, а в DSL-дизайнере реализована иная нотация.
Теперь будут рассмотрены основные конструкции графического языка DSL дизайнера.
Root ). Все остальные классы располагаются в древообразной иерархии, соединяясь с предыдущим уровнем агрегированием,
UML. Ассоциация, как и другие отношения между доменными классами, изображается на диаграмме специальным прямоугольником и является, по сути, тоже классом. Это сделано для того, чтобы можно было назначать различные свойства ассоциациям, в том числе определять доменные атрибуты для ассоциаций типа "многие-ко-многим".
1*:1..1 - каждый объект класса Element принадлежит строго одному объекту класса Root, а у одного объекта класса Root может быть много объектов класса Element.
UML.
Теперь поговорим об элементах, с помощью которых в DSL-дизайнере задается конкретный синтаксис языка. Они делятся на две группы - фигуры (shapes) и линии (connectors). Предлагаются следующие виды фигур.
Несколько слов о том, как соединяются конструкции абстрактного и конкретного синтаксиса. Для этого в DSL-дизайнере предусмотрена специальная конструкция -
Для полноты картины далее перечислены остальные элементы нотации DSL-дизайнера:
DSL -дизайнера;Classes and Relationships и Diagram Elements на диаграммах DSL-дизайнера, а также задать, какие графические конструкции в какой секции будут располагаться на диаграммах будущего графического редактора;UML 2.0 ); на рис. 13.9 представлен фрагмент
(рис 13.9) Метамодель: определение порта
(рис 13.10) Изображение порта в целевом редакторе, на диаграмме пользователя
Все возможные конструкции, доступные в DSL-дизайнере, показаны на рис. 13.11, слева от рабочей области, в виде списка.
(рис 13.11) Палитра DSL-дизайнера
Обсудим теперь свойства элементов языка DSL-дизайнера. Для удобства использования они собраны в две основные DSL Tools. Мы лишь объясняем основные концепции, а для практического использования DSL Tools читателю придется еще самостоятельно потрудиться.
Определяя в
Каждое такое свойство имеет следующие группы атрибутов:
Code - характеристики данного свойства как свойства C# -класса; дело в том, что созданный в DSL-дизайнере класс будет превращен при генерации в C# -класс, а его свойства - в C# -свойства этого класса; группа атрибутов code определяет различные C# -характеристики данного свойства, например, его видимость ( public protected и т. д.);Definition - определение таких характеристик Default Value ), быть именем класса или нет ( Is Element Name ) - если да, тогда генератор обеспечит уникальность имен по умолчанию на диаграммах будущего графического редактора; еще один атрибут из этой группы - Kind, который может принимать значения normal или calculated ; в последнем случае у нас имеется вычисляемое свойство, которое задается некоторым кодом на языке C#, прилагаемом к Рассмотрим пример calcutated-свойства. Одно такое свойство присутствует на рис. 13.8 - это свойство класса Transition под названием ComplexTransition. Оно задает текст на линии, обозначающей переход между двумя состояниями. Этот текст, во-первых, "собирается" из нескольких C#, который определяет правило вычисления и форматирования этого свойства:
public partial class Transition
{
public string GetComplexCaptionValue()
{
string result = string.Empty;
result += string.Format(@"{0}/{1};{2}{3}",
this.InvokedBy == null ? string.Empty : this.InvokedBy.Name,
this.Signal == null ? string.Empty : this.Signal.Name,
Environment.NewLine,
this.Method == null? string.Empty : this.Method.Name);
return result;
}
}
Здесь используется механизм частичных классов языка C#, с помощью которого доопределяется класс Transition, автоматически генерируемый по классу Transition. Данный текст записывается в отдельный файл, который помещается в проекте Dsl.
Свойства такого типа могут встречаться у графических классов DSL-Collapse, который позволяет отображать такие секции на фигуре в двух режимах - в "схлопнутом" и развернутом виде). На рис. 13.7 у графического класса StateShape есть декоратор StateName, определяющий способ изображения имен состояний, которые будут создаваться в целевом графическом редакторе.
text );icon );Expand Collapse ).Кроме того, свойства декоратора отличаются для фигуры и
Вот основные группы атрибутов декоратора:
Appearance - настройка шрифтов изображения;Definition - имя в коде и в Layout - задание расположения текста;Documentation - примечания Resources - настройка отображаемого текста.На рис. 13.11, слева, можно увидеть палитру ( toolbox ), в которой перечислены все конструкции нового языка, которые можно создавать на диаграммах. При активации элемента Edit/Toolbox в браузере вызывается инструмент для задания палитры: создаются ее элементы, которые связываются с соответствующими классами
На рис. 13.12 показан внешний вид целевого редактора, сгенерированный для языка SCL. Сравните это с рис. 13.7 предыдущей лекции.
(рис 13.12) SCL-редактор
DSL Tools.DSL Tools к работе. Проделайте эти действия.DSL Tools готов к работе. Опишите ваши начальные действия, вплоть до открытия рабочего окошка DSL Designer. Проделайте эти действия.DSL с помощью UML, вне DSL Tools, и только после ее завершения перенести ее DSL Tools?DSL Tools.DSL Tools DSL Tools для создания DSL Tools реализуется связь доменных графических классов?DSL Tools. Попробуйте написать, вставить и протестировать (в составе итогового редактора) собственный "ручной" код.DSL Tools используется валидация?DSL Tools в промышленном проекте. Постарайтесь определить минимальный нижний порог сочетания "объем проекта/компетентность специалистов" для того, чтобы пакет DSL Tools "выстрелил".DSL Tools язык UML. Возможно ли будет это сделать? Что облегчит, а что затруднит вашу работу?Данная лекция предполагает, что вы готовы попробовать поработать с пакетом Microsoft DSL Tools самостоятельно. Для этого у вас должен быть некоторый опыт работы со средой разработки Microsoft Visual Studio, а также вы должны быть знакомы с языком C#. Впрочем, эта лекция может использоваться и для получения общего представления о том, что такое DSL Tools, но тогда вам придется смириться с тем, что часть материала будет непонятна.
Пакет DSL Tools является одной из
Этот пакет входит в состав Visual Studio 2005 SDK и может быть бесплатно взят с сайта компании Microsoft (http://www.microsoft.com/downloads). Он устанавливается в виде надстройки к Visual Studio и используется исключительно как составная часть этой среды разработки. После его инсталляции в Visual Studio появляется возможность создать специальный solution под названием Other Project Types\Domain-Specific
В этом solution автоматически создаются два проекта - Dsl и DslPackage. Первый предназначен, главным образом, для хранения различных артефактов C#, с помощью которых базовая функциональность нового редактора может быть расширена.
Спецификация редактора подается на вход генератору DSL Tools, и по ней он создает уже обычный solution в Visual Studio. После его компиляции получается готовый редактор, который тут же, из Studio, можно запустить. Далее этот редактор появляется в списке инструментов, как отдельный Item, и его можно "прицепить" к вновь создаваемому в Visual Studio solution, в разработке которого желательно использовать этот новый редактор. Вне Visual Studio этот редактор использовать нельзя.
На практике, создавая графический редактор с использованием DSL Tools, особенно в начале, постоянно путаешься, где модель, а где
(рис 13.1) Общая схема разработки графического редактора
На рис. 13.1 показано, что действия, связанные с разработкой и использованием нового редактора, делятся на три главных шага.
DSL. Этот шаг подробно расписан на рис. 13.2.Итак, создание UML. При этом определяются основные концепции языка, они обсуждаются с разными людьми, а также корректируются. Этот начально-публичный этап проекта по разработке нового редактора очень важен: нужно удачно "поймать" предметную область в сети нового формализма и не забыть важные детали. От этого во многом будет зависеть успех всего проекта. Возможность обсудить найденные абстракции с различными экспертами при этом крайне важна.
(рис 13.2) Условное предложение в нотации языка VIPR
Диаграммы классов UML для этих целей хорошо подходят, так как многим знакомы и не содержат деталей реализации, подобно диаграммам DSL Tools. Здесь можно использовать Microsoft Visio/UML Addon или любой другой UML-инструмент. Графический редактор DSL Tools не позволяет создавать компактные и удобные для обсуждения диаграммы: нет возможности задавать имена классов по-русски, все связи обозначаются специальными классами, что сильно увеличивает объем спецификации и т. д. На рис. 13.6, рис. 13.7, рис. 13.8 представлены спецификации языка SCL, выполненные в DSL Tools. Очевидно, что они более громоздки, чем
Далее, как следует из рис. 13.2, концептуальная
(рис 13.3) Разработка редактора
После этого, как показано на рис. 13.3, C#.
С помощью вставок на языке C# можно определить дополнительные свойства нового редактора в тех случаях, когда не хватает стандартных возможностей DSL Tools. Например, можно самостоятельно реализовать графический символ "ромб", который отсутствует в стандартной палитре DSL Tools, или задать возможность с помощью одной и той же связи соединять разные элементы нотации. Можно задать собственные правила валидации новых визуальных моделей, которые будут создаваться в новом редакторе. Архитектура DSL Tools устроена так, что в большинстве случаев новый код можно реализовать, аккуратно переопределив одни-два метода у автоматически генерируемых классов.
В рамках DSL Tools можно, по специальным правилам, написать генерационный модуль, который будет выполнять генерацию произвольного текста по моделям, созданным в новом редакторе. Для этого нужно описать шаблон генерируемого файла: там, где нужно, вставить статический текст или, если выводимая информация зависит от свойств модели, сделать на языке C# вставку, которая извлекает нужную информацию из модели, надлежащим образом ее форматирует и выводит в это место файла.
На рис. 13.4 показаны последующие действия, которые нужно выполнить после того, как определена
(рис 13.4) Валидация, генерация, компиляция
Итак, первый шаг - это валидация, что означает проверку на правильность и согласованность между собой всех элементов
После успешной валидации происходит генерация кода целевого редактора в тексты на языке C#. После компиляции этого кода средствами Visual Studio получается целевой редактор, с палитрой графических элементов, браузером модели, редактором диаграмм, валидатором, генератором кода и пр. С помощью этого редактора пользователь может создавать свои собственные модели и диаграммы, валидировать их и генерировать по ним целевой код в рамках своего прикладного проекта, как показано на
На рис. 13.5.
(рис 13.5) Использование нового редактора
Рассмотрим детально процесс создания
(рис 13.6) Пример метамодели (часть I)
(рис 13.7) Пример метамодели (часть II)
(рис 13.8) Пример метамодели (часть III)
Рисунки 13.6, 13.7, 13.8 представляют одну диаграмму в DSL-дизайнере, разрезанную на три части. Можно заметить, что эта диаграмма разделена на две горизонтальные области - Classes and Relations и Diagram Elements. Абстрактный синтаксис языка определяется в первой секции, а конкретный - во второй. Класс из первой секции соединяется линией-отношением с классом из второй секции, если определяет конструкцию, которая должна изображаться на диаграммах будущего графического редактора.
Эта SCL в предыдущей лекции. Во-первых, в прежней UML 2.0, а в DSL-дизайнере реализована иная нотация.
Теперь будут рассмотрены основные конструкции графического языка DSL дизайнера.
Root ). Все остальные классы располагаются в древообразной иерархии, соединяясь с предыдущим уровнем агрегированием,
UML. Ассоциация, как и другие отношения между доменными классами, изображается на диаграмме специальным прямоугольником и является, по сути, тоже классом. Это сделано для того, чтобы можно было назначать различные свойства ассоциациям, в том числе определять доменные атрибуты для ассоциаций типа "многие-ко-многим".
1*:1..1 - каждый объект класса Element принадлежит строго одному объекту класса Root, а у одного объекта класса Root может быть много объектов класса Element.
UML.
Теперь поговорим об элементах, с помощью которых в DSL-дизайнере задается конкретный синтаксис языка. Они делятся на две группы - фигуры (shapes) и линии (connectors). Предлагаются следующие виды фигур.
Несколько слов о том, как соединяются конструкции абстрактного и конкретного синтаксиса. Для этого в DSL-дизайнере предусмотрена специальная конструкция -
Для полноты картины далее перечислены остальные элементы нотации DSL-дизайнера:
DSL -дизайнера;Classes and Relationships и Diagram Elements на диаграммах DSL-дизайнера, а также задать, какие графические конструкции в какой секции будут располагаться на диаграммах будущего графического редактора;UML 2.0 ); на рис. 13.9 представлен фрагмент
(рис 13.9) Метамодель: определение порта
(рис 13.10) Изображение порта в целевом редакторе, на диаграмме пользователя
Все возможные конструкции, доступные в DSL-дизайнере, показаны на рис. 13.11, слева от рабочей области, в виде списка.
(рис 13.11) Палитра DSL-дизайнера
Обсудим теперь свойства элементов языка DSL-дизайнера. Для удобства использования они собраны в две основные DSL Tools. Мы лишь объясняем основные концепции, а для практического использования DSL Tools читателю придется еще самостоятельно потрудиться.
Определяя в
Каждое такое свойство имеет следующие группы атрибутов:
Code - характеристики данного свойства как свойства C# -класса; дело в том, что созданный в DSL-дизайнере класс будет превращен при генерации в C# -класс, а его свойства - в C# -свойства этого класса; группа атрибутов code определяет различные C# -характеристики данного свойства, например, его видимость ( public protected и т. д.);Definition - определение таких характеристик Default Value ), быть именем класса или нет ( Is Element Name ) - если да, тогда генератор обеспечит уникальность имен по умолчанию на диаграммах будущего графического редактора; еще один атрибут из этой группы - Kind, который может принимать значения normal или calculated ; в последнем случае у нас имеется вычисляемое свойство, которое задается некоторым кодом на языке C#, прилагаемом к Рассмотрим пример calcutated-свойства. Одно такое свойство присутствует на рис. 13.8 - это свойство класса Transition под названием ComplexTransition. Оно задает текст на линии, обозначающей переход между двумя состояниями. Этот текст, во-первых, "собирается" из нескольких C#, который определяет правило вычисления и форматирования этого свойства:
public partial class Transition
{
public string GetComplexCaptionValue()
{
string result = string.Empty;
result += string.Format(@"{0}/{1};{2}{3}",
this.InvokedBy == null ? string.Empty : this.InvokedBy.Name,
this.Signal == null ? string.Empty : this.Signal.Name,
Environment.NewLine,
this.Method == null? string.Empty : this.Method.Name);
return result;
}
}
Здесь используется механизм частичных классов языка C#, с помощью которого доопределяется класс Transition, автоматически генерируемый по классу Transition. Данный текст записывается в отдельный файл, который помещается в проекте Dsl.
Свойства такого типа могут встречаться у графических классов DSL-Collapse, который позволяет отображать такие секции на фигуре в двух режимах - в "схлопнутом" и развернутом виде). На рис. 13.7 у графического класса StateShape есть декоратор StateName, определяющий способ изображения имен состояний, которые будут создаваться в целевом графическом редакторе.
text );icon );Expand Collapse ).Кроме того, свойства декоратора отличаются для фигуры и
Вот основные группы атрибутов декоратора:
Appearance - настройка шрифтов изображения;Definition - имя в коде и в Layout - задание расположения текста;Documentation - примечания Resources - настройка отображаемого текста.На рис. 13.11, слева, можно увидеть палитру ( toolbox ), в которой перечислены все конструкции нового языка, которые можно создавать на диаграммах. При активации элемента Edit/Toolbox в браузере вызывается инструмент для задания палитры: создаются ее элементы, которые связываются с соответствующими классами
На рис. 13.12 показан внешний вид целевого редактора, сгенерированный для языка SCL. Сравните это с рис. 13.7 предыдущей лекции.
(рис 13.12) SCL-редактор
DSL Tools.DSL Tools к работе. Проделайте эти действия.DSL Tools готов к работе. Опишите ваши начальные действия, вплоть до открытия рабочего окошка DSL Designer. Проделайте эти действия.DSL с помощью UML, вне DSL Tools, и только после ее завершения перенести ее DSL Tools?DSL Tools.DSL Tools DSL Tools для создания DSL Tools реализуется связь доменных графических классов?DSL Tools. Попробуйте написать, вставить и протестировать (в составе итогового редактора) собственный "ручной" код.DSL Tools используется валидация?DSL Tools в промышленном проекте. Постарайтесь определить минимальный нижний порог сочетания "объем проекта/компетентность специалистов" для того, чтобы пакет DSL Tools "выстрелил".DSL Tools язык UML. Возможно ли будет это сделать? Что облегчит, а что затруднит вашу работу?Для получения официальных документов о завершении программы дополнительного профессионального образования (удостоверения о повышении квалификации, дипломов о профессиональной переподготовке и MBA) необходимо предоставить:
Внимание! Вы можете не заказывать доставку бумажной версии официального документы, а скачать его в электронном виде и распечатать самостоятельно. Информация о выданном документе в течение 1 месяца загружается в Федеральную информационную систему «Федеральный реестр сведений о документах об образовании и (или) о квалификации, документах об обучении» - ФИС ФРДО.
Доступ на новый сайт осуществляется с использованием адреса электронной почты, который был указан вами при регистрации на "старом". Мы постарались перенести все ваши данные с прежнего ресурса, однако не исключена вероятность потери части информации.
При возникновении проблемы со входом, воспользуйтесь функцией сброса пароля
Если вы обнаружите несоответствия, пожалуйста, сообщите нам.