Rational Rose для разработчиков и ради разработчиков

         

На чем основана работа программы


Итак, от общих тем перейдем непосредственно к тому, что умеет делать CASE Rational Rose. Являясь объектно-ориентированным инструментом моделирования, Rose базируется на UML (Universal Modeling Language) - универсальном языке моделирования, который был разработан компанией Rational именно с целью создания наиболее оптимального и универсального языка для описания как предметной области, так и конкретной задачи в программировании. Любая задача программируется при помощи определенных диаграмм. UML поддерживает построение следующих диаграмм:

  • Activity diagram (диаграммы описаний технологий, процессов, функций).
  • Use case diagram (диаграммы функций).
  • Class diagram (диаграммы классов).
  • State diagram (диаграммы состояний);
  • Sequence diagram (диаграммы последовательностей действий);
  • Collaboration diagram (диаграммы взаимодействий
  • Component diagram (диаграммы компонент);
  • Deployment diagram (диаграммы топологии).

Соответственно, Rational Rose 2000 является инструментом, который позволяет строить указанные диаграммы при проектировании программных систем. К сожалению, объем статьи не позволяет описать назначение всех диаграмм и спецификаций! Но мы попробуем разобраться в инструменте с точки зрения разработчика, для простоты используя только один тип диаграмм - Class Diagramm.

Все разработчики сталкиваются с ситуацией, когда приходится проектировать большие классы. При ручном вводе и объявлении имеется ряд подводных камней: во-первых, постановщик задач, как правило, описывает "что нужно" на словах, в крайнем случае, с минимальным бумажным сопровождением; во-вторых, разработчик, создающий систему, опять-таки в большинстве случаев игнорирует все комментарии, которыми необходимо сопровождать программный код. Что же получается в итоге? Постановщик задач путается в программе, разработчик сам не помнит, что к чему, а если на его место взят новый сотрудник: Тут на ум приходит еще одно традиционное для России высказывание разработчика: "мне проще все написать заново".
И ведь пишут: Тормозя производство программного продукта. Дело в том, что к разработке ПО относятся как к искусству, а необходимо относиться, как к производственному процессу со строгим распределением ролей, полномочий и пр:

На нижеследующем примере я продемонстрирую:



  1. Как можно спроектировать класс в Rational Rose 2000
  2. Как можно расписать спецификации отдельных компонентов класса
  3. Как получить код (c примером)
  4. Как получить детальный отчет о классе (также с примером)


Для демонстрационных целей достаточно спроектировать только один класс. Назовем его "String". В его обязанности должны входить основные операции над массивами (печать, копирование, сравнение, получение размера). В качестве идеального примера опишем сначала данный класс на чистейшем С++:

Class String{ Private: Int Counter; Int Stat; Public: Char *TmpString; Int GetStringSize(Char *); Int PrintString(Char *); IntCmpString(Char *, Char *); Int CpyString(Char *, Char *); };

Теперь средствами Rose все спроектируем в графическом виде.

Для отображения классов в Rose используется диаграмма классов. В качестве имени задаем "MyString". Далее, войдя в саму диаграмму, необходимо расписать спецификации: атрибуты (типы переменных) и операции (функции класса с формальным описанием всех параметров на входе и на выходе).



Каждый атрибут задается отдельно, ему дается комментарий, и расписывается тип (public, protected, private). На рис. 1 показан разворот спецификации для TmpString. Подобным образом расписываются все переменные.

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



Результатом выполнения вышеописанных действий будет появление класса с расписанными спецификациями. Сам класс показан на рис. 2. Можно отметить, что в графическом виде можно оценить основные свойства каждого элемента.



Следующий шаг в работе - получение кода на С++. Здесь хочется развеять существующий миф о 100% генерации кода. Rational Rose 2000e Enterprise в принципе не может дать готового кода, она способна лишь спроектировать класс и расписать спецификацию каждого элемента, подставить шаблоны членов класса для дальнейшего заполнения кодом. А вот для 100% генерации рабочего кода на С++ используется Rational Rose 2000 RealTime, которую в данном случае мы не рассматриваем.

Итак, вернемся к кодогенерации (точнее сказать, к классо-генерации). Через систему меню (Tools) выбираем поддерживаемый язык для описания спроектированного класса (в данном случае это С++), вызываем "Code Generationаl". Результатом работы будет появление двух файлов: MyString.h и MyString.cpp. В первом расписывается сам класс, а второй является шаблоном для дальнейшего заполнения соответствующим кодом.

Ниже приводятся распечатки обоих файлов, для того чтобы вы имели представление о том, какой код вы получите, применяя Rational Rose:



Весь приведенный материал получен без изменения настроек и без дополнительной правки.

Имея подобный шаблон, становится не важно, какой именно разработчик начал работать над кодированием логики класса.

Для получения же подробного отчета по классу или технического задания можно воспользоваться инструментом Rational SoDA. Отчет также приведен в конце статьи.

Следующая задача, с которой поможет справиться Rational Rose - анализ существующей системы. Зачем переписывать и документировать крупные системы заново, если можно воспользоваться функцией обратного проектирования, что позволит из имеющегося кода построить визуальную модель и уже визуально дописать необходимые свойства и атрибуты, дописать новые классы. А под конец сгенерировать весь спектр файлов, необходимых для дальнейшей работы программистов.Данный подход называется Round-Trip и полностью поддерживается в RationalRose.


Содержание раздела