2. Язык UML. Руководство пользователя. Буч_ Рамбо_ Якобсон (2-е издание) (2006) (1185732), страница 44
Текст из файла (страница 44)
В контексте варианта использования взаимодействие описывает сценарий, представляющий, в своюочередь, отдельный поток варианта использования.Объекты и ролиОбъекты, которые участвуют во взаимодействии, могут бытьлибо конкретными сущностями, либо прототипами. Как конкретные сущности они выражают вполне определенные реалии. Например, p – экземпляр класса Person (Человек) – описывает конкретноелицо. С другой стороны, как прототипная сущность p может представлять любой экземпляр класса Person.На заметку. В кооперациях взаимодействия часто связывают не объекты реального мира, а прототипные сущности,играющие определенные роли, хотя иногда бывает удобноописать кооперации и между конкретными объектами.Взаимодействия226Базовые понятияВ контексте взаимодействия вы можете обнаружить экземпляры классов, компонентов, узлов и вариантов использования.
Хотяабстрактные классы и интерфейсы по определению не могут иметьпрямых экземпляров, их экземпляры можно представить во взаимодействии. Последние не являются прямыми экземплярами абстрактных классов или интерфейсов, но могут представлять, соответственно, косвенные, или прототипные, экземпляры любых конкретныхпотомков абстрактного класса либо некоего конкретного класса, реализующего интерфейс.ЭкземплярыВы можете рассматривать диаграмму объектов как представлеобсуждают- ние статического аспекта взаимодействия, устанавливающее стадиюся в главе 13, взаимодействия посредством специфицирования всех объектов,диаграммыкоторые работают вместе. Между тем взаимодействие идет ещеобъектов–дальше, представляя динамическую последовательность сообщев главе 14.ний, которые могут передаваться по ссылкам, соединяющим данные объекты.227(task: String):именованная роль( AC current )Ссылка (link) – это семантическое соединение объектов другс другом.
Вообще говоря, ссылка – это экземпляр ассоциации. Какпоказывает рис. 16.2, когда между классами установлена связь ассоциации, между экземплярами этих классов обязательно должнасуществовать ссылка. При наличии ссылки между двумя объектамиодин из них может посылать сообщения другому.Ссылка указывает путь, по которому один объект может посылать сообщения другому (или самому себе). В большинствеслучаев достаточно констатировать сам факт, что такой путь существует. Если вам нужно точнее описать его, вы можете снабдитьсоответствующий его конец одним из нижеперечисленных ограничений: association – указывает, что соответствующий объект виденассоциации; self – указывает, что соответствующий объект виден, поскольку он является диспетчером операции; global – указывает, что соответствующий объект виден, поскольку он находится в объемлющей области действия; local – указывает, что соответствующий объект виден, поскольку он находится в локальной области действия; parameter – указывает, что соответствующий объект виден,потому что он является параметром.анонимная рольэкземпляр сообщенияСсылки и коннекторыАссоциацииобсуждаются в главах 5 и 10,коннекторыи роли –в главе 15.коннекторCharles SteinmetzGeneral Electric: КомпанияссылкаРис.
16.2. Ассоциации, ссылки и коннекторыНа заметку. Как экземпляр ассоциации ссылка может изображаться вместе с большинством дополнений, соответствующихассоциации, таких как его имя, имя ассоциированной роли,навигация и агрегация. Однако множественность неприменима к ссылкам, поскольку они являются экземплярами ассоциаций.Роли,коннекторыи внутренние структуры обсуждаютсяв главе 15,взаимодействия – в главе 28.Разработчики большинства моделей более заинтересованы в прототипных объектах и ссылках, существующих в определенном контексте, чем в конкретных индивидуальных объектах с их ссылками.Прототипный объект называется ролью, а прототипная связь – коннектором; контекст – это кооперация или внутренняя структура классификатора.
Множественность ролей и коннекторов определена относительно включающего их контекста. Например, множественностьроли равная 1 означает, что на один объект, представляющий контекст, приходится один объект, представляющий роль. КооперацияВзаимодействия228или внутренняя структура может использоваться много раз, каки объявление класса, причем каждое такое использование связанос отдельным набором объектов и ссылок для данного контекста ролей и ссылок.В качестве примера в верхней части рис. 16.2 показана диаграмма классов, которая объявляет классы Person (Человек) и Company(Компания), а также существующую между ними ассоциацию«многиеFкоFмногим» employee–employer (наниматель–работник). Средняя часть рисунка представляет содержимое кооперации WorkAssignment(НазначениеНаДолжность), название которой говорит само за себя.Она включает в себя две роли с коннектором между ними.
В нижней части рисунка вы видите экземпляр кооперации, в котором естьобъекты и ссылки, представляющие роли и коннекторы. Конкретноесообщение представляет прототипное объявление сообщения в данной кооперации.Базовые понятияВ UML можно моделировать несколько типов сообщений.Операцииобсуждаются в главах 4 и 9,сигналы –в главе 21.Операцииобсуждаются в главах 4 и 9,события –в главе 21,экземпляры – в главе 13.Предположим, у вас есть набор объектов и ряд ссылок, соединяющих эти объекты. Если это все, чем вы располагаете, то речьидет о полностью статической модели, описываемой диаграммойобъектов. Последняя моделирует состояние сообщества объектовв заданный момент времени и применяется в случае, когда нужновизуализировать, специфицировать, конструировать или документировать статическую структуру объектов.Теперь допустим, что вы хотите смоделировать изменяющееся состояние сообщества объектов за некоторый период времени.Чтобы представить это наглядно, вообразим фильм, каждый кадркоторого демонстрирует перемещение набора объектов в следующий момент времени.
Если эти объекты не являются статическими,то вы увидите передачу сообщений другим объектам, отправку событий и вызов операций. Вдобавок в каждом кадре можно явно визуализировать текущее состояние и роль индивидуальных экземпляров.Сообщение – это спецификация взаимодействия объектов, обеспечивающего передачу информации, которая должна инициировать определенные действия. Момент приема экземпляра сообщения может рассматриваться как случай возникновения события;случай (occurrence) – это термин UML, описывающий экземплярсобытия.Когда вы передаете сообщение, то в результате его приемаобычно происходит некоторое действие.
Оно может заключаться в изменении состояния целевого объекта и объектов, доступных ему. call (вызвать) – вызывает операцию объекта. Объект можетпосылать сообщение самому себе, в результате происходитлокальный вызов операции; return (возвратить) – возвращает значение вызывающему объекту; send (послать) – посылает сигнал объекту; create (создать) – создает объект; destroy (уничтожить) – уничтожает объект.
Объект можетуничтожить сам себя.На заметку. В дополнение к пяти основным видам сообщенийвы можете производить и более сложные действия над индивидуальными объектами. UML не специфицирует синтаксисили семантику таких действий; предполагается, что инструментальные средства должны использовать разные языки описания действий либо применять синтаксис языков программирования.СообщенияДиаграммыобъектовобсуждаютсяв главе 14.229Созданиеи удалениеобъектоввизуализируются какстереотипы,описаниекоторыхприводитсяв главе 6.Разницамежду синхроннымии асинхроннымисообщенияминаиболеесущественнав контекстепараллельности;об этомпойдет речьв главе 23.В UML эти типы сообщений различаются визуально, как показано на рис.
16.3.ролидействительныйпараметрвозвратить(локально)(route)«destroy»Рис. 16.3. СообщенияИз всех видов сообщений наиболее часто вам придется моделировать вызов (когда один объект вызывает операцию другогообъекта или свою собственную). Объект не может вызвать любую230Классыобсуждаютсяв главах 4и 9.Взаимодействияпроизвольную операцию. Если объект наподобие c из предыдущегопримера вызывает, скажем, операцию setItinerary (указатьНаправление) на экземпляре класса TicketAgent (АгентПоПродажеБилетов) –то есть она должна быть объявлена в классе TicketAgent или в одномиз его родителей, – то эта операция должна быть видима для вызывающего объекта c.На заметку. Такие языки, как C++, типизированы статически(хотя и полиморфно).
Это означает, что корректность вызововпроверяется во время компиляции. А вот языки наподобиеSmallTalk являются динамически типизированными – следовательно, до времени исполнения нельзя определить, можетли объект принять конкретное сообщение. В UML хорошосогласованная модель вообще может быть проверена статически с помощью инструментальных средств, посколькуна момент моделирования проектировщик, как правило,представляет себе назначение операций.Когда объект вызывает операцию или посылает сигнал другомуобъекту, вы можете снабдить сообщение конкретным параметром.Аналогичным образом, когда один объект возвращает управлениедругому, вы также можете смоделировать возвращаемое значение.ИнтерфейсыСообщения могут иметь отношение и к посылке сигналов. Сигобсуждают- нал (signal) – это значение объекта, передаваемое целевому объектуся в главе 11.