Диаграммы состояний
Диаграмма состояний (State chart diagram) представляет собой конечный автомат и показывает последовательность состояний объекта, через которые он проходит во время своего существования под воздействием внешних событий. Диаграмма представляет собой набор состояний и переходов между ними. Диаграмма состояний назначается классу или методу поведения.
Состояния автомата соответствуют состояниям объектов, в которых объект удовлетворяет некоторому условию, выполняет некоторое действие или ожидает некоторого события. Объект может находиться в каждом состоянии в течение конечного времени. Каждому состоянию может соответствовать вложенный автомат. Состояние изображается как прямоугольник со скругленными краями. Каждое состояние имеет две части. В верхней части отображается имя состояния. Имя состояния может быть пустым, это так называемое анонимное состояние. Все анонимные состояния отличаются друг от друга. Нижняя часть состояния предназначена для отображения внутренних действий, выполняемых в ответ на определенные события, возникающие, когда объект находится в данном состоянии, без смены текущего состояния. Описание внутренних действий имеет следующий формат:
имя - события список - параметров [ условие ] / действие
Каждое имя события должно быть уникальным в пределах одного состояния. Определены зарезервированные имена событий:
entry / действие - Действие, выполняемое при входе в состояние.
exit / действие - Действие, выполняемое при выходе из состояния.
Эти два предопределенных события не имеют списка параметров и условия возникновения, так как и то и другое предопределено.
Введено специальное ключевое слово do, обозначающее вызов вложенного автомата:
do / имя - автомата (список - параметров)
Имя автомата задает конкретный автомат, которому при инициализации может быть передан список параметров, который должен быть совместимым со списком параметров этого автомата. Графические обозначения различных классов состояний автомата приведены в таблице ниже:
Таблица 11.
Наименование | Графическое обозначение | Смысл |
Состояние | В верхней части – имя, в нижней – внутренние действия, выполняемые автоматом при возникновении определенных событий, когда он находится в данном состоянии | |
Начальное состояние | С него начинается выполнение автомата | |
Конечное состояние | На нем заканчивается выполнение автомата |
Событие - это любое действие, имеющее значение с точки зрения смены состояний автомата. Определены следующие виды событий (одно событие может относиться одновременно к нескольким видам):
условие становится истинным,
прием внешнего сигнала от одного объекта к другому,
запрос на выполнение метода объекта,
истечение заданного периода времени.
Сигналы определяются в следующем формате:
имя - события (список - параметров)
каждый параметр имеет формат:
имя - параметра : тип
Сигналы могут образовывать иерархию наследования и, следовательно, изображаться с помощью диаграммы классов. Если на конечном автомате событие Х приводит к переходу из состояния в состояние, то любое производное событие от Х так же приводит к смене этого перехода. На диаграмме классов состояния изображаются с ключевым словом “signal”. Они не имеют методов поведения, могут иметь только атрибуты.
Простой переход из состояния 1 в состояние 2 показывает, что объект, находящийся в состоянии 1 перейдет в состояние 2 и выполнит определенные действия, когда произойдет предопределенное для перехода событие и будут истинными специфицированные условия. Такая смена состояний называется срабатыванием перехода. Событие, помечающее переход, может иметь параметры, которые доступны внутри действий, сопоставленных переходу или тому состоянию, в которое ведет переход. События, определяющие выполнение переходов, обрабатываются по одному в один момент времени. Если событие не приводит к выполнению ни одного перехода, то оно игнорируется. Переходы изображаются линией с указанием направления и дополнительной текстовой информации, представленной в следующем виде:
имя - события (параметры) [ условие ] / выражение ^ посылка
Условие - это логическое выражение с участием параметров события, имен состояний автомата и атрибутов объекта или класса, которым назначен данный автомат. Выражение - это процедурное выражение, которое выполняется при выполнении перехода. Оно может включать в себя параметры события, методы поведения и атрибуты того объекта или класса, которым назначен данный автомат. Посылка описывает ту операцию или сигнал, которые могут быть посланы другим объектам. Она имеет следующий формат:
назначение . операция (параметры)
Назначение - это имя объекта, для которого выполняется операция или посылается сообщение или сигнал. Операция - это имя вызываемого метода, посылаемого сигнала или сообщения. Примером текста, который может сопоставляться переходу является следующий:
нажата левая кнопка мыши (позиция)
[ позиция внутри окна ]
/ выбор = выбрать (позиция)
^ выбор . выделить.
Здесь “нажата левая кнопка мыши” - это имя события, “позиция“ - это параметр данного события, показывающий, в какой позиции на экране произошло нажатие. “Позиция внутри окна” - это условие, которое должно быть выполнено для того, что бы переход мог выполниться, т.е. будут обрабатываться не все нажатия кнопки мыши, а только те, которые произошли внутри заданного окна. Выражение “выбор = выбрать (позиция)” представляет собой присвоение переменной “выбор” значения функции “выбрать” с параметром “позиция”. И, наконец “выбор . выделить” - это обращение к методу “выделить” объекта “выбор”.
Составные переходы предназначены для отражения операций распараллеливания и синхронизации. Составной переход может иметь несколько входных и несколько выходных состояний. Составной переход может выполниться только тогда, когда все его входные состояния активны. После выполнения составного перехода все его выходные состояния становятся активными, а все входные перестают быть активными. Таким образом, автомат может одновременно находиться в нескольких состояниях. Составной переход изображается как прямоугольник, входные и выходные линии определяют входные и выходные состояния (рис. 47):
Рис. 47. Обозначение составного перехода.
На рис. 47 изображен один составной переход, имеющий два входных состояния (A, B) и два выходных состояния (C, D).
Если состоянию соответствует вложенный автомат, то после выполнения действий entry для этого состояния начинает работать вложенный автомат, начиная со своего начального состояния. Когда достигается одно из конечных состояний вложенного автомата, то состояние считается законченным, выполняются действия по выходу (exit), и автомат готов к смене состояния под воздействием внешних воздействий.
Одному состоянию может соответствовать либо один вложенный автомат, либо несколько конкурирующих (взаимно исключающих) вложенных автоматов. Графически это обозначается следующим образом:
один вложенный автомат изображается внутри прямоугольника для состояния,
несколько вложенных автоматов также изображаются внутри прямоугольника для состояния, но они разделяются пунктирным линиями.
Пример вложенного автомата приведен на рис. 48.
Рис. 48 Пример изображения вложенного автомата
На данном рисунке состояние B является составным и содержит внутренний автомат, который состоит из начального, конечного состояний и состояний C и D.
Пример конкурирующих вложенных автоматов представлен на рис. 49.
Рис. 49. Пример изображения конкурирующих вложенных автоматов.
Здесь состояние “B” декомпозируется с помощью двух конкурирующих вложенных автоматов.
Пример диаграммы состояний представлен на рис. 50. Здесь представлен конечный автомат, описывающий функционирование класса "Диаграммер" графического редактора диаграмм.
Рис. 50. Диаграмма состояний для класса "Диаграммер"
Диаграммы действий
Диаграммы действий (activity diagrams) показывают выполнение операций. Они являются разновидностью автомата. Предназначение данной диаграммы - показать поток управления, внутренний для операции, в противоположность показу реакции на внешние события (как это делается в диаграмме состояний).
Диаграмма действий состоит из следующих элементов (табл. 12):
Таблица 12.
Действия показывают выполнение некоторой неделимой операции. Каждое действие имеет имя, определяющее смысл этого действия. Имя может представлять собой текст на естественном языке, псевдокод операции или фрагмент текста на некотором языке программирования. Внутри описания могут использоваться атрибуты того объекта, за которым закреплена диаграмма действий.
Условия предназначены для обозначения возможности условной передачи управления в соответствии со значением некоторого логического выражения. Условие может иметь один или более входов и два или более выходов. Каждый выход должен быть помечен условием, истинность которого обеспечивает переход по данной дуге.
Переходы имеют тот же смысл, что и в автоматной модели диаграммы состояний. Но здесь они не помечаются никаким событием и имеют условие только для специальных состояний - “условие”, т.е. они просто передают управление от одного действия к другому. Окончание входных действий непосредственно приводит к выполнению перехода. Возможность распараллеливания и синхронизации остается.
Диаграмма действий может быть разделена на полосы (swim lanes), которые включают в себя определенный набор действий и переходов. Каждая полоса имеет собственное имя и тем самым позволяет группировать действия в единое целое. Ее можно сравнить с пакетом для классов. Графически каждая полоса представляет собой вертикальное разделение диаграммы действий с помощью сплошной линии. Каждое действие может находиться только в одной полосе, тогда как переходы могут пересекать полосы.
На рис. 51 представлен пример, на котором используются практически все возможные элементы диаграммы действий. Здесь обсуждается процедура обслуживания клиента узла Internet, подающего заявку на обслуживание. Заявка может быть двух типов: заявка на регистрацию и заявка на предоставление некоторой услуги. Диаграмма содержит две полосы “клиент” и “отдел обслуживания”. После получения запроса на обслуживание клиент может подготовить платеж, а отдел обслуживания займется одновременно с этим выполнением заказа. В зависимости от типа запроса будет выполнено либо действие “создать услугу”, либо действие “заполнить карточку регистрации”. Далее будет выполнена подготовка документа, и после выполнения платежа он будет учтен и обслуживание закончится.
Все действия выполняются над объектами. Целесообразно показать на диаграмме действий отношения между объектами и операциями. Различаются два вида отношений:
объект отвечает за выполнение операции,
атрибуты объекта используются для выполнения операции.
Эти виды отношений показываются соответственно как:
действие вызывает метод поведения объекта,
объект является входным или выходным для действия.
Объекты на диаграмме действий показываются, как обычно, в виде прямоугольников с записанными внутри именами. Если объект является выходным для действия, то от действия к объекту идет штриховая линия, если же объект является входным для действия, то от объекта к действию идет штриховая линия. Вызов метода показывается сплошной линией с указанием имени и параметров операции, а так же может быть указано направление передачи или получения данных (см. диаграмму последовательностей).
Рис. 51. Пример диаграммы действий.
Специальные символы могут не использоваться, так как их использование не обязательно, они являются дополнительным средством выражения посылки и получения сигналов. Это можно обозначить указанием имени сигналов непосредственно на переходе. А можно использовать специальные символы, которые должны соединяться с линией перехода.
“Получение сигнала” (см. табл. 12) - это символ, предназначенный для обозначения получения сигнала для выполнения перехода, т.е. передачи управления.
“Посылка сигнала” - это символ, предназначенный для обозначения посылки сигнала в момент выполнения перехода.
Дата добавления: 2016-05-16; просмотров: 1439;