На этом шаге рассмотрим понятие кооперации в UML.
В контексте системной архитектуры кооперация позволяет выделить концептуальную часть, которая подчеркивает и статические, и динамические аспекты. Кооперацией называется сообщество классов, интерфейсов и других элементов, которые работают совместно, обеспечивая поведение, представляющее собой нечто большее, чем поведение всех тех же частей в сумме.
Кооперация помогает специфицировать реализацию вариантов использования и операций, а также моделировать архитектурно значимые механизмы системы.
Качественная программная система не только выполняет возложенные на нее функции, но и демонстрирует гармонию, то есть уравновешенность проекта, благодаря чему легко поддается модификации. Эта гармоничность и сбалансированность чаще всего объясняется тем, что хорошо структурированные объектно-ориентированные системы содержат множество повторяющихся структурных элементов-образцов (patterns). Если посмотреть на любую качественную объектно-ориентированную систему, то можно обнаружить элементы, взаимодействующие друг с другом для реализации некоторого совместного поведения, представляющего собой нечто большее, чем поведение суммы всех тех же составляющих. Многие элементы хорошо структурированных систем в разных комбинациях принимают участие в функционировании различных механизмов.
Образец описывает общее решение некоторой общей проблемы в определенном контексте. В любой хорошо структурированной системе всегда присутствует целый спектр образцов, включая идиомы (представляющие определенные общие приемы программирования), механизмы (образцы проектирования, представляющие концептуально законченные фрагменты системной архитектуры) и каркасы (архитектурные образцы, представляющие расширяемые шаблоны приложений в определенной области).
В UML механизмы моделируются с помощью коопераций. Кооперация именует совокупность взаимодействующих строительных блоков системы, включая как структурные, так и поведенческие элементы. Например, можно рассмотреть распределенную систему управления информацией, база данных которой размещается на нескольких узлах. С точки зрения пользователя обновление информации выглядит как атомарная операция. Если же взглянуть на нее изнутри, все окажется не так просто, поскольку в обновлении данных участвует несколько машин. Для создания иллюзии простоты необходимо ввести механизм транзакций, с помощью которого клиент может присвоить имя некоей операции, которая представляется единой и неделимой, несмотря на то что затрагивает несколько баз данных. В работе такого механизма могли бы принимать участие несколько кооперирующихся классов, совместно обеспечивающих транзакцию. Многие из этих классов будут вовлечены и в другие механизмы – например, в механизм хранения информации. Такой набор классов (структурная составляющая), взятый вместе с взаимодействиями между ними (поведенческая составляющая), образует механизм, который в UML представляется кооперацией.
Кооперация не только именует системные механизмы, но и служит в качестве реализации вариантов использования и операций. Графическое представление кооперации в UML показано на рис. 1.
Рис.1. Кооперации
Эта нотация позволяет визуализировать структурные и поведенческие строительные блоки системы, особенно в ситуациях, когда они пересекаются с классами, интерфейсами и другими элементами.
Приведенная нотация позволяет визуализировать кооперацию как единый фрагмент с точки зрения внешнего наблюдателя. Но более интересно то, что находится внутри кооперации. Раскройте ее, и вы увидите другие диаграммы, наиболее важные из которых – диаграммы классов (структурная составляющая кооперации) и диаграммы взаимодействия (ее поведенческая составляющая).
Кооперация (collaboration) – это сообщество классов, интерфейсов и других элементов, которые работают совместно для обеспечения определенного поведения, более значимого, чем поведение суммы всех тех же составляющих. Кооперация также показывает, как некий элемент – например, классификатор (включая класс, интерфейс, компонент, узел или вариант использования) либо операция, реализуется набором классификаторов и ассоциаций, каждая из которых определенным образом играет определенную роль. Кооперация изображается в виде эллипса с пунктирной границей.
Каждая кооперация должна иметь имя, отличающее ее от других коопераций. Имя – это текстовая строка; взятое в отдельности, оно называется простым. Квалифицированное имя кооперации снабжено префиксом – именем пакета, в котором она находится. Как правило, при изображении кооперации указывается только ее имя, как показано на рис. 1.
Имя кооперации может состоять из любых букв латинского алфавита, цифр и некоторых знаков препинания (за исключением таких, как двоеточие, которое используется для отделения имени кооперации от имени включающего его пакета). Имя может записываться в несколько строк; количество символов в нем не ограничено. На практике для именования коопераций используют краткие существительные, взятые из словаря моделируемой системы. Обычно первая буква имени кооперации – заглавная, например: Transaction (Транзакция), Chain of responsibility (Цепочка обязанностей).
На следующем шаге рассмотрим структуру кооперации.