Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции Введение в ПИ / ЛК 3.4a UML-Диаграммы состояний.ppt
Скачиваний:
46
Добавлен:
26.02.2016
Размер:
1 Mб
Скачать

Сторожевое условие

(guard condition)

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

Введение сторожевого условия для некоторого перехода позволяет явно специфицировать семантику его срабатывания: если сторожевое условие принимает значение «истина», то переход может сработать, и объект перейдет в целевое состояние; в противном случае переход не может сработать и объект не может перейти в целевое состояние по этому переходу.

В общем случае из одного состояния может быть несколько переходов с одним и тем же событием-триггером. При этом никакие два сторожевых условия не должны одновременно принимать значение «истина».

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

21

Пример

Примером события-триггера может служить разрыв телефонного соединения с Интернет-провайдером после окончания загрузки электронной почты почтовым

клиентом. В этом случае сторожевое условие - это ответ на вопрос: «Пуст ли почтовый ящик клиента на почтовом сервере?». Если «Да», следует

отключить соединение с провайдером, если «Нет», следует оставаться в состоянии загрузки почты

.

22

Пример

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

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

После окончания активизации программа переходит в конечное состояние.

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

Однако при необходимости получить новую почту, пользователь инициирует событие-триггер «установить телефонное соединение». В качестве

параметра этого события выступает конкретный телефонный номер модемного

пула провайдера.

Далее следует проверка сторожевого условия «телефонное соединение установлено ?», и только в случае положительного ответа происходит переход почтового клиента из состояния «активизация почтовой программы» в состояние «загрузка почты с сервера провайдера».

В противном случае (линия занята, неверный ввод пароля …) загрузки почты не произойдет, и программа останется в прежнем своем состоянии.

23

Пример

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

В этом случае событие-триггер «закончить загрузку почты» происходит после проверки сторожевого условия «почтовый ящик на сервере пуст ?».

При положительном ответе на этот вопрос (вся почта загружена или ее просто нет в ящике) почтовая программа прекращает загрузку почты и переходит в состояние активизации. В случае же отрицательного ответа загрузка почты будет продолжена.

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

Для реализации такой ситуации дополним нашу диаграмму еще одним переходом в целевое состояние «Активизация почтовой программы» с аналогичным событием-триггером «закончить загрузку почты», но с другим сторожевым условием «время загрузки почты превышает 600 секунд ?».

24

Выражение действия (action expression)

Выражение действия:

выполняется в том и только в том случае, когда переход срабатывает;

выполняется сразу после срабатывания соответствующего перехода до начала каких бы то ни было действий в целевом состоянии;

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

может оказывать влияние как на сам объект, так и на его окружение;

записывается после знака "/" в строке текста, присоединенной к соответствующему переходу;

может содержать список отдельных действий, разделенных символом ";". Обязательное требование – все действия из списка должны четко различаться между собой и следовать в порядке их записи;

чаще всего записывается на языке программирования, который предполагается использовать для реализации модели.

Вкачестве примера выражения действия может служить следующая запись: «разорвать телефонное соединение (телефонный номер)»; «вывести

информационное сообщение (соединение разорвано)», которое должно

быть выполнено сразу после установления истинности сторожевого условия «почтовый ящик на сервере пуст ?».

25

Составное и подчиненное состояния

Составное состояние (composite state) – такое сложное состояние, которое состоит из других вложенных в него состояний. Составные состояния называют также «суперсостояниями»

Вложенные состояния по отношению к составному называют под- состояниями (substate). Графически все вложенные состояния изображаются внутри символа составного состояния.

Составное состояние может содержать несколько параллельных подавтоматов, каждый из которых может быть представлен одним или более последовательными под-состояниями.

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

26

Последовательные под-состояния

(sequential substates)

Использование последовательных под-состояний объекта позволяет учесть более тонкие логические аспекты его внутреннего поведения.

Поведение объекта представляется последовательной сменой его под- состояний, начиная от начального и заканчивая конечным под-состояниями.

При этом в каждый момент времени объект может находиться только в одном таком под-состоянии.

Составное состояние может содержать в качестве вложенных начальное и конечное под-состояния.

Начальное под-состояние является исходным для всего составного состояния – именно в этом под-состоянии оказывается объект после срабатывания перехода в данное составное состояние.

Переход объекта в конечное под-состояние означает завершение нахождения объекта в данном составном состоянии.

В каждом составном состоянии может быть только одно начальное и только одно конечное последовательные состояния.

27

Пример составного состояния с вложенными последовательными под-состояниями

Рассмотрим в качестве моделируемого объекта телефонный аппарат. Он может находиться в различных состояниях, одним из которых является состояние дозвона до абонента.

Очевидно, для того чтобы позвонить, необходимо снять телефонную трубку, услышать тоновый сигнал, после чего набрать нужный телефонный номер. Таким образом, состояние дозвона до абонента является составным и состоит из двух последовательных под-состояний: «поднять телефонную трубку» и «набрать телефонный номер».

28

Пример (продолжение)

Комментарии к диаграмме.

1.Переход из начального под-состояния и переход в конечное под-состояние - нетриггерные и не помечены строками текста, описывающими события.

2.Последний переход в конечное под-состояние не имеет события-триггера, но имеет сторожевое условие, проверяющее правильность набранного номера абонента. Только в случае истинности этого условия телефонный аппарат может перейти в конечное под-состояние, которое характеризует суперсостояние «дозвон до абонента» в целом.

3.Два оставшихся перехода – триггерные, так как инициируются асинхронными событиями - набор цифры. Такое событие имеет имя «цифра» с параметром «п» (отдельная цифра на диске телефонного аппарата.

29

Историческое состояние (history state)

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

Для моделирования таких ситуаций в языке UML используется понятие «исторического состояния».

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

На диаграммах такое состояние обозначается окружностью с буквой H

внутри. Существует две разновидности исторического состояния: (а) -

неглубокое (shallow history state) и (б) – глубокое (deep history state). В обозначении глубокого состояния к букве «H» добавляется символ «*».

30