Информационные системы
Шрифт:
Диаграмма состояний описывает процесс изменения одного класса, а точнее – одного экземпляра класса. На диаграмме отражаются состояния и переходы между состояниями объекта под воздействием внешних факторов.
Состояния (states) на диаграмме состояний показываются прямоугольниками с закругленными вершинами. В каждом таком прямоугольнике может быть одна (обязательная) секция, в которой записывается имя состояния (для имени рекомендуется использовать глаголы, причастия и деепричастия), и несколько других секций, обозначающих действия объекта в этом состоянии.
Начальное состояние изображается черным кружком, конечное – черным кружком в белом кольце. На диаграмме,
Рис. 3.20. Простейшая диаграмма состояний.
Начальное и конечное состояния могут отсутствовать. Примером отсутствия конечного состояния может служить система, которая запускается один раз, а дальше функционирует в непрерывном режиме. Примером отсутствия начального состояния может служить функционирующая система, неизвестно когда возникшая. Примером отсутствия как конечного, так и начального состояний могут служить циклические изменения какого-либо объекта.
Внутренние действия состояния описываются в следующем формате:
Здесь аргумент метка представляет собой одно из следующих ключевых слов:
• entry – действие выполняется в момент перехода объекта в данное состояние;
• exit – действие выполняется в момент выхода объекта из данного состояния;
• do – действие выполняется во время нахождения объекта в данном состоянии;
• include – обращение к подсостоянию (substate) данного состояния объекта.
Составное состояние (composite state), или суперсостояние, – это такое состояние объекта, которое включает в себя несколько подсостояний. Использование подсостояний удобно, например, когда на диаграмме требуется показать состояния объекта в зависимости от одного из его свойств. При этом другие свойства объекта также могут изменяться, и если такие состояния и переходы между ними показывать в качестве самостоятельных состояний, то диаграмма будет перегружена обозначениями, затрудняющими восприятие смысла диаграммы – демонстрации переходов между состояниями в зависимости от конкретного свойства. Два варианта графического изображения составного состояния показаны на рис. 3.21.
Рис. 3.21. Графическое изображение составного состояния.
Частными случаями составного состояния являются последовательные состояния (на рис. 3.22 это состояния А, Б, В) и параллельные состояния (на рис. 3.22 это состояние Г по отношению к последовательности состояний А, Б, В).
Рис. 3.22. Графическое изображение составного состояния.
Историческое состояние (history state) – это такое составное состояние, последующие переходы в которое означают переход к последнему подсостоянию объекта. В качестве примера можно привести систему ведения журнал сбоев (рис. 3.23). При втором и последующем обращении к этому состоянию нет необходимости еще раз создавать журнал сбоев, поэтому переход приведет сразу к подсостоянию Запись в журнал. Историческое состояние обозначается символом H в кружке.
Рис. 3.23. Графическое изображение исторического состояния.
Переходы между состояниями в языке UML полагаются мгновенными, то есть на переход из одного состояния объекта в другое время не затрачивается.
Переходы между состояниями изображаются на диаграммах состояний стрелками, над которыми могут указываться событие (event), вызвавшее этот переход, условие допустимости этого перехода (сторожевое условие) и действия, сопровождающие этот переход, в формате:
событие(список параметров) [сторожевое условие] выполняемые действия
События на диаграммах состояний исполняют роль триггеров – переход не произойдет, пока не случится соответствующее событие. Если рядом со стрелкой, обозначающей переход, не указано событие, его специфицирующее, то такой переход называется нетриггерным. Нетриггерный переход происходит сразу после выполнения действий в этом состоянии.
Сторожевое условие (guard condition) – некоторое логическое выражение, являющееся дополнительным условием перехода. Переход не произойдет, если сторожевое условие принимает значение false, даже в случае наступления соответствующего события. Сторожевые условия удобно использовать, когда из одного состояния при наступлении одного и того же события возможен переход в несколько других состояний. Например, пусть клиент в виртуальном магазине выбрал товары (состояние – выбор) и по окончании послал команду оплатить покупку (событие). Тогда товары доставляются клиенту только в том случае, если на его счету есть достаточная сумма (сработает переход в состояние, в котором выполняется действие доставки), если же необходимая сумма отсутствует, возможны переходы в другие состояния.
Переходы могут быть простыми и сложными. Простой переход – это переход в другое или в то же состояние объекта. Переход в то же состояние на диаграммах изображается стрелкой, начинающейся и заканчивающейся у этого состояния (рис. 3.24). При каждом переходе такого рода выполняются соответствующие входные и выходные действия.
Рис. 3.24. Графическое изображение перехода в то же состояние.
Сложные переходы – это переходы с несколькими исходными (или конечными) состояниями объекта, а также переходы между подсостояниями разных состояний. Переход с несколькими исходными или несколькими конечными состояниями объекта (параллельный переход) обозначается жирной вертикальной или горизонтальной линией (линией синхронизации), как показано на рис. 3.25.
Рис. 3.25. Графическое изображение параллельного перехода.
Пример перехода между подсостояниями разных состояний показан на рис. 3.26 (переход из A2 в B1).
Рис. 3.26. Пример перехода между подсостояниями разных состояний.
В общем случае, переходы на диаграммах состояний принимаются асинхронными, то есть не зависящими от других переходов. Однако при проектировании может возникнуть необходимость показать синхронность переходов между состояниями объекта. Это достигается введением синхронизирующих состояний, обозначаемых символом * внутри окружности. В примере на рис. 3.27 объект не перейдет в подсостояние B, пока не произойдет переход от С к D, который «синхронизирует» переход от A к B.
Рис. 3.27. Пример использования синхронизирующего состояния.
Совет.
Нотация UML представляет широкие возможности для иллюстрирования процесса разработки информационных систем, что видно на примере диаграмм состояний, на которых существует возможность показать составные состояния, сложные переходы и т. д. В то же время злоупотребление сложными конструкциями в конечном итоге приводит только к трудностям в понимании диаграмм – цели, прямо противоположной заявленной нами. Такой же эффект дает перегрузка диаграмм объектами и связями между ними. Отсюда следует общая рекомендация к построению диаграмм: без необходимости не усложняйте диаграммы, не пытайтесь на одной диаграмме показать сразу все аспекты функционирования системы.