1.4.Диаграммы состояний
Диаграммы состояний.
При выполнении лабораторной работы № 12 была построена ER-модель, которую можно рассматривать как частный случай диаграммы классов, где все классы представляют собой сущности. ER-модель отражает статическое представление моделируемой системы. Однако каждая прикладная система характеризуется не только структурой составляющих ее элементов, но и некоторым поведением или функциональностью.
Для описания поведения моделируемой системы предназначены сразу несколько канонических диаграмм: состояний, деятельности, последовательности и кооперации, каждая из которых фиксирует внимание на отдельном аспекте функционирования системы. Рассмотрим особенности диаграмм состояния.
В отличие от других диаграмм, диаграмма состояний описывает процесс изменения состояний только одного класса, а точнее — одного экземпляра определенного класса, т.е. моделирует все возможные изменения в состоянии конкретного объекта на протяжении всего его жизненного цикла. Диаграммы состояний строятся для каждого класса, проявляющего интересное для аналитика поведение. Не все классы относятся к этой категории.
Каждая диаграмма состояний представляет некоторый автомат. Основными понятиями, входящими в формализм автомата, являются состояние, переход и событие.
Состояние (State) - это ситуация в жизни объекта, на протяжении которой он удовлетворяет некоторому условию, осуществляет определенную деятельность или ожидает какого-то события. Состояние может быть задано в виде набора конкретных значений атрибутов класса или объекта, при этом изменение их отдельных значений будет отражать изменение состояния моделируемого класса или объекта.
Переход (Transition) - это отношение между двумя состояниями, показывающее, что объект, находящийся в первом состоянии, должен выполнить некоторые действия и перейти во второе состояние, как только произойдет определенное событие и будут выполнены заданные условия.
Событие (Event) - это спецификация существенного факта, который происходит во времени и пространстве. В контексте автоматов событие - это стимул, способный вызвать срабатывание перехода.
Формализм обычного автомата основан на выполнении следующих обязательных условий:
1. Автомат не запоминает историю перемещения из состояния в состояние. Определяющим является сам факт нахождения объекта в том или ином состоянии, но никак не последовательность состояний, в результате которой объект перешел в текущее состояние.
2. В каждый момент времени автомат может находиться в одном и только в одном из своих состояний. Это означает, что формализм автомата предназначен для моделирования последовательного поведения, когда объект в течение своего жизненного цикла последовательно проходит через все свои состояния. Переход из одного состояния в другое может осуществляться только при выполнении определенного прецедента.
4. Количество состояний автомата должно быть обязательно конечным (в языке UML рассматриваются только конечные автоматы), и все они должны быть специфицированы явным образом. При этом отдельные псевдосостояния могут не иметь спецификаций (начальное и конечное состояния).
5. Граф автомата не должен содержать изолированных состояний и переходов. Это условие означает, что для каждого из состояний, кроме начального, должно быть определено предшествующее состояние. Каждый переход должен обязательно соединять два состояния автомата. Допускается переход из состояния в себя, такой переход еще называют "петлей".6. Автомат не должен содержать конфликтующих переходов, т. е. таких переходов из одного и того же состояния, когда объект одновременно(при одном и том же событии) может перейти в два и более последующих состояния.
Рекомендация. Диаграммы состояний рекомендуется выполнять в QDesigner как Statechart Diagram для Object Oriented Model.На рис.1 приводится фрагмент диаграммы классов (ER-модели) для примера "Магазин видеопродукции".

При построении диаграммы состояний прежде всего необходимо выявить и поместить на диаграмму все возможные состояния экземпляра класса. Далее необходимо добавить начальное и конечное состояния. Затем необходимо определить последовательность смены состояний в течение жизненного цикла экземпляра класса и соединить соответствующие состояния переходами. Для каждого перехода нужно определить его основное свойство - событие, вызывающее переход. Это событие представляет собой прецедент, при выполнении которого происходит переход и, возможно, выполнение некоторого условия. Наименование прецедента (должно быть указано обязательно) записывается в поле Trigger event на закладке Trigger свойств перехода (Transition Properties), дополнительное условие (если нужно) записывается в поле Alias на закладке Condition. Если для прецедента была составлена диаграмма деятельности, в поле Trigger action можно поместить наименование деятельности, изменяющей состояние. Кроме того, на закладке Notes обычно помещают комментарий, объясняющий изменение каких атрибутов реализует переход.
На рис.2 показана диаграмма состояний для класса Прокатный видеоноситель.
Каждый переход подписывается названием прецедента, в рамках которого он происходит. Если при выполнении прецедента возможен переход более чем в одно состояние, следует, помимо названия прецедента, указать условие перехода. Например, состояние "занят" меняется на одно из состояний "свободен", "брак", "к списанию" в рамках прецедента "возврат видео" в зависимости от качества возвращаемого носителя.
На диаграмме состояний в качестве переходов должны присутствовать все прецеденты с ДП, которые могут менять атрибуты экземпляра класса.