Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Хьюз Камерон. Параллельное и распределенное программирование на С++ - royallib.ru.doc
Скачиваний:
117
Добавлен:
11.03.2016
Размер:
1.97 Mб
Скачать

Организация интерактивных объектов

Как видите, классы и интерфейсы можно использовать в качестве строительных блоков (т.е. базовых элементов) при создании более сложных классов и интерфейсов. В распределенной или параллельной системе возможно существование больших исложных структур, сотрудничающих с другими структурами, что создает объединение классов и интерфейсов, работающих вместе над достижением общих целей системы. В языке UML такое поведение называется сотрудничеством. Упомянутые выше строительные блоки могут включать как структурные, так и поведенческие элементы системы. Конкретная задача, которую запрашивает пользователь, может включать множество выполняемых вместе объектов. При этом для выполнения разных задач могут использоваться одни и те же объекты, взаимодействующие в разных случалх с различными элементами. Такая коллекция элементов (с учетом взаимодействия между ними) формирует сотрудничество. Понятие сотрудничества состоит из двух частей: структурной части, в которой акцент делается на характере организации и построении сотрудничающих элементов, и поведенческой, в которой основное внимание уделяется взаимодействию между элементами. (Об этом пойдет речь в слелующем разделе.)

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

Отображение параллельного поведения

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

• поведение объекта в течение его периода существования;

• поведение объектов, которые совместно работают ради достижения конкретной цели;

• поток управления с акцентом на определенном действии или последовательности действий;

• синхронизацию действий элементов и взаимодействие между ними.

В этом разделе также описаны диаграммы, используемые для моделирования распределенных объектов.

Сотрудничество объектов

Сотрудничество объектов заключается в привлечении друг друга к работе с целью выполнения некоторой конкретной задачи. Они не вступают в постоянные отношения. Одни и те же объекты могут привлекаться разными объектами для выполнения различных задач. Сотрудничество объектов можно представить в виде диаграммы сотрудничества. Диаграммы сотрудничества имеют структурную и интерактивную части. Структурную часть мы рассмотрели выше. Интерактивнал часть отображается в виде графа, вершинами которого являются объекты — участники рассматриваемого сотрудничества. Связи между объектами представляются ребрами. Ребра могут сопровождаться сообщениями, передаваемыми между объектами, вызовами методов и индикаторами стереотипов, которые позволяют подробнее отобразить характер связи.

Связь между объектами имеет тип ассоциации. С двумя связанными объектами мотут выполняться действия. В результате действия может измениться состояние одного или двух объектов. Приведем примеры различных типов действий, связанных с объектами.

create  Объект может быть создан

destroy  Объект может быть разрушен

call  Операция, определенная в одном объекте, может быть вызвана другим объектом или им самим

return  Объекту возвращается значение

send  Объекту может быть послан сигнал

При вызове и выполнении любо г о м етода воз м ожно наличие передавае м ых параметров и возвра щ аемо г о значения (а также другие действия).

Эти действия могут иметь место, если принимающий объект видим для вызывающего. Для объяснения причины видимости объекта можно использовать следующие стереотипы.

association Объект видим по причине существования ассоциации (самый общий случай)

parameter Объект видим, поскольку он является параметром для вызывающего объекта

local Объект видим, поскольку он имеет локальную область видимости для вызывающего объекта

global Объект видим, поскольку он имеет глобальную область видимости для вызывающего объекта

self Объект вызывает собственный метод

Помимо перечисленных, возможно применение и других стереотипов.

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

Как показано на рис. 10.7, объект MainObject выполняет две операции в слелующей последовательности:

1: << create >>

2: Value := performAction(ObjectF)

При выполнении операции 1 объект MainObject создает объект Obj ectA. Объект ObjectA локален по отношению к объекту MainObject (поскольку имеет место включение объектов). Это инициирует первую последовательность операций во вложенном потоке управлени я. Дл я обозначения всех операций этой последовательности используется число 1, за которым следует число, отражающее порядок их выполнения. Итак, первая операция последовательности 1 такова: 1.1: initialize()

Объект ObjectA вызывает собственный метод. Выполнение объектом собственно г о метода выражается соединительной линией, связываю щ ей объект с самим собой, и индикатором стереотипа {self} ({caм } ).Onepaция ObjectA::initialize() также запускает другую последовательность действий:

1.1.1 : initializeB()

1.1.2: initializeC()

В этой последовательности два других объекта (которые локальны по отношению кобъекту ObjectA) инициализируются посредством вызова соответствую щ их методов инициализации. Операция 2: performAction(ObjectD)

является началом еще одной вложенной последовательности действий. Объекту ObjectA передается объект ObjectD. Объект ObjectA вызывает операцию, определенную в объекте ObjectD:

2.1: doAction()

Объект ObjectA имеет право вызвать эту операцию, поскольку объект ObjectD является параметро м (переданны м объекто м MainObject), как от м ечено стереотипо м {parameter}. В результате выполнения этой последовательности действий объекту ObjectA возвра щ ается значение и объекту MainObject также возвра щ ается значение. По м и м о ко м бинаций порядковых номеров, обозначение этих вложенных потоков управления можно усилить с помощью линии с зачерненной стрелкой, указывающей в направлении выполнения последовательности действий.