Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
UML.doc
Скачиваний:
6
Добавлен:
16.11.2019
Размер:
8.2 Mб
Скачать

2.5.1.9. Соотнесение операций с сообщениями

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

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

После соотнесения всех операций Диаграмма последовательности для варианта использования “Принять новое поручение” (см. рис. 7) примет следующий вид (см. рис.19).

Рис.19. Диаграмма последовательности с соотнесенными операциями.

2.5.1.10. Связи

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

2.5.1.10.1. Ассоциации

Ассоциация (association) — это семантическая связь между классами. Ассоциация дает классу возможность узнавать об общих атрибутах и операциях другого класса. Ее рисуют на диаграмме клас­сов в виде обыкновенной линии. После того как классы связали ассоциацией, они могут передавать друг другу сообщения на диа­грамме Последовательности или Кооперативной диаграмме. Ассоциации могут быть двунаправлен­ными или однонаправленными. На языке UML двунаправленные ассоциации изображают в виде простой линии без стрелок или со стрелками с обеих сторон. На однонаправленной ассоциации ставят только одну стрелку, показывающую направление связи (см. рис.20).

Если между классами ас­социация двунаправленная, то соединенные классы знают об общих атрибутах и операци­ях друг друга, и могут посылать сообщения друг другу (см. рис.20).

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

Направление ассоциации можно определить, изучая диаграммы Последовательности и Коопера­тивные диаграммы. Если все сообщения на них отправляются только Формой и принимаются толь­ко Списком исполнителей, но не наоборот, между этими классами существует однонаправленная связь. Если хотя бы одно сообщение идет в обратную сторону, ассоциация должна быть двунаправленной.

Рис.20. Связи ассоциации

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

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

В случае однонаправленной ассоциации атрибут приёмника будет помещен внутри источника, но не наобо­рот.

Ассоциации могут быть рефлексивными. Рефлексивная ассоциация предполагает, что один экзем­пляр класса взаимодействует с другими экземплярами этого же класса. Рассмотрим класс ПапкаПоручений, с помощью которого организуется иерархический список. Тогда одна папка может быть родителем других папок. Поскольку все они являются взаи­модействующими друг с другом экземплярами класса ПапкаПоручений, мы получаем рефлексивную ассоциацию (см. рис.21).

Рис.21. Рефлексивная ассоциация

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]