Диссертация (1145120), страница 22
Текст из файла (страница 22)
Метод применения языка ATL [165] для задания v2v-трансформа-ции.3. Апробация данного подхода — прототип программного решения, реализующего предложенный подход в среде Eclipse GMF [398] и использующий для автоматизации раскладки результатов трансформации технологию KIELLER [307].4. Редактор диаграмм классов UML, реализованный с помощью предложенной технологии, который содержит базовые навигационные сервисы для диаграмм классов.5. Набор v2v-трансформаций, реализованный в рамках созданной инфраструктуры для диаграмм классов.Пусть у нас имеется метамодель ℳ (abstract syntax), определяющая некоторый язык моделирования.
Следуя [278], определим метамодель как ℳ =〈, ℐ, 〉, где — это множество основных элементов метамодели (типовсущностей и ассоциаций); ℐ — отношения наследования между элементами, то есть ℐ ⊂ × ; — множество атрибутов элементов из 37.37Определение метамодели в [278] отличается от данного определения тем, что там разделены типы и ассоциации. Мы не стали их разделять, так как и то и другое порождает экземпляры в модели (в отличие от наследования), и последние, таким образом, являютсяэлементами модели. Правда, мы получаем некоторые неудобства, например, ассоциацииу нас могут наследоваться друг другом и типами сущностей.
Однако, наследование на непонадобится в дальнейшем, а разделение типов сущностей и ассоциаций приведёт к необ-124Пусть T = t1 , … t n — это набор статических представлений (видов диаграмм) данного визуального языка.Определим модель как M = 〈E, A, φ〉, где E — это множество объектов исвязей модели (экземпляров элементов из ), A — значения атрибутов объектов, а φ: E ⟶ является функцией, сопоставляющей каждому элементумодели соответствующий тип в метамодели. Будем обозначать как M ≻ ℳтот факт, что модель M является корректным экземпляром метамодели ℳ(функция φ этого не обеспечивает, так как элементы соответствующих типовмогут быть неправильно соединены, могут также не выполняться различныеограничения на модели, сформулированные с помощью OCL).Пусть у нас есть некоторая выборка элементов из модели.
Тогда параметры отображения — это указание на способ отображения в выборке атрибутов сущностей, например, показывать или нет атрибуты и методы класса, аесли показывать, то следует ли отображать значение видимости и т.д.Определим множество всех возможных значений параметров отображениядля элемента метамодели θ ∈ ℳ на выборках вида t , где t ∈ T, как DOθ,t(DO является сокращением от Display Options). Если DOθ,t = ∅, значит, элементы типа θ в выборки данного типа не входят. Набор конкретных значений параметров отображения элемента модели e ∈ M в выборке вида t будем обозначать doe,t . При этом doe,t ∈ DOθ,t , где θ = φ(e).
Если DOθ,t = 1,значит, элементы вида θ отображаются в выборках типа t единственным образом.DOℳ,t = ⋃ DOθ,t , DOℳ = ⋃ DOℳ,t .θ ∈ℳt∈TОбозначим через ℳ метамодель динамических представлений, определяющую структуру выборок из моделей, с которыми пользователь может работать посредством диаграмм. Динамическое представление — это выборкаходимости вводить для них в дальнейшем различные параллельные функции, что сделаетформализм существенно более громоздким.125из модели вида t, где t ∈ T, которая может содержать повторы элементовмодели, и каждый элемент этой выборки содержит параметры отображения.Фактически, ℳ дополняет элементы ℳ возможными параметрами отображений в соответствии с видами статических представлений (элемент метамодели на диаграммах различных видов может иметь различные виды параметров отображений, например, класс на диаграмме классов и диаграммеобъектов).
Формально определимℳ как 〈ℳ, T, DO〉, где DO ⊂ ℳ ×T × DOℳ .Определим динамическое представление следующим образом:v = 〈t, M, Δ, ψ, β〉,где t ∈ T (то есть динамическое представление определяется для выбороквида t, при этом t будем называть видом v), Δ является множеством элементов динамического представления модели M, ψ: Δ ⟶ E является функцией ипозволяет определить, какому элементу модели соответствует данный элемент представления, β: Δ ⟶ DOℳ,t является функцией, действующей измножества элементов представления в множество всех возможных параметров отображения в выборках вида t, при этом верно следующее утверждение:∀ d ∈ Δ (β(d) ∈ DOψ(d),t ). Таким образом, динамическое представлениеявляется выборкой из модели с повторами и, кроме того, каждый из элементов этой выборки имеет набор параметров отображения. Множество всехвозможных динамических представлений вида t для метамодели ℳ определим следующим образом:Vt = ⋃ { v | где вид v равен t}.M ≻ℳДиаграмма отличается от динамического представления тем, что всем элементам последнего добавляются графические свойства (Graphical Options) —координаты фигуры, цвет и толщина линий фигуры и фона, параметрышрифтов и т.д.
Пусть имеется диаграмма вида t, будем обозначать графиче126ские свойства элемента диаграммы d как god,t . Множество всех возможныхграфических свойств элементов диаграмм вида t определим так:GOt = ⋃ {god,t }.d ∈ VtФормально определим диаграмму следующим образом:d = 〈v, δ〉,где δ является функцией, действующей из Δ в GOt (t является видом представления v и, соответственно, видом диаграммы d) и сопоставляющей элементам динамического представления соответствующие графические свойства.Рассматривая v2v-трансформации выделим следующие случаи: трансформации, действующие на фиксированном множестве элементов модели/диаграммы (далее — трансформациипервого вида) и трансформации,применяемые ко всей диаграмме целиком (далее — трансформация второговида).
Примерами для первого случая могут служить все трансформации,применяемые к одному элементу (таких трансформаций оказывается большинство). Существенно меньше трансформаций, которые можно задать дляпары элементов. В качестве примера можно указать на случай, когда требуется определить все возможные пути в графе между двумя элементами(например, двумя состояниями в диаграммах состояний и переходов или длядвух классов на диаграмме классов). Для второго случая приведём пример,когда для классов всей диаграммы предложено изображать атрибуты и неизображать методы.
При этом не известно, сколько именно будет классов.Отметим, что трансформации обоих видов не меняют модель.Формально определим v2v-трансформацию для первого случая. Определим подмножество модели M, состоящее из всех элементов, соответствующих некоторому типу метамодели θ: M θ = { ∈ M: φ(e) = θ }. Будем обозначать декартовое произведение нескольких таких множеств, определённоедля одной модели M, следующим образом:127∏ Mθi .=1..Определим функцию на отрезке натуральных чисел от 1 до n: : 1.
. ⟶ .Для фиксированной метамодели ℳ, t ∈ T и функции определимтрансформацию первого вида как функцию следующего вида:tr1ℳ,t,ζn ∶ ∏ Mζn(i) ⟶ Vt ,=1..при этом M ≻ ℳ и принимает все возможные значения. Необходимо отметить, что трансформация может быть применена как к элементу модели (итогда для него создаётся соответствующая выборка вида t, которая потомотображается на отдельной диаграмме), так и к элементу диаграммы.
В последнем случае вид выборки не важен, поскольку в качестве аргумента нас неинтересуют параметры отображения элементов модели, к которым применяется трансформация: например, если требуется отобразить для класса значение его атрибутов, включая значения видимости и значения по умолчанию,то не имеет значения, как данные атрибуты отображались до этого. Сделаемещё одно замечание: трансформация действует на элементах модели с повторениями, так как можно, например, запросить построение всех путей из элемента модели в него же.Теперь определим трансформацию второго вида как функцию следующеговида:tr2ℳ,t1 ,t2 ∶ V1 ⟶ V2 ,где 1 , 2 ∈ T.
Таким образом, трансформация второго вида действует на всединамическое представление вида 1 , преобразуя его в представление вида2 . В большинстве случаев 1 = 2 .Определим навигационный сервис как следующую тройку: v2v-трансформация;128 спецификация элементов пользовательского интерфейса для заданияпараметров сервиса (диалоговое окно) и вызова сервиса: пункт контекстного меню элемента на диаграмме, кнопка на панели инструментов, пункт главного меню и пр.; алгоритм раскладки (layout algorithm), который изменяет графические свойства, но не меняет состав динамического представления;важно отметить, что данный алгоритм должен принимает на входдиаграмму, к которой была применена трансформация (в случае, если трансформация применялась к диаграмме, а не к элементу модели), а не динамическое представление, так как может потребоватьсяизобразить результат раскладки максимально похожим на исходнуюдиаграмму для тех фрагментов последней, которые не изменились врезультате выполнения трансформации.
То есть речь идёт о максимальном удовлетворении интуитивных ожиданий пользователя отчастичного преобразования диаграммы (user mental map [416]).Продемонстрируем на примере, как v2v-трансформации задаются на ATL.При этом в качестве метамодели представления рассмотрим метамодельGMF Notation (в примерах ниже она называется Notation). Рассматриваемыйграфический редактор — это реактор классов UML.