Глава 6. Определение отношений

We use cookies. Read the Privacy and Cookie Policy

Глава 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].

Является ли отношение ассоциацией или агрегацией, часто зависит от предметной области. Какой тип отношений нужно выбрать для моделирования машины и шин? Если система предназначена для сервисного центра, и единственная причина, по которой вы рассматриваете шины, — их принадлежность к обслуживаемой машине, отношение должно быть агрегацией. Однако, если система предназначена для магазина шин, вы будете рассматривать шины независимо от автомобиля, следовательно, отношение должно быть ассоциативным.

Именование отношений

Ассоциации можно присвоить имя. Обычно в названии ассоциации используется глагол или фраза с глаголом, отражающая смысл связи. Так как фраза с глаголом предполагает направление чтения, желательно, чтобы название корректно читалось слева направо или сверху вниз. Слова можно изменить, чтобы читать название связи в другом направлении, например: преподаватель читает курс, курс читается преподавателем.

Надо отметить, что присваивать ассоциации имя необязательно. Название дается в том случае, если оно придает большую ясность модели. Агрегационные отношения обычно не имеют названий, потому что читаются с использованием слов «имеет» или «содержит».

Чтобы указать названия отношений в программе Rational Rose:

1. На диаграмме классов выделите линию связи, щелкнув по ней мышью.

2. Введите название отношения (см. рис. 6.5).

Рис. 6.5. Отношение с названием

Именование ролей

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

Для ввода названия роли в программе Rational Rose:

1. Щелкните правой кнопкой мыши по линии ассоциативной связи рядом с классом, к которому применяется роль.

2. В появившемся контекстно-зависимом меню выберите команду Role Name (Название роли).

3. Введите название роли.

На рис. 6.6 показана ассоциативная связь с названием роли.

Рис. 6.6. Название роли

Отношение, изображенное на рис. 6.6, можно прочитать в обоих направлениях:

? преподаватель играет роль учителя для учебного курса;

? учебный курс имеет отношение к преподавателю, играющему роль учителя.

В вопросе присваивания названий отношениям или ролям стандартов нет. Однако многие разработчики предпочитают использовать названия ролей вместо названий ассоциаций, потому что первые лучше передают смысл связи. Это характерно для двунаправленных отношений, так как для них трудно подобрать глагольное выражение, которое бы читалось корректно в обоих направлениях. Какой, например, глагол можно применить в названии ассоциации на рис. 6.6? А при использовании названия роли значение понятно в обоих направлениях.

Названия ассоциативных отношений и ролей применяются только для придания ясности модели. Если существует отношение между компанией и сотрудником, можно подобрать глагол «работает» для названия ассоциации или существительные «сотрудник» и «работодатель» для названия ролей, чтобы показать смысл связи. Если же дать классам имена сотрудник (employee) и работодатель (employer), необходимость в дополнительных названиях отпадет, так как смысл отношения понятен по названиям классов.

Мощность отношений

Мощность (multiplicity) отношения указывается для классов и определяет допустимое количество объектов, участвующих в отношении с каждой стороны. Есть два индикатора мощности для каждого отношения ассоциации или агрегации — по одному с каждой стороны линии связи. Перечислим основные индикаторы мощности:

1 — ровно один; 0…* — ноль или больше; 1…* — один или больше; 0…1 — ноль или один;

5…8 — определенный диапазон (5, 6, 7 или 8); 4…7, 9 — комбинация (4, 5, 6, 7 или 9).

Чтобы определить мощность в программе Rational Rose:

1. Дважды щелкните по линии связи на диаграмме — откроется диалоговое окно Specification (Параметры).

2. Выберите вкладку Detail (Детально) для нужной роли.

3. Укажите требуемое значение мощности в поле Cardinality (Численное отношение).

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

Индикаторы мощности показаны на рис. 6.7.

Рис. 6.7. Название роли

Диаграмму на рис. 6.7 можно объяснить так:

? один объект учебный курс связан с одним объектом преподаватель, который играет роль учителя. Например: математика 101, раздел 1 (объект учебный курс) имеет отношение к профессору Смиту (объект преподаватель);

