В отличие от других глав этой книги, в данной не обсуждаются формальные диаграммы UML 2. В стандарте UML кооперации рассматриваются как часть составных структур, но диаграмма коопераций в действительности совершенно отличается от составных структур и применялась в UML 1 без всякой связи с составными структурами. Поэтому я счел, что лучше обсудить кооперации в отдельной главе.
Рассмотрим систему обозначений аукциона. В любом аукционе (Auction) могут участвовать продавец (seller), покупатели (buyer), множество вещей (lot) и какие-либо предложения о покупке (offer). Мы можем описать эти элементы в терминах диаграммы классов (рис. 15.1) и, возможно, посредством нескольких диаграмм взаимодействий (рис. 15.2).
На рис. 15.1 представлена не совсем обычная диаграмма классов. Во-первых, она обведена пунктирным эллипсом, который представляет аукционную кооперацию. Во-вторых, так называемые классы в кооперации - это не классы, а роли (roles), которые реализовываются в процессе выполнения кооперации, поэтому их имена начинаются с маленькой буквы. Сопоставление фактических интерфейсов или классов ролям кооперации не является чем-то необычным, но тем не менее вы не обязаны это делать.
|
|
Как видите, на диаграмме взаимодействий участники именуются немного необычно. В кооперации схема именования выглядит следующим образом:
имя-участника / имя-роли: имя-класса.
Как всегда, все эти элементы необязательны.
Применение кооперации можно обозначить, отмечая ее наличие на диаграмме классов, как показано на рис. 15,3, где представлены некоторые классы приложения. Связи, идущие от кооперации к этим классам, показывают, как классы играют различные роли, определенные в кооперации.
В языке UML предполагается, что можно показать применение паттернов, но вряд ли автор каких-либо паттернов будет это делать. Эрих Гамма (Erich Gamma) разработал прекрасную альтернативную нотацию (рис. 15.4). Элементы диаграммы обозначаются либо именем паттерна, либо комбинацией паттерн: роль.