А.М. Вендров - Объектно-ориентированный анализ и проектирование (1158627), страница 10
Текст из файла (страница 10)
Требование клиента называетсясобытием (event), именно такие события и вызывают переход из одногосостояния в другое.Рис. 1.19. Диаграмма состояний для класса AccountЕсли клиент снимает деньги с открытого счета, он может перейти всостояние "Превышение кредита". Это происходит, только если баланс поэтому счету меньше ноля, что отражено условием [отрицательный баланс]на диаграмме. Заключенное в квадратных скобках ограничивающееусловие (guard condition) определяет, когда может или не может произойтипереход из одного состояния в другое.49На диаграмме имеются два специальных состояния - начальное (start)и конечное (stop).
Начальное состояние выделено черной точкой, оносоответствует состоянию объекта, когда он только что был создан.Конечное состояние обозначается черной точкой в белом кружке, оносоответствует состоянию объекта непосредственно перед егоуничтожением. На диаграмме состояний может быть только одноначальное состояние, а конечных состояний может быть столько, скольконужно, или их может не быть вообще. Когда объект находится в каком-токонкретном состоянии, могут выполняться различные процессы. Впримере на рис.
1.19 при превышении кредита клиенту посылаетсясоответствующее сообщение. Процессы, происходящие, когда объектнаходится в определенном состоянии, называются действиями (actions).С состоянием можно связывать данные пяти типов: деятельность,входное действие, выходное действие, событие и история состояния.Рассмотрим каждый из них в контексте диаграммы состояний для классаAccount банковской системы.Деятельность (activity) - это поведение, реализуемое объектом, пока оннаходится в данном состоянии. Например, когда счет находится всостоянии "Закрыт", происходит возврат кредитной карточкипользователю.
Деятельность - это прерываемое поведение. Оно можетвыполняться до своего завершения, пока объект находится в данномсостоянии, или может быть прервано переходом объекта в другоесостояние. Деятельность изображают внутри самого состояния, ей должнопредшествовать слово do (выполнять) и двоеточие.Входное действие (entry action) - это поведение, которое выполняется,когда объект переходит в данное состояние. Когда счет в банке переходитв состояние "Превышение кредита", выполняется действие "Временнозаморозить счет", независимо от того, откуда объект перешел в этосостояние.
Таким образом, данное действие осуществляется не после того,как объект перешел в это состояние, а, скорее, как часть этого перехода. Вотличие от деятельности, входное действие рассматривается какнепрерываемое.Входное действие также показывают внутри состояния, емупредшествует слово entry (вход) и двоеточие.Выходное действие (exit action) подобно входному, однако оноосуществляется как составная часть процесса выхода из данногосостояния. Так, при выходе объекта Account из состояния "Превышениекредита", независимо от того, куда он переходит, выполняется действие"Разморозить счет".
Оно является частью процесса такого перехода. Как ивходное, выходное действие является непрерываемым.Выходное действие изображают внутри состояния, ему предшествуетслово exit (выход) и двоеточие.Переходом (transition) называется перемещение объекта из одногосостояния в другое. На диаграмме все переходы изображают в виде50стрелки, начинающейся на первоначальном состоянии и заканчивающейсяна последующем.Переходы могут быть рефлексивными. Объект может перейти в то жесостояние, в котором он в настоящий момент находится.
Рефлексивныепереходы изображают в виде стрелки, начинающейся и завершающейся наодном и том же состоянии.У перехода существует несколько спецификаций, основными изкоторых являются события, ограждающие условия и действия.Событие (event) вызывает переход из одного состояния в другое.Событие "Клиент требует закрыть" вызывает переход счета из открытого взакрытое состояние.
Событие размещают на диаграмме вдоль линииперехода.На диаграмме для отображения события можно использовать как имяоперации, так и обычную фразу, как в примере. Если нужно использоватьоперации, то событие "Клиент требует закрыть" можно было бы назватьRequestClosure().Большинство переходов должны иметь события, так как именно они,прежде всего, заставляют переход осуществиться. Тем не менее, бывают иавтоматические переходы, не имеющие событий.
При этом объект самперемещается из одного состояния в другое со скоростью, позволяющейосуществиться входным действиям, деятельности и выходным действиям.Ограничивающие условия (guard conditions) определяют, когдапереход может, а когда не может осуществиться. В примере событие"Вклад денег" переведет счет из состояния "Превышение кредита" всостояние "Открыт", но только если баланс будет больше нуля. Впротивном случае переход не осуществится.Ограничивающие условия изображают на диаграмме вдоль линииперехода после имени события, заключая их в квадратные скобки.Ограничивающие условия задавать необязательно.
Однако, еслисуществует несколько автоматических переходов из состояния,необходимо определить для них взаимно исключающие ограждающиеусловия, чтобы понять, какой путь перехода будет автоматически выбран.Действие может быть не только входным или выходным, но и частьюперехода. Например, при переходе счета из открытого в закрытоесостояние выполняется действие "Сохранить дату закрытия счета".Действие изображают вдоль линии перехода после имени события,ему предшествует косая черта.Диаграммы состояний не надо создавать для каждого класса, ониприменяются только в сложных случаях. Если объект класса можетсуществовать в нескольких состояниях и в каждом из них ведет себя поразному, для него может потребоваться такая диаграмма.511.4.5. Диаграммы деятельностиВ отличие от большинства других средств UML, диаграммыдеятельности заимствуют идеи из нескольких различных методов, вчастности, метода моделирования состояний SDL и сетей Петри.
Этидиаграммы особенно полезны в описании поведения, включающегобольшое количество параллельных процессов. Диаграммы деятельностиявляются также полезными при параллельном программировании,поскольку можно графически изобразить все ветви и определить, когда ихнеобходимо синхронизировать.Диаграммы деятельности можно применять для описания потоковсобытий в вариантах использования. С помощью текстового описанияможно достаточно подробно рассказать о потоке событий, но в сложных изапутанных потоках с множеством альтернативных ветвей будет труднопонять логику событий. Диаграммы деятельности предоставляют ту жеинформацию, что и текстовое описание потока событий, но в нагляднойграфической форме.На рис. 1.20 приведена диаграмма деятельности для потока событий,связанного с системой бронирования авиабилетов.
Рассмотрим еенотацию.Основным элементом диаграммы является деятельность (activity).Интерпретация этого термина зависит от той точки зрения, с которойстроится диаграмма (это может быть некоторая задача, которуюнеобходимо выполнить вручную или автоматизированным способом, илиоперация класса). Деятельность изображается в виде закругленногопрямоугольника с текстовым описанием.Любая диаграмма деятельности должна иметь начальную точку,определяющую начало потока событий. Конечная точка необязательна. Надиаграмме может быть несколько конечных точек, но только однаначальная.На диаграмме могут присутствовать объекты и потоки объектов(object flow). Объект может использоваться или изменяться в одной издеятельностей. Показ объектов и их состояний (в дополнение кдиаграммам состояний) помогает понять, когда и как происходит сменасостояний объекта.Объекты связаны с деятельностями через потоки объектов.
Потокобъектов отмечается пунктирной стрелкой от деятельности к изменяемомуобъекту или от объекта к деятельности, использующей объект.В примере на рис. 1.20 после ввода пользователем информации окредитной карточке билет переходит в состояние "не подтвержден". Когдазавершится процесс обработки кредитной карточки и будет подтвержденперевод денег, возникает деятельность "зарезервировать место",переводящая билет в состояние "приобретен", и затем он используется вдеятельности "формирование номера подтверждения".52HПоказатьценуВвестиинформацию окредитнойкарточкеБилет[Неподтвержден][Неправильный счет,недостаточно денегна счету, недоступнакредитная система][Подтверждение]ЗарезервироватьместоСформироватьномерподтвержденияОтправитьподтверждениепо e-mailБилет[Приобретен]Показать номерподтвержденияHРис.
1.20. Диаграмма деятельности53Переход (стрелка) показывает, как поток управления переходит отодной деятельности к другой. Если для перехода определено событие, топереход выполняется только после наступления такого события.Ограничивающие условия определяют, когда переход может, а когда неможет осуществиться.Если необходимо показать, что две или более ветвей потокавыполняются параллельно, используются линейки синхронизации. Вданном примере параллельно выполняются резервирование места,формирование номера подтверждения и отправка почтового сообщения, апосле завершения всех трех процессов пользователю выводится номерподтверждения.Любая деятельность может быть подвергнута дальнейшейдекомпозиции.
Описание декомпозированной деятельности может бытьпредставлено в виде другой диаграммы деятельности.Подобно большинству других средств, моделирующих поведение,диаграммы деятельности отражают только вполне определенные егоаспекты, поэтому их лучше всего использовать в сочетании с другимисредствами.Диаграммы деятельности предпочтительнее использовать вследующих ситуациях:• анализ потоков событий в конкретном варианте использования.Здесь нас не интересует связь между действиями и объектами, анужно только понять, какие действия должны иметь место икаковы зависимости в поведении системы. Связывание действий иобъектоввыполняетсяпозднееспомощьюдиаграммвзаимодействия;• анализ потоков событий в различных вариантах использования.Когда варианты использования взаимодействуют друг с другом, надиаграмме деятельности удобно представить и проанализироватьвсе их потоки событий (в этом случае диаграмма с помощьювертикальных пунктирных линий разделяется на зоны - такназываемые "плавательные дорожки" (swimlanes).