□ сообщения в виде текста и стрелки, направленной от клиента к поставщику.
Нотация языка UML для объектов, связей и сообщений на диаграмме взаимодействий показана на рис. 5.10.
Последовательность создания диаграмм взаимодействий из диаграмм последовательности действий в программе Rational Rose:
1. Дважды щелкните по диаграмме последовательности действий в списке браузера, чтобы открыть диаграмму.
2. Выберите команду меню Browse => Create collaboration diagram (Просмотр => Создать диаграмму взаимодействий) или нажмите клавишу F5.
3. Расположите объекты и сообщения на диаграмме нужным образом.
Рис. 5.10. Нотация языка UML для объектов, связей и сообщений на диаграмме взаимодействий
Диаграмма взаимодействий показана на рис. 5.11.
Можно сначала создать диаграмму взаимодействий. В этом случае диаграмма последовательности действий может быть получена из нее. Для этого необходимо
Рис. 5.11. Диаграмма взаимодействий
выбрать команду меню Browse => Create Sequence Diagram (Просмотр => Создать диаграмму последовательности действий) или нажать клавишу F5.
Зачем нужны две разные диаграммыДиаграмма последовательности действий используется для просмотра сценария во временном порядке: что происходит сначала, что происходит затем. Заказчики легко могут читать и понимать такие диаграммы. Поэтому они очень полезны на стадии анализа. Диаграмма взаимодействий представляет общую картину сценария, так как взаимодействия на ней организованы между связанными друг с другом объектами. Такой тип диаграмм чаще используется на этапе проектирования, когда планируется реализация отношений.
Диаграмма последовательности действий для системы регистрации курсовПродолжим анализ сценария добавление учебного курса (Add a Course Offering). Диаграмма показана на рис. 5.12.
Рис. 5.12. Диаграмма последовательности действий для сценария добавление учебного курса
Диаграммы классов могут быть также прикреплены к реализациям прецедентов. Они содержат представления классов, участвующих в выполнении прецедентов (participating classes).
Последовательность создания представления участвующих классов в программе Rational Rose:
1. Щелкните правой кнопкой мыши по реализации прецедента в окне браузера.
2. В появившемся контекстно-зависимом меню выберите команду New => Class Diagram (Создать => Диаграмма классов).
3. Введите имя новой диаграммы.
4. Дважды щелкните по новой диаграмме в списке браузера, чтобы открыть ее.
5. Выберите класс в логическом представлении модели и перетащите его на диаграмму с помощью мыши.
6. Аналогичным образом поместите на диаграмму другие нужные классы.
Участвующие классы для прецедента выбор предметов для обучения показаны на рис. 5.13.
Рис. 5.13. Схема классов, участвующих в прецеденте
РезюмеДиаграмма прецедентов представляет внешний вид системы. Выполнение прецедентов отображается с помощью потока событий. Сценарии используются для описания того, как прецеденты реализуются в виде взаимодействия между группами объектов. Сценарий — это экземпляр прецедента. Он представляет собой одиночный проход по потоку событий для прецедента. Таким образом, каждый прецедент — это сплетение сценариев. Они помогают выделить объекты, классы и взаимодействия объектов, необходимые для исполнения единичного действия, определенного прецедентом.
Поток событий для прецедентов обычно описывается словами, тогда как сценарии — диаграммами взаимосвязи. Существует два типа диаграмм взаимосвязи — диаграммы последовательности действий (sequence diagrams) и диаграммы взаимодействий (collaboration diagrams). Каждая диаграмма — это графическое представление сценария.
Диаграмма последовательности действий отображает взаимодействие объектов, упорядоченное по времени. Диаграмма взаимодействий — это альтернативный способ отображения сценариев. Этот тип диаграммы показывает взаимодействие объектов, организованное вокруг самих объектов, и их связи друг с другом.
Глава 6. Определение отношений
Необходимость отношенийСистема состоит из большого количества классов и объектов. Ее поведение обеспечивается взаимодействием объектов. Например, студент добавляется к курсу, когда на курс поступает сообщение добавить студента. В этом случае часто говорят, что объект посылает сообщение другому объекту. Отношения выполняют функцию проводников между объектами. Два типа отношений, которые можно выделить на этапе анализа, — это ассоциация и агрегация.
Ассоциативные отношенияАссоциация (association) — это двунаправленная семантическая связь между классами. Это не поток данных, определяемый в структурном анализе и проектировании, — данные могут поступать в обоих направлениях ассоциативной связи. Наличие ассоциации между классами говорит о том, что объекты этих классов взаимосвязаны. Например, ассоциативные отношения между классами предмет (Course) и менеджер курсов преподавателя (ProfessorCourseManager) означают, что объекты класса предмет связаны с объектами класса менеджер курсов преподавателя. Количество связанных объектов зависит от мощности ассоциативных отношений. В языке UML ассоциативные отношения изображаются в виде линии, соединяющей связанные объекты, — см. рис. 6.1.
Рис. 6.1. Нотация языка UML для ассоциативного отношения
Последовательность создания ассоциативных отношений в программе Rational Rose:
1. На панели инструментов щелкните по кнопке Association (Ассоциация). Если она отсутствует, щелкните правой кнопкой мыши на панели инструментов и выберите команду Customize (Настройка) в появившемся контекстно-зависимом меню.
2. Щелкните по одному из классов на диаграмме классов.
3. Перетащите возникшую линию ассоциативной связи на второй класс.
Ассоциативное отношение между классами показано на рис. 6.2.
Рис. 6.2. Ассоциативное отношение
Агрегационные отношенияАгрегационное отношение — это специальная форма ассоциации между целым и его частью или частями. Агрегация известна как отношение типа «часть от» или «содержит». В языке UML она изображается так же, как ассоциация, но с ромбом на конце линии связи, означающим класс-агрегат (целое), — см. рис 6.3.
Рис. 6.3. Нотация языка UML для агрегационного отношения
Чтобы определить, является ли ассоциативная связь агрегационной, воспользуйтесь следующими тестовыми вопросами:
1. Можно ли применить фразу «часть от», чтобы описать отношение?
2. Происходит ли автоматическое применение некоторых операций над целым к его частям (например, удаление предмета (Course) ведет к удалению всех относящихся к нему учебных курсов (CourseOffering))?
3. Существует ли выраженная асимметрия в отношении, когда один класс подчинен другому?
Например, предмет (математика 101) может читаться несколько раз в течение семестра. Каждый курс лекций по предмету представлен как учебный курс (то есть математика 101, раздел 1 или математика 101, раздел 2). Отношения между предметом и учебным курсом моделируются как агрегация — предмет содержит несколько учебных курсов.
Для создания агрегационных отношений в программе Rational Rose:
1. На панели инструментов щелкните по кнопке Aggregation (Агрегация). Если она отсутствует, щелкните правой кнопкой мыши по панели инструментов и в появившемся контекстном меню выберите команду Customize (Настройка) для добавления кнопки.
2. На диаграмме классов щелкните по классу, выступающему в качестве целого, и перетащите возникшую линию агрегационной связи на класс, являющийся частью.
Агрегационное отношение между классами показано на рис. 6.4.
Рис. 6.4. Агрегационное отношение
Ассоциация или агрегацияЕсли два класса жестко связаны отношением «целое-часть» — это типичное агрегационное отношение. «Использование агрегации иногда является условным решением. Часто далеко не очевидно, должна ли ассоциация моделироваться как агрегация. Однако, если вы аккуратно и последовательно рассуждали, небольшое различие между агрегацией и обычной ассоциацией не вызовет практических проблем»[5].
Является ли отношение ассоциацией или агрегацией, часто зависит от предметной области. Какой тип отношений нужно выбрать для моделирования машины и шин? Если система предназначена для сервисного центра, и единственная причина, по которой вы рассматриваете шины, — их принадлежность к обслуживаемой машине, отношение должно быть агрегацией. Однако, если система предназначена для магазина шин, вы будете рассматривать шины независимо от автомобиля, следовательно, отношение должно быть ассоциативным.