СТАТЬЯ |
21.05.03
|
© Новичков Александр,
технический специалист
Вот уже два года как серия статей , касающихся темы проектирования кодов для разработчиков посредством инструментального средства Rational Rose, не имела продолжения. Это было связано с тем, что в книжном мире появилась замечательная книга («UML и Rational Rose». У. Боггс, М. Боггс), подробно, четко и доступно объясняющая все аспекты использования UML, с ориентацией именно на разработчиков. В данных обстоятельствах автор статьи счел, что продолжение цикла статей нецелесообразно, и переключился на другие, более актуальные темы.
Как гласит известная поговорка «знал бы где упаду – соломки бы постелил». Так случилось и в данном случае - никто не мог предположить два года назад, что произойдет несколько событий, изменивших подходы к проектированию и разработке кода. Во-первых, компанией Microsoft был выпущен долгожданный продукт Visual Studio .NET, во-вторых, в него включен новый язык программирования C#. Новый язык потребовал новых подходов в моделировании. Стандартных средств, предоставляемых обычными подходами, основанными на Rational Rose, стало явно недостаточно.
Традиционные решения на Rose Enterprise и Rose Professional, позволяют проводить прямое и обратное проектирование кодов для многих языков программирования, то есть возможна прямая генерация кода, обратная (так называемый реверс инжиниринг) и постоянная модификация кода и модели, с поддержанием их в актуальном состоянии (раунд трип инжиниринг). Применение данных инструментов ограничивалось тем, что они не позволяли проводить генерацию в реальном масштабе времени: коды можно было получать, но при этом нужно выполнить определенные дополнительные действия по встраиванию его в систему разработки. Кроме того, проблемы возникали и при постановке сгенерированных (перегенерированных) модулей под версионное управление (в частности под ClearCase).
В данных условиях Rational Software сумела найти правильное решение, тем самым подтвердив свою репутацию компании, оперативно реагирующей на последние изменения в IT индустрии.
Плодом работы явился уникальный инструмент Rational XDE – eXtended Development Environment – система моделирования на UML, интегрированная в Visual Studio .NET и IBM Visual age for Java, представляющая функции для прямого и обратного проектирования кода на C# и Java.
Существенным достоинством нового продукта является функция поддержания кода и модели в актуальном состоянии, работающая в реальном масштабе времени. Таким образом, нарисовав диаграмму классов с иерархической структурой возможно тут же сгенерировать код со всеми связями, атрибутами и методами.
Эффективное отличие XDE от Rose Professional заключается в том, что XDE «понимает» все типы диаграмм из UML 1.3
Данная статья ответит на большинство вопросов, касающихся моделирования на XDE. В частности, мы рассмотрим пример проведения генерации классов C# из модели, опишем взаимодействие XDE, VS .NET и Rational ClearCase.
Если тема Вас заинтересует, то автор готов продолжить данную серию статей по моделированию для разработчиков.
Все вопросы по уже опубликованным статьям и предложения по темам будущих просьба присылать по адресу.
Все сказанное в трех предыдущих частях данного цикла статей в равной степени можно отнести и к XDE, с той поправкой, что сейчас все функции собраны вместе. Все концептуально важное, что было описано ранее, актуально и для XDE. В частности, мы не будем рассматривать типы диаграмм и связей, а остановимся на технологии их применения в XDE.
Рассмотрим основные возможности инструментального средства:
Попробуем кратко проиллюстрировать использование XDE на примере простого проекта на C# из среды Visual Studio .NET. Проект подготавливается и сохраняется на виртуальном диске ClearCase, для того, чтобы позднее его можно было поставить под версионное управление. Описание разделим на этапы.
Шаг первый, наиболее простой. Создается проект на C# через fileаnewаproject
В качестве места хранения выбирается виртуальный диск ClearCase (о том, что такое Clear Case и как создавать диск Вы можете узнать из соответствующих статей по продуктам компании Rational Software).
Если у вас нет рабочего ClearCase, можно создать проект, воспользовавшись простым сохранением на файловой системе. Естественно, в последнем случае поддержка версионности файлов проекта невозможна.
Далее, для демонстрации возможностей XDE модернизируем проект, насыщая основную форму компонентами (рис 1):
Рисунок 1. Внешний вид разрабатываемой формы
Label – для вывода информации, находящейся в Editbox на экран;
Editbox – для создания надписей;
Button – как событие, по которому надпись должна «перекочевать» из Editbox
в Label.
Шаг второй. Опишем действие on_mouse_click для Button, так, чтобы сработало копирование:
Для того чтобы между исходным текстом и моделью настроить автоматическую синхронизацию, воспользуемся пунктом toolsаoptionsаrational XDEаround trip, переведя его в состояние «automatic synchronization» (рис 2).
Этим шагом мы делаем возможной автоматическую синхронизацию кода и модели.
Синхронизация производится автоматически при сохранении модели или кода.
После выполнения основных шагов необходимо вызвать навигатор моделей XDE (viewаother viewаmodel explorer) для отображения иерархии моделей в данном окне (рис 3).
Вкладка model представляет собой ссылку, вызывающую окно с диаграммами.
Для получения доступа к методам и атрибутам нашей формы необходимо развернуть CSharpXDE (это имя проекта). Рисунок 4 демонстрирует то, что появилось в результате нашего действия
Итак, каков результат? Мы получили основной класс нашего приложения с атрибутами и методами (обратите внимание на button2_click, label1 и textbox1). Единственный недостаток метода заключен в том, что здесь невозможно визуально оценить как сам класс, так и его связи.
Для получения визуальной модели, переносим класс на основное поле рабочего окна.
По умолчанию XDE отображает только то, что непосредственно принадлежит проекту, без визуального отображения наследия от классов системы. Для исправления подобного недостатка необходимо отключить фильтр (из контекстного меню, на имени класса вызвать Add related shapes а select in model а all models).
В результате проведенных действий мы получим полную модель отношений класса form1 с остальными классами.
В диаграмме получено отражение всех компонентов нашей системы. Виды связей показывают отношения классов друг с другом.
Связь «генерализация» (generalization) охватывает собой системный класс form и созданный нами form1. Остальные связи показывают отношение формы form1 с компонентами: label1, textbox1 и button2. Причем системные классы label, textbox и button демонстрируются с подписями имен наследованных классов.
По контекстному меню на имени класса можно вызвать основные пункты меню XDE (рисунок 6)
Это:
Сейчас у нас появляется возможность вносить любые изменения в модель, которые будут трансформированы в код автоматически. Для демонстрации этого выбираем по контекстному меню создание 2 новых атрибутов «test1» и «test2» (add umlа attribute).
По окончании введения атрибутов XDE присвоит им тип int. Если необходимо использовать любой другой, то в окне XDE Code Properties вводится соответствующий тип (выбрать из списка или ввести самостоятельно). Таким же образом поступают с полем «access», отвечающим за вид доступа к атрибуту (private, protected, public). Здесь можно задать и инициализирующее значение.
Рисунок 8 показывает фрагмент окон model explorer и XDE Code Properties
Результат работы синхронизации:
Таким же образом можно добавлять и функции, с той лишь разницей, что, в этом случае придется описывать тип формальных параметров (аргументов функции).
В следующей статье мы рассмотрим более подробно моменты генерации методов классов (из модели), а также обратный процесс (из кода).
Для визуального проектирования используются встроенные в XDE графические средства (нелишне напомнить, что XDE прекрасно понимает все диаграммы обычной Rode). За весь инструментарий отвечает пункт toolbox (см. рисунок 9):
UML Class
UML Component
UML Deployment
UML UseCase
UML Activity
UML Statechart
UML Collaboration
UML Sequence
Geometric
C#
Datamodeling
VisualBasic
Web
Для нас сейчас наибольший интерес представляют UML Class и C#, где расположены диаграммы классов, хотя диапазон имеющихся диаграмм достаточно велик (тут также следует учитывать, что не всякая диаграммы будет генерировать код), использовать разработчику придется лишь небольшую часть.
Для иллюстрации возможностей спроектируем два простых класса: родительский MyBaseClass и дочерний (MyChildClass).
Класс MyBaseClass состоит из двух атрибутов number и status (тип атрибутов integer) и двух функций: setstat и getstat.
Setstat получает одно входящее значение, а getstat возвращает значение типа
int.
Реализовав требования в виде модели, получаем диаграмму, изображенную на рисунке
10
После генерации кода получаем 2 файла (по одному на каждый класс), содержащих описание диаграмм на языке C#:
Цель данной главы - продемонстрировать постановку данных под контроль из среды разработчика на Visual Studio (более подробно этот вопрос рассматривается в статье по ClearCase).
Visual Studio .NET немного изменила подход к контроль версий, сейчас система контроля ориентирована как на Source Safe так и на ClearCase, и если речь идет о последнем, то происходит 100% интеграция со всеми языками, входящими в состав .NET.
Преимущество технологии WorkFlow, продвигаемой Microsoft, проявляется и здесь в виде дополнительных модулей, подключаемых к .NET. С их помощью можно встроить в среду разработчика новые языки программирования от сторонних производителей (уже есть реализованные VisualPerl, Fort, Prolog и другие), а ClearCase, в свою очередь, автоматически сможет управлять проектом на незнакомом изначально языке. При этом происходит полная поддержка с его стороны вплоть до компиляции проектов (если модуль для VS .NET поддерживает данную возможность).
Постановка проекта под контроль происходит выбором пункта fileаSource Control аAdd Solution To Source Control (рис 11)
Команда постановки завершается тем, что все данные, относящиеся к проекту, ставятся под версионное управление в состояние check-in. Далее менеджер конфигурации может сформировать базовую линию, а остальные участники проекта - сформировать изолированные релизы и работать независимо друг от друга.
Любая дальнейшая попытка разработчика изменить код или модель будет прерываться сообщением, о необходимости вывода файла (модели) в состояние check-out для редактирования.
В данной статье мы попробовали в режиме быстрого старта (кто не убежал – я не виноват?) сформировать простое приложение и поставить его под управление ClearCase. Мы узнали о преимуществах XDE, позволяющих упростить генерацию компилируемого кода.
В следующей части статьи автор планирует рассмотреть в углубленном режиме диаграммы, встроенные в XDE, технологию проведения реверс инжиниринга, а также подробнее рассмотреть, как несколько человек смогут работать над одной моделью.
А самое главное – мы коснемся паттернов XDE.
Дополнительная информация
За дополнительной информацией обращайтесь в компанию Interface Ltd.
INTERFACE Ltd. |
|