Объектом называется концепция, абстракция или вещь с четко определенными границами и значением для системы. Каждый объект в системе имеет три характеристики: состояние, поведение и индивидуальность.
Состояние, поведение и индивидуальностьСостоянием (state) объекта называется одно из условий, в которых он может находиться. Состояние системы обычно меняется во времени и определяется набором свойств, называемых атрибутами (attribute), значений свойств и отношений между объектами. Например, объект учебный курс (CourseOffering) в системе регистрации учебных курсов может находиться в одном из двух состояний: открыт для записи или закрыт для записи. Если количество студентов, зарегистрировавшихся на курс, меньше десяти, запись на курс продолжается. После регистрации десятого студента она прекращается.
Поведение (behavior) определяет, как объект реагирует на запросы других объектов и что может делать сам объект. Поведение реализуется с помощью набора операций (operation) для объекта. В системе регистрации курсов объект учебный курс может иметь операции добавить студента и удалить студента.
Индивидуальность (identity) означает, что каждый объект уникален, даже если его состояние идентично состоянию другого объекта. Например: Алгебра 101, секция 1 и Алгебра 101, секция 2 — два объекта в системе регистрации курсов. Хотя они оба являются учебными курсами, каждый из них уникален.
В языке UML объект изображается в виде прямоугольников, а его имя пишется с подчеркиванием — см. рис. 4.1.
Рис. 4.1. Нотация языка UML для объекта
Что такое классКласс (class) — это описание группы объектов с общими свойствами (атрибутами), поведением (операциями), отношениями с другими объектами и семантикой. Таким образом, класс представляет собой шаблон для создания объекта.
Каждый объект является экземпляром конкретного класса и не может быть экземпляром нескольких классов. Например, класс учебный курс (CourseOffering) может определяться следующими характеристиками:
□ атрибуты — место занятий, время занятий;
□ операции — получить место занятий, получить время занятий, добавить студента на курс.
Алгебра 101, секция 1 и Алгебра 101, секция 2 — это объекты, принадлежащие классу учебный курс. Каждый объект имеет значения атрибутов и доступ к операциям, определенным классом учебный курс.
«Хороший» класс представляет одну и только одну абстракцию, то есть должен отражать одну основную сущность. Например, класс, способный хранить информацию о студентах и данные о курсах, которые студент посещает в течение нескольких лет, не является «хорошим» классом, потому что не представляет одну сущность. Такой класс необходимо разделить на два связанных класса: студент и история студента.
Названия классов выбираются в соответствии с понятиями предметной области. Имя должно быть существительным в единственном числе, наиболее точно характеризующим предмет. В качестве имени класса можно использовать акроним, если он имеет одинаковое значение для всех представляемых сущностей. При использовании акронима в описании класса желательно указать полное название.
Иногда трудно отличить объект от класса. Почему, например, Алгебра 101, секция 1 — объект, а не класс? Что отличает его от объекта Алгебра 101, секция 2? Ответы на эти вопросы субъективны. Изучив эти объекты, можно заключить, что у них одинаковая структура и поведение. Они лишь являются разными учебными предметами семестра. Кроме того, в системе регистрации курсов можно обнаружить множество схожих сущностей с одинаковой структурой и поведением: Музыка 101, секция 1; История 101, секция 1; История 101, секция 2 и т. п. Значит, допустимо создание единого класса учебный курс (CourseOffering).
В языке UML классы изображаются в виде разделенных прямоугольников. В верхней секции указывается имя класса, средняя секция содержит его структуру — атрибуты, а нижняя описывает его поведение — операции. Класс показан на рис. 4.2.
Рис. 4.2. Нотация языка UML для класса
Рис. 4.3. Класс, созданный в окне браузера
Порядок создания классов в программе Rational Rose:
1. Щелкните правой кнопкой мыши по разделу Logical View (Логическое представление) в окне браузера.
2. В появившемся контекстно-зависимом меню выберите команду New => Class (Создать => Класс). В список браузера будет добавлен новый класс с именем New Class.
3. Введите нужное имя класса.
Класс в окне браузера показан на рис. 4.3.
Стереотипы и классыМы уже говорили о стереотипах отношений на диаграмме функций. Классы тоже могут иметь стереотипы. Как и ранее, стереотип используется для создания нового типа элемента моделирования, в данном случае для создания новых типов классов. Некоторые основные стереотипы класса — это сущность, граничный элемент, элемент управления, сервисный элемент и исключение.
Стереотип класса указывается под его именем и заключается в двойные треугольные скобки. Если требуется, стереотип можно отобразить графическим значком или выделить цветом. В программе Rational Rose есть изображения для стереотипов Rational Unified Process — управляющего элемента, сущности и граничного элемента. Эти стереотипы, а также пример класса со стереотипом исключение показаны на рис. 4.4.
Рис. 4.4. Классы со стереотипами
Обнаружение классовРецептов для поиска классов не существует. Как сказал Грейди Буч: «Это действительно трудно!» Rational Unified Process содержит средства, помогающие обнаружить в системе классы типа управляющий элемент, граничный элемент и сущность. Эти три стереотипа соответствуют концепции «модель — представление управление» и позволяют аналитику отделить друг от друга представление, предметную область и управление в системе.
По причине того, что процесс анализа и проектирования является итеративным, список классов со временем изменится. Начальный набор классов, скорее всего, будет отличаться от итогового. Поэтому для описания начального набора классов, обнаруженных в системе, часто используется термин «класс-кандидат».
Классы-сущности
Класс-сущность (entity class) используется для моделирования данных и поведения с длинным жизненным циклом. Этот тип классов может представлять сущности реального мира или внутренние элементы системы. Такие классы обычно не зависят от окружения, то есть они нечувствительны к взаимодействию окружающей среды с системой. Следовательно, они не зависят от приложения и могут использоваться в различных приложениях.
Первый шаг — изучить обязанности, описанные в потоке событий для выявления прецедентов (что система должна делать). Классы-сущности — это обычно те классы, которые требуются системе для выполнения определенных обязанностей. Использование существительных для описания обязанностей может стать хорошим началом. Исходный список нужно профильтровать, так как он будет содержать слова, не относящиеся к предметной области, языковые выражения, избыточные слова и существительные, описывающие структуру класса.
Классы-сущности обычно определяются на стадии проработки. Их часто называют классами предметной области, потому что они представляют собой абстракции предметов реального мира.
Граничные классы
Граничные классы (boundary class) обеспечивают взаимодействие между окружающей средой и внутренними элементами системы. Такие классы предоставляют интерфейс для пользователя или другой системы (то есть для актера). Они составляют внешне зависимую часть системы и используются для моделирования интерфейсов системы.
Для обнаружения граничных классов изучают пары актер/сценарий. Такие классы, определенные на фазе проработки, обычно являются классами верхнего уровня. Например, вы можете смоделировать окно, но не моделировать его диалоговые элементы и кнопки. В этом случае вы опишете требования пользовательского интерфейса, но не реализуете его.
Требования к пользовательскому интерфейсу порой недостаточно ясны. Обычно используются термины «дружественный» и «гибкий». Но дружественный интерфейс разными людьми трактуется по-разному Здесь могут пригодиться прототипы. Пользователь должен посмотреть и почувствовать систему, чтобы реально оценить, что значит «дружественный» И то, что это значит, затем представляется как структура и поведение граничного класса. На этапе проектирования такие классы совершенствуются и выносятся на обсуждение вопросов реализации пользовательского интерфейса.
Граничные классы также используются для обеспечения связи с другими системами. На этапе проектирования эти классы совершенствуются и выносятся на обсуждение вопросов реализации протоколов взаимодействия.