Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции (1 курс, 2 семестр) УТкПО / Управление требованиями к программному обеспечению 4

.pdf
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
1.49 Mб
Скачать

Кратность определяет количество экземпляров одного класса, которые могут быть связаны с экземпляром другого класса

Кратность нуль-или-один

Одно из окон рабочей станции может быть выделено для сообщений об ошибках. Однако можно и не выделять такого окна. (Слово console на диаграмме – это название полюса ассоциации)

Несколько связей между двумя объектами можно моделировать несколькими ассоциациями

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

Кратность и требования к ПО

Кратность зависит от предположений и от определенных разработчиком границ задачи. Нечеткие требования часто затрудняют определение кратности.

Не следует сильно беспокоиться о правильных значениях кратности на начальных этапах разработки системы. Сначала следует определить классы и ассоциации, а затем указывать кратность.

Если кратность не указана на диаграмме, она считается неопределенной.

Недооценивая кратность, вы можете ограничить гибкость приложения.

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

Имена полюсов ассоциации

Кратность неявно подразумевает наличие полюсов ассоциации (association end).

Например, ассоциация один-к-многим имеет два полюса, у одного из которых указана кратность «один», а у другого – «много».

Концепция полюса ассоциации – одна из важнейших в UML. Полюс ассоциации может иметь не только кратность, но и свое собственное имя. Имена полюсов ассоциаций часто присутствуют в описаниях задач в виде существительных. Имя полюса указывается около конца ассоциации .

Каждый полюс ассоциации может иметь имя

Person (Человек) и Company (Компания) участвуют в ассоциации WorksFor (Работает На). Человек по отношению к компании является сотрудником (employee), а компания по отношению к человеку – работодателем

(employer).

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

Имена полюсов ассоциаций обязательны

для установления ассоциаций между двумя объектами одного и того же класса.

Имена container и contents позволяют различить два случая использования класса Directory (Каталог), который имеет ассоциацию с самим собой.

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

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

Моделирование ссылок на один и тот же класс

При построении диаграмм классов следует корректно использовать имена полюсов ассоциаций и не вводить отдельный класс для каждой ссылки.

В некорректной модели Человек с Ребенком может быть представлен двумя экземплярами: один для родителя и один для ребенка. В корректной модели экземпляр Человека принимает участие в двух и более связях: дважды в качестве родителя и произвольное количество раз в качестве ребенка. В корректной модели нужно показать, что ребенок не обязательно должен иметь родителя, чтобы рекурсия могла быть прервана.

Упорядочение

Достаточно часто объекты у полюса ассоциации с обозначением кратности «много» не имеют никакого выраженного порядка. В этом случае их можно рассматривать как множество.

В примере изображен экран рабочей станции с перекрывающимися окнами. Каждое окно присутствует на экране не более чем в одном экземпляре. Окна имеют явный порядок, и в каждой конкретной точке экрана видимо только одно из них (верхнее). Упорядочение является внутренним свойством ассоциации. Упорядоченность множества объектов можно указать при помощи слова {ordered}, которое ставится около соответствующего полюса ассоциации.

Мультимножества и последовательности

В примере маршрут – это последовательность аэропортов, причем один и тот же аэропорт можно посетить несколько раз.

Обратите внимание, что разница между {ordered} и {sequence} состоит в том, что первое обозначение запрещает наличие дубликатов, а второе – разрешает.

Бинарная ассоциация обычно позволяет создать между парой объектов не более одной связи. Однако указав около полюса ассоциации слова {bag} или {sequence}, вы можете разрешить создание множества связей между двумя объектами.

Мультимножество (bag) – это совокупность элементов, в которой допускается наличие дубликатов.

Последовательность (sequence) – это упорядоченная совокупность элементов, в которой также допускается наличие дубликатов.

Обозначения {bag} и {sequence}, как и {ordered},

применимы только к бинарным ассоциациям.