Главная » Delphi » Delphi 2006 – Диаграмма состояний (Statechart Diagram)

0

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

Автоматы

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

Эта модель сходна с моделью программирования тем, что переменные (ячейки памяти) в каждый такт процессора всегда хранят конкретные значения из допустимых диапазонов. А вычислительные операции, разрешенные над ними, вызывают переход этих переменных в новые состояния. Тот же алгоритмический принцип можно распространить и на большое число управленческих задач. В общем случае подход теории автоматов позволяет описать любую, сколь угодно сложную последовательность операций.

Рассмотрим базовые правила работы автоматов UML.

•        Автомат может находиться только в одном состоянии. Хотя переменная может принимать множество значений, каждому из которых на диаграмме может соответствовать свой элемент, тем не менее в каждый момент времени (такт процессора) она хранит только одно из этих значений.

•        Число состояний автомата конечно.

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

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

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

•        На диаграмме состояний явно не фиксируется путь, по которому автомат перешел в текущее состояние (в отличие от диаграмм последовательности и кооперации). В переменной записано некоторое значение, и невозможно определить, в каких состояниях (значениях) она находилась ранее.

Состояния

Диаграмма состояний добавляется в проект командой контекстного меню с пространства диаграммы Add > Other Diagram > Statechart Diagram (Добавить > Другая диаграмма > Диаграмма состояний (рис. 8.29)

Puc. 8.29. Добавление диаграммы состояний

Конкретное состояние (в общем случае — «срез» некоторой системы) создается на диаграмме инструментом State с палитры инструментов. Состояние выражается прямоугольником с закругленными углами. Состояние имеет имя, которое записывается с прописной буквы, а под именем после черты записывается условие и действия. Условия могут быть проверены, а действия выполнены, когда автомат находится в данном состоянии.

На диаграмме также могут указываться начальное и конечное состояния автомата — элементы Start и Stop. Смена состояний отображается на диаграмме с помощью элемента перехода Transition (Переход). Переход ведется от первого, исходного состояния к последующему и выражается сплошной линией со стрелкой. Переход также может быть задан между одним и тем же состоянием. Выбрав некоторое состояние, укажем его же для операции Transition в качестве конечного — тогда линия перехода превратится в кольцо.

Некоторый переход может происходить в зависимости от определенного события (команды). Название этого события при необходимости указывается в свойстве Event Name (Имя события) перехода — тогда оно отображается рядом с соответствующей линией.

Для события может быть также задано сторожевое условие (логическое выражение), которое, если истинно, допускает выполнение перехода. Записывается оно в свойстве Guard Condition (Сторожевое условие), а на диаграмме показывается в квадратных скобках следом за именем события. Если это условие истинно, можно дополнительно задать некоторое действие, которое должно выполняться перед совершением перехода. Записывается это действие в свойстве Action Expression (Выражение) и указывается на линии перехода через символ «/* следом за сторожевым условием.

На рисунке 8.30 показана диаграмма состояний банковского автомата, который последовательно переходит из состояния ожидания к вводу и проверке персонального идентификационного номера клиента (PIN) и далее к выдаче денег.

Отметим принятые правила оформления элементов этой диаграммы. Элементы State (Состояние) представляют собой не действие, а выражают некое статическое состояние автомата, в коем он может находиться неограниченно долго. Оно допускает перевод автомата в другие состояния при выполнении пользователем определенных действий или удовлетворении условий, указанных на линиях связи/перехода.

Подавтоматы

Внутри каждого состояния разрешается формировать собственный автомат— мини-диаграмму состояний. Это позволяет проектировать систему постепенно, раскрывая отдельные ее элементы по мере необходимости.

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

Рис. 830. Диаграмма состояний банкомата

и их состояние тоже необходимо сохранить, надо воспользоваться Глубоким историческим состоянием. Оно формируется из обычного Исторического состояния переводом свойства Deep в значение True. На диаграмме эти два вида исторических состояний отмечаются большой буквой Н в кружке со звездочкой для Глубокого исторического состояния или без оной — для обычного (рис. 8.30).

От набора нескольких состояний автомата или подавтомата можно сразу перейти к другому внешнему состоянию, если для всех исходных состояний выполняется некоторое условие. Для изображения такой взаимосвязи применяется элемент Fork/Join (Ветвление/Соединение). Он бывает горизонтальным или вертикальным — Vertical Fork/Join и Horizontal Fork/Join. Отличие заключается лишь в ориентации линии, соединяющей несколько линий переходов в один.

После размещения элемента ветвления на диаграмме, с помощью связи Transition (Переход) сначала формируются переходы от исходных состояний по направлению к элементу соединения, а затем от него — к конечному. Другой вариант: от одного исходного состояния формируется промежуточный переход до элемента ветвления, и уже от него — к финальным состояниям. Последний случай означает начало параллельной работы нескольких подавтоматов, вложенных в одно состояние.

В редакторе UML Delphi не проверяется корректность соотношения числа и вло- женности состояний.

Наряду с состояниями на диаграмме допускается размещение объектов — сущностей, которые делают выстроенную схему более наглядной. Элемент Object (Объект) представляется прямоугольником с подчеркнутым названием. Обычно его применяют для уточнения деталей работы автомата. Ведущих ролей он не играет.

Бобровский С. И. Технологии Delphi 2006. Новые возможности. — СПб.: Питер, 2006. — 288 е.: ил.

По теме:

  • Комментарии