Модельно-ориентированная разработка: что такое трансформация?

Насколько я понимаю, управляемая моделями разработка (MDD) позволяет автоматизировать процесс, при котором программы / модели автоматически генерируются из соответствующих моделей посредством применения преобразований.

Все, что я знаю о трансформациях, - это то, что они являются некоторым способом сохранения опыта разработчика, специфичного для платформы.

Но что именно является трансформацией?

3 ответа

Преобразование(программы) - это функция, которая задает экземпляр представления программы, вычисляет другой.

Представление программы может быть произвольным, но часто представляет собой абстрактное синтаксическое дерево (AST) или граф (например, UML); Вы даже можете включить байт-код в качестве представления программы. Как и математические функции, преобразования могут быть "частичными" (то есть работать только в некоторых [возможно сложных] условиях).

Мне лично нравится преобразование терминологии, чтобы обратиться к самой функции, и преобразование, чтобы обратиться к действию или результату применения преобразования, чтобы получить новое представление.

В общем, (глобальное) преобразование программы может повлиять на все представление, даже если оно огромное, но обычно отдельные преобразования изменяют только небольшую часть, оставляя большую часть представления программы в одиночестве. Абстрактно, весь экземпляр представления программы обрабатывается преобразованием для создания другого совершенно нового экземпляра представления программы. Поскольку экземпляры представления имеют тенденцию быть большими, это часто реализуется с помощью преобразования, просто изменяющего существующий экземпляр представления. Такие "маленькие" преобразования, о которых вы можете думать, имеют дополнительные параметры, которые фокусируют их на определенной части представления, в которую они вносят изменения.

Подобно математическим функциям, преобразования составляются для создания "больших" преобразований (которые также являются частичными, поскольку условия также составляют). Обычно вы пишете набор преобразований для полного преобразования представления программы, поскольку ни одно преобразование не обработает весь экземпляр представления за один шаг. Тот факт, что вы можете их составлять, позволяет вам писать множество "маленьких" преобразований, которые в совокупности достигают вашей цели, поэтому вы получаете своего рода модульность в семантическом переводе, поэтому людям нравится идея программных преобразований.

Подобно математическим функциям, вы можете реализовать такие преобразования, написав процедурный код. Такой код проверяет биты исходной модели и производит изменения в модели во время их работы, но это обычно неудобно.

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

На практике отдельные преобразования применяются только к определенным местам в представлении, и порядок, в котором они применяются ("составлять"), имеет значение. Чтобы справиться с этим, (программные) инструменты преобразования часто предоставляют способ "метапрограммы" для контроля точки фокуса и порядка применения правил.

Эти идеи применимы к так называемой "модели-управляемой разработке", которая представляет собой просто преобразования, применяемые к возможно высокоуровневой модели для генерации низкоуровневого кода или для преобразования низкоуровневого кода в другой низкоуровневый код. Вы даже можете использовать эти идеи для создания инструментов обратного проектирования, например, для преобразования низкоуровневого кода в некоторую абстрактную модель. Наш DMS Software Reengineering Toolkit - это инструмент преобразования программ, имеющий как процедурные преобразования, так и перезапись от источника к источнику, используемый для всех этих целей.

Основной процесс разработки MDD - от моделей приложений до работающей реализации посредством последующих преобразований моделей. Это позволяет повторно использовать модели и запускать системы на разных платформах. Действительно, на уровне реализации работающее программное обеспечение опирается на конкретную платформу (определенную для конкретной области приложения) для своего выполнения.

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

Преобразования модели могут быть классифицированы как: - преобразования модели в модель - преобразования модели в текст (используются для генерации программного кода, документации или других текстовых артефактов).

MDE предоставляет подходящие концептуальные языки (например, QVT или ATL) для определения трансформаций моделей, чтобы предоставить разработчикам оптимизированные решения для определения правил преобразования. Очевидно, что поскольку конечные модели кодируются в виде файлов, можно подумать об использовании обычных императивных языков программирования для определения их преобразований. Однако это снижает уровень абстракции всей среды моделирования и, как правило, приводит к созданию громоздких и не поддерживаемых частей программного обеспечения.

Преобразование в управляемой моделью разработке - это результат, который мы получаем при обработке модели. Этот вывод может быть другой моделью или исходным кодом.

В подходе MDA (Model-Driven Architecture) мы можем преобразовать PIM (независимую от платформы модель) в PSM (специфичную для платформы модель) посредством процесса преобразования. Затем мы можем преобразовать PSM в исходный код, снова через последующее преобразование.

Некоторые другие подходы, такие как ABSE, преобразуют модель непосредственно в исходный код. Здесь модель ABSE напрямую генерирует конечный исходный код, потому что ее шаблоны работают как мини-программы (в генераторе кооперативного типа): никаких дополнительных преобразований не требуется. Как и большинство других подходов MDD, ABSE требует поддержки инструментов. В данном случае это AtomWeaver.

Другие вопросы по тегам