Лекции (1 курс, 2 семестр) УТкПО / Управление требованиями к программному обеспечению 4
.pdf
Кратность определяет количество экземпляров одного класса, которые могут быть связаны с экземпляром другого класса
Кратность нуль-или-один
Одно из окон рабочей станции может быть выделено для сообщений об ошибках. Однако можно и не выделять такого окна. (Слово console на диаграмме – это название полюса ассоциации)
Несколько связей между двумя объектами можно моделировать несколькими ассоциациями
Кратность «много» указывает, что объект может быть связан с произвольным количеством объектов. Однако для каждой ассоциации между конкретной парой объектов может существовать только одна связь (за исключением мультимножеств и последовательностей – рассматриваются далее). Если между двумя объектами должно быть две связи, необходимо создать две ассоциации
Кратность и требования к ПО
Кратность зависит от предположений и от определенных разработчиком границ задачи. Нечеткие требования часто затрудняют определение кратности.
Не следует сильно беспокоиться о правильных значениях кратности на начальных этапах разработки системы. Сначала следует определить классы и ассоциации, а затем указывать кратность.
Если кратность не указана на диаграмме, она считается неопределенной.
Недооценивая кратность, вы можете ограничить гибкость приложения.
С другой стороны, переоценка кратности вызывает дополнительные расходы и требует указания дополнительной информации для того, чтобы различать членов множества.
Имена полюсов ассоциации
Кратность неявно подразумевает наличие полюсов ассоциации (association end).
Например, ассоциация один-к-многим имеет два полюса, у одного из которых указана кратность «один», а у другого – «много».
Концепция полюса ассоциации – одна из важнейших в UML. Полюс ассоциации может иметь не только кратность, но и свое собственное имя. Имена полюсов ассоциаций часто присутствуют в описаниях задач в виде существительных. Имя полюса указывается около конца ассоциации .
Каждый полюс ассоциации может иметь имя
Person (Человек) и Company (Компания) участвуют в ассоциации WorksFor (Работает На). Человек по отношению к компании является сотрудником (employee), а компания по отношению к человеку – работодателем
(employer).
Использование имен полюсов ассоциаций не является обязательным, но чаще всего оказывается проще указывать имена полюсов вместо имен ассоциаций или, по крайней мере, вместе с ними.
Имена полюсов ассоциаций обязательны
для установления ассоциаций между двумя объектами одного и того же класса.
Имена container и contents позволяют различить два случая использования класса Directory (Каталог), который имеет ассоциацию с самим собой.
Каталог может содержать вложенные каталоги и даже может содержаться сам в себе. Имена полюсов ассоциаций позволяют различать между собой разные ассоциации между одними и теми же классами. Каталог имеет ровно одного пользователя, который является владельцем, и множество пользователей, которые имеют право работать с каталогом.
Если между парой классов существует только одна ассоциация, имени классов может быть вполне достаточно, поэтому имена полюсов можно не указывать.
Моделирование ссылок на один и тот же класс
При построении диаграмм классов следует корректно использовать имена полюсов ассоциаций и не вводить отдельный класс для каждой ссылки.
В некорректной модели Человек с Ребенком может быть представлен двумя экземплярами: один для родителя и один для ребенка. В корректной модели экземпляр Человека принимает участие в двух и более связях: дважды в качестве родителя и произвольное количество раз в качестве ребенка. В корректной модели нужно показать, что ребенок не обязательно должен иметь родителя, чтобы рекурсия могла быть прервана.
Упорядочение
Достаточно часто объекты у полюса ассоциации с обозначением кратности «много» не имеют никакого выраженного порядка. В этом случае их можно рассматривать как множество.
В примере изображен экран рабочей станции с перекрывающимися окнами. Каждое окно присутствует на экране не более чем в одном экземпляре. Окна имеют явный порядок, и в каждой конкретной точке экрана видимо только одно из них (верхнее). Упорядочение является внутренним свойством ассоциации. Упорядоченность множества объектов можно указать при помощи слова {ordered}, которое ставится около соответствующего полюса ассоциации.
Мультимножества и последовательности
В примере маршрут – это последовательность аэропортов, причем один и тот же аэропорт можно посетить несколько раз.
Обратите внимание, что разница между {ordered} и {sequence} состоит в том, что первое обозначение запрещает наличие дубликатов, а второе – разрешает.
Бинарная ассоциация обычно позволяет создать между парой объектов не более одной связи. Однако указав около полюса ассоциации слова {bag} или {sequence}, вы можете разрешить создание множества связей между двумя объектами.
Мультимножество (bag) – это совокупность элементов, в которой допускается наличие дубликатов.
Последовательность (sequence) – это упорядоченная совокупность элементов, в которой также допускается наличие дубликатов.
Обозначения {bag} и {sequence}, как и {ordered},
применимы только к бинарным ассоциациям.
