Кооперативные диаграммы
Рисунок 22. Диаграмма кооперации САМ ПС
Самоделегирование - это сообщения, которые объект посылает самому себе, при этом стрелки сообщение указывает на туже самую линию, но жизни.
Хороший способ первоначального обнаружения некоторых объектов - это изучение имен существительных в потоке событий. Можно также прочитать документы, описывающие конкретный сценарий. Поток событий для варианта использования "снять деньги мо счета" говорит о человеке, снимающем некоторую сумму денег со счета с помощью банкомата, не все объекты, показанные на диаграмме, явно присутствуют в потоке событий. Там, например, может не быть форм для заполнения, но их необходимо показать на диаграмме, чтобы позволить действующему лицу ввести новую информацию в систему или просмотреть ее в потоке событий. Скорее всего, не будет и управляющих объектов, которые управляют последовательностью событий в варианте использования.
Также как и диаграммы последовательности, кооперативные диаграммы отправляют поток событий через конкретный сценарий варианта использования, диаграмма последовательности упорядочена по времени, а кооперативные диаграммы заостряют внимание на связях между объектами.
Как видно из рисунка, здесь представлена вся та информация, которая была и на диаграмме последовательности, но кооперативная диаграмма по-другому описывает поток событий. Из нее легче понять связи между объектами, однако труднее уяснить последовательность событий. По этой причине часто для какого-либо сценария создают диаграммы обоих типов. На кооперативной диаграмме также как и на диаграмме последовательности стрелки обозначают сообщения, обмен которыми осуществляется в рамках данного варианта использования. Их временная последовательность указывается путем нумерации сообщений.
Диаграммы состояний
Определяют все возможные состояния, в которых может находиться конкретный объект, а также процесс смены состояний объекта в результате наступления некоторых событий. Существует много форм диаграмм состояний не значительно отличающихся друг от друга семантикой.
Диаграмма-состояние "Сервер АСОУП"
Рисунок 23. Диаграмма состояний
(1) – Считывание ПСЧ номера КБД.
(2) – Формирование сообщения 266 ПСЧ концентратору линейного уровня.
(3) – Работа приложения-клиента на концентраторе линейного уровня
(3) Работа сервера на концентраторе дорожного уровня
(4) – Формирование концентратором дорожного уровня сообщений 200 (отправление), 201 (прибытие) или 202 (проследование).]
В примере можно наблюдать процесс перехода сообщения от КБД из одного состояния в другое. Формирование сообщения в АСОУП называется "событием". Именно такие события и вызывают переход из одного состояния в другое. Заключенное в квадратные скобки условие определяет, когда может произойти переход из одного состояния в другое.
На диаграмме имеется 2 состояния: начальное и конечное. Начальное состояние выделено черной точкой, оно соответствует состоянию объекта, когда он только что был создан. Конечное состояние обозначается черной точкой в белом круге, оно соответствует состоянию объекта непосредственно перед его уничтожением. На диаграмме состояний может быть одно и только одно начальное состояние. В тоже время может быть столько конечных состояний, сколько необходимо, или их может не быть вообще.
Когда объект находится в каком-то конкретном состоянии, могут выполняться различные процессы.
Процессы, происходящие в этот момент, когда объект находится в определенном состоянии (действия по обработке очередного сообщения), называется "действием" (action). С состоянием можно связывать следующие данные: деятельность, входное действие, выходное действие и событие.
Рассмотрим каждый из них в контексте диаграммы передача сообщений серверами АСОУП.
1. Деятельность - это поведение реализуемое объектом, пока он находится в данном состоянии. Например, когда сообщение проходит состояние ПСЧ, происходит считывание ОСА номера КБД, вместе с номером пункта считывания, сведениями о срабатывании датчиков фиксации прохождения колесной оси.
2. Деятельность - это прерываемое поведение, оно может выполняться до своего завершения, пока объект находится в данном состоянии или может быть прервано переходом объекта в другое состояние. Деятельность изображают внутри самого состояния. Ее обозначению должно предшествовать "do: "
3. Входное действие - это поведение, которое выполняться, когда объект переходит в данное состояние.
Т.е. данное действие осуществляется не после того как объект перешел в это состояние, а скорее как часть этого перехода. В отличие от деятельности входное действие рассматривается как непрерываемое. Входное действие также показывают внутри состояния. Его обозначению предшествует слово "entry: ".
4. Выходное действие подобно входному, однако оно осуществляется как составная часть процессов выхода из данного состояния. В нашем примере при выходе объекта из состояния "Концентратор дорожного уровня" выполняется действие "сформировать сообщение САУДП", оно является частью процесса такого перехода. Как и входное, выходное действие является непрерываемым. Выходные действия изображаются внутри состояния. Его описанию предшествует слово "exit: ".
Поведение объекта во время деятельности при входных и выходных действиях может включать отправку события другому объекту, например объект "Концентратор линейного уровня" может послать события объекту "Концентратор дорожного уровня". В этом случае описанию деятельности входного или выходного действия предшествует знак "^". Соответствующая строка на диаграмме выглядит так:
Do: ^ цель.событие(аргументы)
Здесь:
Цель - это объект, получающий события
Событие - это посылаемое сообщение
Аргументы - это параметры посылаемого сообщения.
Деятельность может также выполняться в результате получения объектом некоторого события. Например: объект "Концентратор дорожного уровня" может быть в состоянии "открыт". При получении сообщения от клиента серверу transporter выполняется определенная деятельность по формированию сообщений 200/201/202..
Переход – это перемещение объекта из одного состояния в другое. На диаграмме все переходы изображают в виде стрелки, начинаются на первоначальном состоянии и заканчиваются в последующем. Эти переходы могут быть рефлексивными - объект может перейти в тоже состояние, в котором он находится в настоящий момент. Рефлексивные переходы изображают в виде стрелки начинающейся и заканчивающейся на одном и том же состоянии. У перехода существует несколько спецификаций: они включат события, аргументы, ограничивающие условия, действия и посылаемые события.
Рассмотрим каждое из них в контексте примера сервера АСОУП:
1. Событие - это то, что вызывает переход из одного состояния в другое. Например, событие "сообщение с номером КБД" вызывает переход объекта-ПСЧ из состояния приема номера (открытого) в состояние формирования сообщения с номером 266 (закрытое) состояние. Событие размещают на диаграмме вдоль линии перехода. На диаграмме для отображения события можно использовать как имя операции, так и обычную фразу. В нашем примере события описаны обычными фразами. Для описания операции можно использовать оператор вызова функции (например, Request266()). У события могут быть аргументы такие как событие "принять сигнал", вызывающее переход концентратора линейного уровня из состояния приема сообщения 266 в состояние "работа клиент-серверного приложения transporter”. Большинство переходов должны иметь события, т.к. именно они, прежде всего, заставляют переход осуществиться. Тем не менее, бывают и автоматические переходы, не имеющие событий, при этом объект сам перемещается из одного состояния в другое со скоростью позволяющей осуществиться входным действиям деятельности и выходным действиям.
2. Ограждающее условие - определяет, когда переход может или не может осуществиться. В нашем примере событие «считывание показаний датчиков фиксации прохождения колесной оси»» переведет ПСЧ из состояния "открыт", но только при условии, если прочитан код КБД. В противном случае переход не осуществиться. Ограждающее условие изображают на диаграмме вдоль линий перехода, после имени события заключают их в квадратные скобки. Ограждающее условие задавать не обязательно, однако если существуют несколько автоматических переходов из состояний необходимо определять для них взаимоисключающие ограждающие условия. Это поможет читателю диаграммы понять, какой путь перехода будет автоматически выбран.
3. Действие являются непрерывным поведением, которое осуществляется как часть перехода. Входные и выходные действия показывают внутри состояния, поскольку они определяют, что происходит, когда объект входит или выходит из состояния. Тем не менее, большую часть действий изображают вдоль линии перехода, так как они не должны осуществляться при входе или выходе из состояния. Например, при переходе КСАИЛ из состояния приема сообщения 266 в состояние вызова севера transporter выполняется действие " формировать время проследования поездом ПСЧ". Это непрерываемое поведение осуществляется только во время перехода из состояния "открыт" в состояние "закрыт". Действие рисуют вдоль линии перехода после имени события, его изображению предшествует косая черта.
4. Посылаемое событие. Событие или действие может быть поведением внутри объекта, а может представлять собой сообщение, посылаемое другому объекту. Если событие или действие посылается другому объекту, перед ним на диаграмме помещают знак "^".
Диаграмму состояний не надо создавать для каждого класса. Они применяются только в сложных случаях, когда объект класса может существовать в нескольких состояниях, и в каждом из них ведет себя по-разному.