? один объект преподаватель в роли учителя связан с объектами учебный курс в количестве от нуля до четырех. Например: профессор Смит (объект преподаватель) читает курсы математика 101, раздел 1; алгебра 200, раздел 2; дифференциальное исчисление 1, раздел 3 (объекты учебный курс). Так как мощность связи ограничена значениями от нуля до четырех, с объектом преподаватель может быть связано от нуля до четырех объектов учебный курс.

Возвратные отношения

Несколько объектов, принадлежащих одному классу, могут взаимодействовать друг с другом. Такое взаимодействие показывается на диаграмме классов как возвратная (reflexive) ассоциация или агрегация. Для возвратных отношений обычно используется название роли, а не отношения.

Последовательность создания возвратного отношения в программе Rational Rose:

1. На панели инструментов щелкните по кнопке Association (Ассоциация) или Aggregation (Агрегация).

2. Щелкните по классу и проведите линии связи на свободное место диаграммы.

3. Отпустите кнопку мыши.

4. Щелкните по линии связи и перетащите ее обратно на тот же класс.

5. Введите название роли и мощность для каждого конца возвратной ассоциации или агрегации.

Возвратное отношение на рис. 6.8 можно интерпретировать следующим образом:

Рис. 6.8. Возвратное отношение

? один объект предмет, выступающий в качестве вводного курса (prerequisite), связан с нулем или более объектами предмет;

? один объект предмет связан с нулем или более объектами предмет, выполняющими функцию вводных курсов.

Поиск отношений

Чтобы определить наличие отношений между двумя классами, изучают сценарии. Передача сообщений между объектами указывает на то, что последние взаимодействуют друг с другом. Ассоциации и агрегации обеспечивают путь для взаимодействия.

Отношения могут быть также выявлены на основе сигнатуры операций (см. главу 7).

Отношения в системе регистрации учебных курсов

Взаимодействующие объекты и типы отношений, определенные для сценария добавить учебный курс, перечислены в табл. 6.1.

Таблица 6.1. Отношения между классами

Диаграмма классов с указанными отношениями изображена на рис. 6.9.

Рис. 6.9. Отношения в сценарии добавить учебный курс

Отношения между пакетами

Отношения между пакетами также включают в модель. Такой тип связи является отношением зависимости и изображается в виде пунктирной стрелки, направленной к зависимому пакету (см. рис. 6.10). Если пакет А зависит от пакета В, значит, один или несколько классов в пакете А инициируют связь с одним или более общедоступными классами в пакете В. Пакет А в этом случае называется пакетом-клиентом (client package), а пакет В — пакетом-поставщиком (supplier package).

Рис. 6.10. Отношения между пакетами

Отношения между пакетами также выявляются путем изучения сценариев и отношений между классами системы. Так как это итеративный процесс, отношения могут измениться в ходе анализа и проектирования.

Отношения между пакетами в системе регистрации учебных курсов

В сценарии добавить учебный курс класс добавление учебного курса отправляет сообщение классу менеджер курсов преподавателя. Это указывает на наличие связи между пакетами Интерфейсы и Объекты университета. На данном этапе мы не можем выделить какие-либо отношения с пакетом Сведения о людях.

Для создания отношений между пакетами в программе Rational Rose:

1. Щелкните по кнопке Dependency Relationship (Отношение зависимости) на панели инструментов.

2. Щелкните по пакету-клиенту и перетащите линию связи к пакету-поставщику.

Отношения между пакетами в системе регистрации учебных курсов показаны на рис. 6.11.

Рис. 6.11. Отношения между пакетами в системе регистрации учебных курсов

Резюме

Отношения выступают в качестве проводника между объектами. Два типа объектных отношений, которые можно выделить на этапе анализа, — это ассоциации и агрегации. Ассоциацией называется двунаправленная семантическая связь между классами. Агрегация — это специальная форма ассоциации между целым и его частью или частями.

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

Мощность определяет количество экземпляров класса, участвующих в отношении. Есть два индикатора мощности для каждого отношения ассоциации или агрегации — по одному с каждой стороны линии связи.

Несколько объектов, принадлежащих одному классу, могут взаимодействовать друг с другом. Такое взаимодействие изображается на диаграмме классов как возвратная ассоциация или агрегация.

Для выявления отношений между двумя классами изучают сценарии.

Пакеты могут быть связаны отношением зависимости. Если пакет А зависит от пакета В, значит, один или несколько классов в пакете А инициируют связь с одним или более общедоступными классами в пакете В.

Данный текст является ознакомительным фрагментом.