Диссертация (1145120), страница 23
Текст из файла (страница 23)
Узлы в Notation, соответствующие классам, атрибутам и операциям, различаются по своему типу (поле type в классе Node). Мы будем использовать литералы CLASS_NODE,ATTR_NODE и OP_NODE для обозначения соответствующих значений типа.В начале v2v-трансформации, как и любой другой трансформации на языке ATL, задаются имена исходной и целевой метамоделей (в нашем случаеобе метамодели являются GMF Notation — которую можно рассматривать вкачестве метамодели представлений, обеспечиваемой GMF). Мы также используем модификатор refining, указывая, что трансформация должна выполняться в режиме изменения модели.129module v2v_transformation_example;create OUT : Notation refining IN : Notation;Затем должно следовать описание правил трансформации, которые меняют представление. Самым простым примером v2v-трансформации являетсязагрузка на диаграмму всех существующих в модели элементов.
Она содержит только одно правило Node2Node, определённое для узлов диаграммы:rule Node2Node {from old_node : Notation!Node (old_node.type = CLASS_NODE)to new_node : Notation!Node (visible <- true,)}Это правило содержит фильтр по типу узла и, таким образом, будет вызвано только для узлов, соответствующих классам UML диаграммы. Онопроставит значение true свойству visible для каждого из них, делая их видимыми на диаграмме (дело в том, что файл с GMF-диаграммой содержитссылки на все элементы модели, и эти ссылки имеют в данном файле дополнительные, так сказать, диаграммные атрибуты, в частности, свойствоvisible).Допустим теперь, что мы хотим реализовать выгрузку с диаграммы конкретного элемента модели. Для этого нам понадобится более сложная v2vтрансформация, поскольку нам требуется применить какое-то действие не ковсем элементам диаграммы, а только к какому-то одному.
При этом нам понадобится параметр v2v-трансформации, значением которого будет идентификатор элемента, который мы должны скрыть или показать. Поскольку наданный момент ATL не позволяет задавать параметры трансформации, томы расширяем ATL следующим образом. В коде трансформации используются специальные строчные литералы (по количеству параметров), вместокоторых будут подставлены конкретные значения перед компиляцией и выполнением трансформации. Итак, для выгрузки элемента в фильтре правила130Node2Node добавится условие на идентификатор узла, а в коде правила свойству visible будет присвоено значение false:rule Node2Node {from old_node : Notation!Node (old_node.type = CLASS_NODE andold_node.id - 'CURRENT_NODE_ID')to new_node : Notation!Node (visible <- false)}Покажем, как с помощью v2v-трансформации можно менять параметрыизображения элементов представления.
Пусть, например, мы хотим скрытьсодержимое всех элементов на диаграмме, кроме их имён. В GMF Notationдля этого нам достаточно сделать невидимыми все узлы, соответствующиеатрибутам и операциям какого-либо класса. Для этого фильтр правилаNode2Node должен содержать условие на равенство типа узла ATTR_NODEили OP_NODE.Расскажем теперь об апробации предложенной модели. Был разработанплагин к Eclipse, позволяющий интегрировать навигационные сервисы, построенные на основе v2v-трансформаций на языке ATL, в графические редакторы, создаваемые с помощью Eclipse GMF.Разработчик, использующий данный плагин, помимо кода трансформациина языке ATL должен также указать дополнительную информацию, позволяющую построить полноценный навигационный сервис: тип элементов (втерминах доменной модели GMF), к которым применима данная v2vтрансформация, и название навигационного сервиса.
Эта информация используется для формирования контекстного меню соответствующих элементов редактора. Для задания этой информации используется параметр GUIspecнавигационного сервиса. При вызове пользователем навигационного сервисазагружается код его v2v-трансформации, который далее компилируется иприменяется к сериализованной копии текущей диаграммы. Результат выполнения трансформации затем передаётся KIELER, который выполняет ав131томатическую раскладку элементов диаграммы.
При этом конкретный алгоритм раскладки и его настройки пользователь выбирает сам, используя стандартные вкладки настроек KIELER.С помощью Eclipse GMF, расширенного описанными выше средствами,был создан графический редактор диаграмм классов UML, в котором былиреализованы трансформации, представленный в табл. 3.1.Мы оценили данные трансформации по следующим критериям: объём — количество правил (matched rules) и функций-хелперов(helpers), использованных для реализации трансформации; сложность разработки: лёгкая (Л) — для реализации трансформациинеобходимы лишь базовые знания языка ATL; средняя (Ср) — необходимо знание стандартных конструкций ATL, а также пониманиеметамодели, для которой определяется трансформация; сложная (С)— необходимо хорошее знание ATL, в частности, умение работать сего коллекциями; производительность: время выполнения представленных трансформаций проверялось на диаграмме классов, содержащей 100 сущностей и 90 связей; в среднем, производительность составила 2-3 секунды; при этом ATL-часть работала меньше секунды, основноевремя заняла подготовительная работа.132Табл.
3.1 v2v-трансформации для диаграмм классов UML№Название1Скрыть класс (hide class)2Краткое описаниеСкрыть выбранный класс с диаграммыОбъёмСложность1ЛЗагрузить все классы (show Загрузить на диаграмму все ранее скрыall classes)тые классы1Л3Скрыть свойства класса Скрыть атрибуты и методы выделенного(hide properties of a class)класса1Сл4Загрузить атрибуты и методы отдельного класса(show properties of a class)Загрузить на диаграмму свойства выделенного класса1Сл5Скрыть свойства всехклассов (hide all properties)Скрыть атрибуты и методы всех классовна диаграмме1Ср6Загрузить свойства классов Загрузить на диаграмму все ранее скры(show all properties)тые свойства классов1Ср7Загрузить дерево наследников класса (showsuccessors tree)Загрузить на диаграмму всех наследников класса2Ср8Скрыть дерево наследников класса (hide successorstree)Скрыть с диаграммы всех наследниковкласса2Ср9Загрузить всех предковкласса (show predecessors)Загрузить на диаграмму все классы, длякоторых выделенный класс являетсянаследником2Сл10Скрыть всех предков класс(hide predecessors)Скрыть с диаграммы все классы, для которых выделенный класс являетсянаследником2Сл11Загрузить классы, связанные с данным ассоциациями (show associated classes)Загрузить на диаграмму все классы, связанные ассоциациями с выделеннымклассом2Ср12Скрыть классы, связанныес данным ассоциациями(hide associated classes)Убрать такие классы с диаграммы.2Ср133Итак, для того чтобы реализовать достаточно широкий набор навигационных сервисов, разработчику GMF редактора не требуется, при наличии знаний об ATL и GMF Notation, много усилий.
Данная работа становится частьюразработки моделей в GMF по проектированию будущего редактора и невключает разработку программного кода: необходимо разработать всеголишь небольшое множество правил на декларативном языке ATL (5-20 строкна один сервис). Сам ATL является частью Eclipse Modeling Project, чтоупрощает его изучение и применение для пользователей, работающих сGMF. В то же время реализация таких навигационных сервисов в коде редактора «с нуля» потребовала бы от программиста тесной интеграции с Javaкодом GMF, понимания того, как функционирует GMF Engine, а также написания достаточно большого количества кода.
При этом каждый навигационный сервис будет включать в себя значительное количество различных процедур обхода модели и диаграмм, которые пришлось бы писать и отлаживать«вручную» по многу раз — этот код трудно повторно использовать, поскольку хоть он и имеет много общего, но он также имеет специфичные для каждой ситуации действия и структуры данных.1343.2 Алгоритм слияния моделей 38И-карты (mind maps) [193] оказываются эффективным средством при первичной разработке требований к программным продуктам, когда несколькочеловек, распределённых и перемещающихся в пространстве, должны быстро, в интерактивном режиме, прийти к общему пониманию требований кпроекту.
В этом процессе, как показал опыт автора, оказывается востребованной поддержка групповой разработки и-карт средствами Интернета иналичие возможности восстанавливать и сливать (merge) результаты работынескольких человек в случае обрыва и последующего восстановления Интернет-соединения.В рамках данной диссертационной работы для решениявторой задачи (слияния и-карт после обрыва и восстановления соединения)был использован известный алгоритм слияния XML-файлов 3DM [335],[336]. Алгоритм 3DM был выбран в качестве базового, так как, во-первых,он использует подход 3 way merge, во-вторых, он рассматривает все операции над деревом, которые используются при редактировании и-карт, втретьих, поскольку у него есть открытая реализация.И-карты являются графическим языком и методом для работы с большимимассивами информации под названием и-карты39.
Отметим также, что данный подход используется далеко не только в бизнес-инжиниринге, но такжеи в обучении, бизнесе, при написании книг, статей, в научной деятельности,при планировании личных и семейных мероприятий, при психологическомтестировании и т.д. Данный подход был предложен Тони Бьюзеном в конце70-х годов прошлого века [193] и за много лет доказал свою состоятельность.И-карта представляет собой диаграмму с очень простой нотацией. В центредиаграммы находится главный элемент, обозначающий ключевую идею иликонцепцию. Этот элемент затем соединяется с другими элементами, поясняющими и детализирующими его, которые располагаются вокруг, и т.д.
На38Материалы данного раздела следует работам автора [69], [84].Известны и другие переводы на русский язык термина mind maps: карты памяти, интеллект-карты.39135рис. 3.8 представлен пример и-карт, на которой изображён план внедрения впроект средств конфигурационного управления. Среди преимуществ и-картТони Бьюзон отмечает следующее: лёгкость восприятия и запоминания информации, экономию времени на поиск в тексте ключевых слов (благодарятому, что они более заметны и связаны между собой ассоциациями), развитиеу человека системного мышления в процессе создания таких карт и т.д.АдминистраторРазработчикскриптовКомандаКонфигурационноеуправлениеРаботыСредстваРазработкаи внедрениепроцессаНаладкаSubversionSubversionMSBuildРазработкаMSBuildскриптовРис. 3.8.