Альтернативой структурному подходу стали лишенные перечисленных недостатков
объектно-ориентированные методы разработки информационных систем. В начале
девяностых годов был предложен разработанный на основе наиболее популярных
объектных методов - OMT (Rumbaudh), Booch и OOSE (Jacobsom) универсальный
язык объектного проектирования - Unified Modeling Language, UML (The Unified
Method, Draft Edition (0.8). Rational Software Corporation, October 1995).
Одним из CASE-средств, поддерживающих язык UML, является выпущенный фирмой
Rational Software программный пакет Rational Rose, который позволяет генерировать
код приложения, в полной мере отвечающий бизнес-правилам и с наименьшим
риском.
Снижение риска в объектной технологии достигается за счет реализации
технологии итерационной разработки (так называемая спиральная модель жизненного
цикла разработки). Разработка состоит из ряда итераций, которые в дальнейшем
приводят к созданию информационной системы. Каждая итерация может приводить
к созданию фрагмента или новой версии и включает этапы выработки требований,
анализа, проектирования, реализации и тестирования. Поскольку тестирование
проводится на каждой итерации, риск снижается уже на начальных этапах жизненного
цикла разработки.
Модель представляет собой совокупность диаграмм, описывающих различные аспекты структуры и поведения информационной системы. Для просмотра модели в Rational Rose используется иерархический навигатор модели - Browser. В дальнейшем будет описан интерфейс версии Rational Rose for Java (version 4.0).
Диаграммы использования системы (Use Cases) показывают, какая функциональность должна быть реализована в системе, основные функции, которые должны быть включены в сиcтему (use case), их окружение (actors) и взаимодействие функций с окружением. Воздействующие объекты (actors) не являются частью системы - это конечные пользователи или другие программы, взаимодействующие с проектируемой информационной системой. Функциональность (use case) - последовательность действий, выполняемых системой, которые приводят к определенным результатам, необходимым для конкретного воздействующего объекта.
Диаграммы Use Cases включают отношения и ассоциации, показывающие взаимодействие между воздействующими объектами и функциями (изображаются в виде стрелок) и примечания (note), которые могут быть привязаны к любому объекту диаграммы Use Cases. Для создания новой диаграммы Use Cases следует правой кнопкой мыши кликнуть в навигаторе модели по закладке Use Case View и выбрать во всплывающем меню пункты New / Use Case. Для внесения в диаграмму Use Case и установления связей между ними следует использовать кнопки палитры инструментов Rational Rose.
Если система содержит большое количество классов, они могут быть объединены
в пакеты (package).
Каждый класс может иметь атрибуты ( свойства ). Так, на рис. 30 класс
Customer Information (информация о клиенте) имеет атрибуты CustomerID (идентификатор
клиента), Name (имя) и Account (счет). Кроме того, каждый класс может методы
(operations) - некоторые действия, которые описывают поведение объектов
класса. На рис.30 класс Customer Information имеет метод Check Account.
Для внесения свойств класса следует правой кнопкой мыши кликнуть по классу
и выбрать во всплывающем меню пункт Specification.
Классы могут иметь взаимосвязи (relationship), называемые отношениями.
В нотации UML имеется несколько типов отношений. Отношение использования
(associations, кнопка
палитры инструментов) показывает, что объект одного класса связан с
одним или несколькими объектами другого класса. Отношение включения (aggregation,
кнопка ) является частным
случаем отношения использования. Оно показывает, что один объект является
частью другого. При воздействии на один объект, связанный отношением включения,
некоторые операции автоматически могут затронуть другой объект. Например,
на рис.30 класс Customer Information связан отношением включения с классом
Contract. При удалении объекта класса Customer Information (информация
о клиенте) должны удаляться все объекты класса Contract (относящиеся к
данному клиенту контракты). Каждая связь может быть охарактеризована определенной
фразой, называемой именем роли. Связь между классами Customer Information
и Contract имеет имя negotiates. Каждая связь может иметь индикатор множественности,
который показывает, сколько объектов одного класса соответствует объекту
другого класса. На рис.30 связь negotiates имеет индикатор 1..* (один или
много).
Наследование (inheritance) описывает взаимосвязь между классами, когда
один класс (называется подклассом, subclass) наследует структуру и/или
поведение одного или нескольких классов. На рис.30 подкласс VIP наследует
свойства и поведение класса Customer Information. Связь классов в иерархии
наследования называется отношением наследования (generalization, кнопка ).
Временная диаграмма (Sequences) демонстрирует поведение объектов во времени. Она показывает объекты и последовательность сообщений, посылаемых объектами. Сообщения на диаграмме сценариев изображаются в виде стрелок.
Архитектура приложения описывается в диаграммах компонент (Component Diagram), которые описывают вхождение классов и объектов в программные компоненты системы (модули, библиотеки и т.д.) и диаграммы развертывания (Deployment Diagram), при помощи которых документируется размещение программных модулей на узлах (физических и логических устройствах) системы. В данной статье эти диаграммы не рассматриваются.
Генерация кода осуществляется на основе диаграмм классов. Для
генерации необходимо выбрать пункт меню Tools / Java / Generate Java.
Ниже приведен код на языке Java, соответствующий классу Customer Information
(рис.30):
//## //## Source file: Customer__Information.java
//## //## Subsystem: Component View
//## //## Module: Customer Information
//##begin module.cm preserve=no
/* %X% %Q% %Z% %W% */
//##end module.cm
//##begin module.cp preserve=no
//##end module.cp
//##begin module.additionalImports preserve=no
//##end module.additionalImports
//##begin module.imports preserve=yes
//##end module.imports
// ==================================================================
//##begin module.declarations preserve=no
//##end module.declarations
//##begin module.additionalDeclarations preserve=yes
//##end module.additionalDeclarations
public class Customer__Information {
//##begin Customer__Information.initialDeclarations preserve=yes
//##end Customer__Information.initialDeclarations
public int m_CustomerID;
private int m_Name;
private int m_Account;
public Vector m_negotates = new Vector();
public void Check_Account() {
//##begin Customer__Information::Check Account%3561A0AF032A.body
preserve=yes
//##end Customer__Information::Check Account%3561A0AF032A.body
}
//##begin Customer__Information.additionalDeclarations preserve=yes
//##end Customer__Information.additionalDeclarations
}
При генерации кода Rational Rose включает строки комментария, начинающиеся последовательностью символов "//##" . Сгенерированный код (в отличие от кода, сгенерированного ERWin) не является готовым приложением. Здесь генерируются лишь заголовки методов (Check_Account), сами методы необходимо дописывать вручную.