Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование, страница 87
Описание файла
PDF-файл из архива "Дж. Арлоу, А. Нейштадт - UML 2 и Унифицированный процесс - Практический объектно-ориентированный анализ и проектирование", который расположен в категории "". Всё это находится в предмете "объектно-ориентированный анализ и проектирование" из 7 семестр, которые можно найти в файловом архиве МГУ им. Ломоносова. Не смотря на прямую связь этого архива с МГУ им. Ломоносова, его также можно найти и в других разделах. .
Просмотр PDF-файла онлайн
Текст 87 страницы из PDF
21.2. Диаграмма состояний электрической лампочки21.5. Состояния477Когда переключатель устанавливается в положение «On» (включен),лампочке посылается событие turnOn (рис. 21.2). В диаграммах состояний события считаются мгновенными, т. е. от переключателя к лампочке событие доходит мгновенно. Мгновенные события существенноупрощают теорию автоматов. Если бы события не были мгновенными,возникали бы условия состязания, когда два события наперегонкиустремляются от источника к одному и тому же реактивному объекту.Это состязание пришлось бы моделировать как некую разновидностьавтомата!События обуславливают переходы состояний.Лампочка получает событие turnOn и в ответ на него меняет свое состояние на On.
В этом суть автоматов – объекты могут менять состояниепри получении события. Лампочка переходит в состояние Off при получении события turnOff. В некоторый момент может произойти событие burnOut (лампочка перегорает). Оно завершает конечный автомат.Все элементы конечного автомата подробно рассматриваются в следующих разделах.21.5. СостоянияВ книге «UML Reference Manual» [Rumbaugh 1] состояние определяется как «условие или ситуация в жизни объекта, при которых он удовлетворяет некоторому условию, осуществляет некоторую деятельность или ожидает некоторого события». Состояние объекта меняетсясо временем, но в любой отдельный момент оно определяется:• значениями атрибутов объекта;• отношениями с другими объектами;• осуществляемыми деятельностями.Состояние – это семантически значимое состояние объекта.С течением времени объекты обмениваются сообщениями.
Эти сообщения и являются событиями, которые могут привести к изменениюсостояния объекта. Важно очень точно осознать, что мы понимаем под«состоянием». В случае электрической лампочки можно было быпредположить (если бы мы были специалистами в квантовой физике),что каждое изменение любого атома или мельчайшей частицы лампочки образует новое состояние. Строго говоря, это верно, но привелобы нас к несметному числу состояний, по большей части, идентичных.Должны быть выявлены значимые состояния системы.478Глава 21. Конечные автоматыColorred : intgreen : intblue : intРис. 21.3. Класс ColorОднако с точки зрения пользователя значимыми состояниями лампочки являются On, Off и конечное состояние, когда она перегорает.
Выявление значимых состояний системы – ключ к успешному моделированию состояний.В качестве другого примера рассмотрим простой класс Color, приведенный на рис. 21.3.Если предположить, что атрибуты red (красный), green (зеленый) и blue(синий) могут принимать значения от 0 до 255, тогда на основании только этих значений у объектов данного класса может быть 256 × 256 × 256 == 16777216 возможных состояний. Вот это была бы диаграмма состояний! Однако мы должны задать себе вопрос: в чем основная семантическая разница между каждым из этих состояний? Ответ: никакой разницы. Каждое из 16777216 возможных состояний представляет цвети только. В сущности, автомат этого класса совсем неинтересен, поскольку все возможные состояния могут быть смоделированы однимединственным состоянием.То есть предпосылкой моделирования в виде автомата должно бытьналичие семантики «отличия, которое различает» состояния.
Конечные автоматы должны повышать ценность модели. Примеры такихавтоматов будут даны в этой и следующей главах.21.5.1. Синтаксис состоянияUMLсинтаксис состояния представлен на рис. 21.4.Каждое состояние поведенческого автомата может содержать нульили более действий и деятельностей.
У состояний протокольных автоматов нет действий или деятельностей.Действия являются мгновенными и непрерывными.Действия считаются мгновенными и непрерываемыми, тогда как деятельности занимают конечное время и могут быть прерваны. Каждоедействие в состоянии ассоциируется с внутренним переходом, инициируемым событием. В состоянии может быть любое число действийи внутренних переходов.Внутренний переход позволяет зафиксировать тот факт, что произошло чтото, заслуживающее отражения в модели, но не обуславливаю47921.6.
Переходыимя состояниявходное и выходноедействиявнутренниепереходывнутренняядеятельностьEnteringPasswordentry/ показать диалог для ввода пароляexit/ проверить парольkeypress/ отобразить “*”help/ вывести подсказкуdo/ принять парольсинтаксис действия: имяСобытия/некотороеДействиесинтаксис деятельности: do/некотораяДеятельностьРис.
21.4. Синтаксис состояниящее (или не настолько важное, чтобы моделировать это как) переходв новое состояние. Например, на рис. 21.4 нажатие одной из клавишклавиатуры, конечно, является заслуживающим внимания событием,но оно не приводит к переходу из состояния EnteringPassword (ввод пароля). Мы моделируем это как внутреннее событие keypress (нажатие клавиши), которое обусловливает внутренний переход, инициирующийдействие отобразить “*“.Два специальных действия – вход и выход – ассоциированы со специальными событиями entry и exit. У этих двух событий особая семантика.
Событие entry происходит мгновенно и автоматически при входев состояние. Это первое, что происходит, когда осуществляется входв состояние. Это событие обусловливает выполнение ассоциированного с ним действия на входе. Событие exit – самое последнее, что происходит мгновенно и автоматически при выходе из состояния. Обусловливает выполнение ассоциированного действия на выходе.Деятельности длятся конечный промежуток времени и могут быть прерваны.Деятельности, с другой стороны, длятся конечный промежуток времени и могут быть прерваны по получении события. Деятельность обозначается ключевым словом do (делать).
В отличие от действий, которые всегда завершаются, потому что они атомарны, деятельность можно прервать до того, как завершилось ее выполнение.21.6. ПереходыUMLсинтаксис переходов для поведенческих автоматов представленна рис. 21.5.Переходы показывают движение между состояниями.480Глава 21. Конечные автоматыПоведенческий автоматсобытие1, событие2 [сторожевоеУсловие]/ действиеABРис. 21.5. Синтаксис переходов для поведенческих автоматовСинтаксис переходов в поведенческом автомате прост и может использоваться для внешних переходов (изображаются стрелками) или внутренних переходов (изображаются вложенными в состояние). Каждыйпереход имеет три необязательных элемента.1.
Нуль или более событий – определяют внешнее или внутреннеепроисшествие, которое может инициировать переход.2. Нуль или одно сторожевое условие – логическое выражение, которое должно быть выполнено (иметь значение true), прежде чем может произойти переход. Условие указывают после событий.3. Нуль или более действий – часть работы, ассоциированная с переходом и выполняемая при срабатывании перехода.Рисунок 21.5 можно прочитать так: «При возникновении (события1ИЛИ события2), если (сторожевоеУсловие является истинным), выполнитьдействие и немедленно перейти в состояние B».В действиях могут использоваться переменные, область действия которых – конечный автомат. Например:actionPerformed( actionEvent )/ command = actionEvent.getActionCommand()В приведенном примере actionPerformed( actionEvent ) – событие, генерируемое нажатием кнопки в Java GUI.
При получении этого событиявыполняется действие по сохранению имени кнопки в переменнойcommand.Синтаксис переходов протокольных автоматов немного другой, какпоказано на рис. 21.6.Протокольный автомат {protocol}[предусловие] событие1, событие2/ [постусловие]CDРис. 21.6. Синтаксис переходов для протокольных автоматов48121.6. Переходы•Здесь нет действия, поскольку задается протокол, а не реализация.•Сторожевое условие заменено предусловиями и постусловиями. Обратите внимание, что предусловие указывается перед событиями,а постусловие – после слэша.Как в поведенческих, так и в протокольных автоматах переход, осуществляемый без события, называют автоматическим переходом (auto+matic transition).
Автоматический переход не ожидает события и срабатывает при выполнении его сторожевого условия или предусловия.21.6.1. Соединение переходов – переходноепсевдосостояниеПереходные псевдосостояния объединяют или разветвляют переходы.Переходы могут быть соединены переходными псевдосостояниями(junction pseudo+states).
Это точки слияния или ветвления переходов.Они изображаются в виде закрашенных кружков с одним или болеевходными переходами и одним или более исходящими переходами.Пример на рис. 21.7 показывает конечный автомат для класса Loan,который был представлен в разделе 18.12.2. Loan моделирует получение книги в библиотеке. Конечный автомат Loan имеет простой узелслияния. Это наиболее распространенное использование переходныхпсевдосостояний.У переходного псевдосостояния может быть несколько выходных переходов.
В этом случае каждый исходящий переход должен быть защищен взаимоисключающим сторожевым условием, обеспечивающим возможность срабатывания только одного перехода. Примерпредставлен на рис. 21.8. Здесь конечный автомат для класса Loan былрасширен, чтобы обработать случай, когда выдача книги может бытьпродлена. Бизнесправило состоит в том, что для продления срока возврата выданная книга должна быть предъявлена библиотеке.
Такимобразом, события returnBook попрежнему действительны.Loanпростой узел слиянияOnLoanreturnBookpayFine[after maximumDuration]OverdueTerminatedreturnBookFineDueРис. 21.7. Конечный автомат класса Loan имеет простой узел слияния482Глава 21. Конечные автоматыLoan[extend]OnLoanreturnBookTerminated[!extend]узел слиянияи ветвления[after maximumDuration]OverduepayFinereturnBookFineDueРис. 21.8. Конечный автомат класса Loan имеет узел слияния и ветвления21.6.2. Ветвление переходов – псевдосостояние выбораДля представления простого ветвления без слияния необходимо использовать псевдосостояние выбора (choice pseudo+state), как показанона рис.
21.9.Псевдосостояние выбора направляет поток конечного автомата согласно заданным условиям.Псевдосостояние выбора позволяет направлять поток конечного автомата согласно условиям, заданным для исходящих переходов. НаприBankLoanUnpaidacceptPaymentпсевдосостояние выбора[payment > balance][payment < balance][payment = balance]OverPaidmakeRefundFullyPaidPartiallyPaidacceptPaymentРис. 21.9. Реализация ветвления без слияния с помощью псевдосостояниявыбора48321.7.