WWW.KNIGA.LIB-I.RU
БЕСПЛАТНАЯ  ИНТЕРНЕТ  БИБЛИОТЕКА - Онлайн материалы
 

«Моделирование состояний Чтобы хорошо понять систему, лучше всего сначала изучить ее статическую структуру, то есть структуру ...»

Моделирование состояний

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

времени (модель классов). После этого можно уделить внимание изменениям объектов и

их отношений с течением времени (модель состояний). Модель состояний описывает

последовательности операций, происходящих в системе в ответ на внешние воздействия

(в противоположность содержанию, предмету и реализации операций, описываемым моделью классов).

Модель состояний состоит из нескольких диаграмм состояний, по одной на каждый класс, поведение которого во времени важно для приложения. Диаграмма состояний — это стандартная концепция из информатики (графическое представление конечного автомата), связывающая события и состояния. События представляют внешние воздействия, а состояния — значения объектов.

1 События Событие (event) — это происшествие, случившееся в определенный момент времени, например нажатие пользователем левой кнопки мыши или вылет рейса 123 из Чикаго. Часто события соответствуют глаголам в прошедшем времени (питание было включено, будильник был установлен) или выполнению некоторого условия (опустошился лоток для бумаги, температура опустилась ниже точки замерзания) в описании задачи. По определению событие происходит мгновенно, по крайней мере, во временном масштабе приложения. Разумеется, ничего мгновенного в реальном мире не бывает. Событие — это происшествие, которое рассматривается как атомарное и скоротечное. Неявным атрибутом события является момент его осуществления.



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

Одно событие может логически предшествовать другому или следовать за ним.

События могут быть и несвязанными друг с другом. Рейс 123 должен вылететь из Чикаго прежде, чем он сможет прибыть в Сан-Франциско. Эти два события находятся в причинно-следственной связи. Однако рейс 123 может вылететь как перед вылетом рейса 456 из Рима, так и после него. Эти два события не связаны друг с другом. Несвязанные события называются параллельными (concurrent). Они никак не влияют друг на друга.

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

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

Термин «событие» часто используется в нескольких смыслах. В некоторых случаях он обозначает экземпляр, а в других случаях — класс. На практике эта двусмысленность обычно не создает проблем, так как точный смысл слова следует из контекста. При необходимости вы можете употреблять точные термины: «осуществление события» или «происшествие» (экземпляр события) и «тип события» (класс).





События бывают разных видов. Чаще всего встречаются события сигналов, события изменения и события времени.

1.1 Событие сигнала Сигнал (signal) — это явная односторонняя передача информации от одного объекта другому. Сигнал отличается от вызова подпрограммы, который может возвращать значение. Объект, передающий сигнал другому объекту, может рассчитывать на получение ответа, но этот ответ будет отдельным сигналом, и его отправка (или задержка) будет целиком зависеть от второго объекта.

Событие сигнала (signal event) — это событие получения или отправки сигнала.

Обычно более важным считается получение сигнала, потому что оно влияет на объектполучатель. Обратите внимание на разницу между сигналом и событием сигнала: сигнал — это сообщение между объектами, а событие сигнала — это происшествие.

Каждая передача сигнала является уникальным происшествием, но можно группировать их в классы сигналов и дать каждому классу имя, подчеркивая общую структуру и поведение. Например, вылет рейса 123 Юнайтед Эйрлайнс из Чикаго 10 января 1991 года — это экземпляр класса сигналов Вылет Рейса. Некоторые сигналы являются обычными происшествиями, но большинство из них характеризуются атрибутами, в которых хранятся передаваемые этими сигналами значения.

Например, на рис. 1.1 класс FlightDeparture (Вылет Рейса) обладает атрибутами airline (авиакомпания), flightNumber (номерРейса), city (город) и date (дата). В UML сигнал обозначается ключевым словом «signal» в угловых кавычках («»), которое ставится над именем класса сигнала в верхнем разделе прямоугольника. Во втором разделе указываются атрибуты сигнала.

«signal» «signal» «signal»

MouseButtonPushed FlightDeparture ReceiverLifted

–  –  –

1.2 События изменения Событие изменения (change event) — это событие, вызванное выполнением логического выражения. Суть события состоит в том, что некоторое выражение постоянно проверяется, и как только его значение изменяется с «ложно» на «истинно», осуществляется событие изменения. Разумеется, в реализации никакой непрерывной проверки осуществляться не будет, но она должна быть достаточно частой, чтобы в масштабе приложения казаться непрерывной.

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

Несколько примеров:

when (температура в комнате установка нагрева) when (температура в комнате установка охлаждения) when (заряд батареи нижнее ограничение) when (давление в шинах минимальное давление)

1.3 События времени Событие времени (time event) — это событие, вызванное достижением момента абсолютного времени или истечением временного интервала. В UML момент абсолютного времени обозначается ключевым словом when, за которым следует временное выражение в круглых скобках. Временной интервал обозначается ключевым словом after, за которым следует выражение, результатом вычисления которого является временной интервал:

when (дата = 1 января 2000 г.) after (10 секунд)

–  –  –

Состояние (state) — это абстракция значений и связей объекта. Множества значений и связей группируются в состояние в соответствии с массовым поведением объектов.

Например, состояние банка может быть либо «платежеспособен», либо «банкрот», в зависимости от того, что больше: активы или обязательства. Состояния часто соответствуют отглагольным формам или деепричастиям (Ожидает, Дозванивается) или выполнению некоторого условия (Включен, Ниже Точки Замерзания).

На рис. 5.4 показана система обозначений состояния в UML: прямоугольник со скругленными углами, в котором ставится необязательное название состояния. Название состояния выделяется полужирным шрифтом и пишется с заглавной буквы.

–  –  –

Определяя состояния, мы не учитываем атрибуты, не оказывающие влияния на поведение объекта, и объединяем вместе в одно состояние все комбинации значений и связей, характеризующиеся одинаковыми откликами на события. Разумеется, каждый атрибут должен влиять на поведение, иначе он не будет иметь никакого значения, однако достаточно часто некоторые атрибуты не влияют на последовательность управления. Их можно рассматривать просто как значения параметров состояния. Вспомните, что суть моделирования состоит в том, чтобы сосредоточиться на качествах, важных для решения задачи, и отбросить все неважные. Три модели UML (классов, состояний и взаимодействия) дают разные представления системы. В разных представлениях важными оказываются разные атрибуты и значения. Например, набранные на телефоне цифры (за исключением первых 0 или 8) не влияют на управление телефонной линией, поэтому их можно обобщить в состоянии Dialing (Набор Номера) и считать телефонный номер параметром. В некоторых случаях все возможные значения атрибута оказываются важными, но это бывает только в тех случаях, когда их количество невелико.

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

Состояние описывает отклик объекта на получаемые события. В конкретном состоянии игнорируются любые события, за исключением тех, поведение при получении которых описано явным образом. Отклик на событие может быть вызовом поведения или изменением состояния. Например, если в состоянии Гудок нажать кнопку с цифрой на телефоне, зуммер сбрасывается, а телефонная линия переходит в состояние НаборНомера. Если же в состоянии Гудок повесить трубку, линия отключается и переходит в состояние Свободно.

Между событиями и состояниями существует некоторая симметрия (рис. 2.2.) События — это точки на линии времени, а состояния – интервалы. Состояние соответствует интервалу между двумя точками, обозначающими два полученных объектом события. Например, между снятием трубки и нажатием первой цифры телефонная линия находится в состоянии Зуммер. Состояние объекта зависит от предыдущих событий, которые в большинстве случаев перекрываются последующими событиями. Например, события, произошедшие до того, как трубка была повешена, не влияют на будущее поведение. Состояние Свободно «забывает» о событиях, полученных до сигнала повесить трубку.

Включение питания Выключение питания

–  –  –

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

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

Состояние можно характеризовать несколькими способами. Рассмотрим состояние Звонок будильника для часов.

Состояние: AlarmRinging Описание: при наступлении установленного времени звенит будильник на часах

Событие, приводящее к данному состоянию:

setAlarm (targetTime) любая последовательность кроме clearAlarm when (currentTime == targetTime)

Условие, характеризующее состояние:

alarm == on, alarm set to targetTime, targetTime = currentTime = targetTime+20 sec, no button has been pushed since targetTime

События, возможные в данном состоянии:

Событие Отклик Следующее состояние when (currentTime==targetTime+20) resetAlarm normal buttonPushed (any button) resetAlarm normal Состояние обладает именем и описанием на естественном языке.

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

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

Разные описания состояния могут перекрываться.

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

3 Переходы и условия

Переход (transition) — это мгновенная смена одного состояния другим. Например, когда вы отвечаете на входящий звонок, телефонная линия переходит из состояния Ringing (звонок) в состояние Connected (разговор). Говорят, что переход запускается (fire) при смене исходного состояния целевым. Исходное и целевое состояния обычно отличаются друг от друга, но они могут и совпадать. Переход запускается, когда происходит связанное с ним событие (если только необязательное сторожевое условие не приводит к игнорированию события). Выбор целевого состояния зависит как от исходного состояния, так и от полученного события. Событие может вызвать переходы во множестве объектов. С концептуальной точки зрения эти переходы происходят одновременно.

Сторожевое условие (guard condition) — это логическое выражение, которое должно быть истинным, чтобы переход мог запуститься. Например, сигнал светофора на перекрестке может переключиться только в том случае, если на дороге имеются ожидающие этого машины. Переход со сторожевым условием запускается в тот момент, когда осуществляется соответствующее событие, но только если в этот же момент выполнено его сторожевое условие. Например, «когда будешь выходить утром из дома (событие), если на улице будет ниже нуля (условие) — надень перчатки (целевое состояние)». Сторожевое условие проверяется только один раз, в тот момент, когда осуществляется событие, и если условие выполняется — происходит переход. Обратите внимание, что сторожевое условие концептуально отличается от события: условие проверяется только один раз, тогда как наличие события, по сути, проверяется непрерывно.

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

timeout [cars in N/S left lanes] North/south North/South may turn left may go straight

–  –  –

Рисунок 3.1.

Диаграмма состояний работы светофоров на перекрестке В UML для обозначения перехода используется линия, соединяющая исходное состояние с целевым. На одном из концов линии, указывающем на целевое состояние, ставится стрелка. Линия может состоять из нескольких сегментов. Событие может быть указано в качестве метки перехода. После события в квадратных скобках можно указать необязательное сторожевое условие. Название события обычно выделяется курсивом, а сторожевое условие записывается в квадратных скобках.

4 Диаграммы состояний

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

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

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

4.1 Пример диаграммы состояний На рис. 4.1 показана диаграмма состояний для телефонной линии. Данная диаграмма относится именно к телефонной линии, а не к звонящему или вызываемому абоненту. На диаграмме приведены последовательности, описывающие нормальные звонки, а также некоторые ненормальные последовательности, например тайм-аут при наборе номера или перегрузка линий. Для обозначения диаграммы состояний в UML используется прямоугольник. Название диаграммы указывается в пятиугольном теге в левом верхнем углу. Внутри прямоугольника изображаются состояния и переходы, образующие диаграмму.

–  –  –

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

Соединение может оказаться невозможным, если абонент или его узел заняты. Если же соединение оказывается успешным, телефон вызываемого абонента начинает звонить.

Если абонент отвечает на звонок, оба абонента могут осуществить разговор. Когда один из абонентов вешает трубку, линия разъединяется и снова возвращается в состояние ожидания.

Обратите внимание, что получение сигнала onHook (наРычаг) вызывает переход в состояние Idle (Ожидание) из любого другого состояния. Состояния не определяют все значения объекта полностью. Например, состояние Dialing (НаборНомера) включает все последовательности неполных телефонных номеров. Не обязательно рассматривать отдельные номера как разные состояния, потому что они характеризуются одинаковым поведением. Реальный набранный номер следует хранить как атрибут.

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

4.2 Одноразовые диаграммы состояний Диаграммы состояний могут описывать непрерывные циклы или одноразовые жизненные циклы.

Диаграмма состояний телефонной линии является непрерывным циклом. Описывая обычные режимы использования телефона, мы не интересуемся тем, каким образом цикл был запущен. (Если бы мы описывали установку новой линии, начальное состояние было бы для нас важно.) Одноразовые диаграммы состояний описывают объекты с конечным сроком существования. Такие диаграммы имеют начальное и конечное состояния. Сразу после создания объект оказывается в начальном состоянии. Вход в конечное состояние означает уничтожение объекта. На рис. 4.2 (верхняя диаграмма) показан упрощенный жизненный цикл игры в шахматы с начальным состоянием по умолчанию (сплошной кружок) и конечным состоянием по умолчанию («бычий глаз»). Начальное и конечное состояние можно обозначать точками входа и выхода. На рис. 4.2 (нижняя диаграмма) точка входа Start соединена с первым ходом белых, и игра заканчивается одним из трех возможных состояний. Точки входа (пустые кружки) и выхода (кружки с символом X) ставятся на периметре диаграммы состояний и могут иметь имена.

Chess checkmate White’s turn stalemate blackMoves whiteMoves stalemate

–  –  –

Рисунок 4.2.

Диаграмма состояний с точками входа и выхода.

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

State diagram name

–  –  –

Состояние (state). Обозначается прямоугольником со скругленными углами, в котором может быть указано имя состояния. Для начальных и конечных состояний имеются специальные обозначения (сплошной кружок и «бычий глаз» или перечеркнутый кружок соответственно).

Переход (transition). Изображается линией, соединяющей исходное состояние с целевым. Стрелка ставится около конца линии, указывающего на целевое состояние.

Линия может состоять из нескольких прямолинейных сегментов.

Событие (event). Событие сигнала изображается меткой на переходе. После названия события в круглых скобках можно указать атрибуты. Событие изменения обозначается ключевым словом when, после которого в круглых скобках указывается логическое выражение. Событие времени также обозначается ключевым словом when, после которого в круглых скобках указывается временное выражение, или ключевым словом after, после которого в круглых скобках указывается интервал времени).

Диаграмма состояний (state diagram). Заключается в прямоугольную рамку.

Название диаграммы указывается в небольшом пятиугольном теге в верхнем левом углу рамки.

Сторожевое условие (guard condition). Может быть указано в квадратных скобках после события.

Действия (effects, см. следующий раздел). Могут прикрепляться к переходу или состоянию. Указываются после символа косой черты (/). Действия, если их несколько, отделяются друг от друга запятыми и выполняются параллельно. (Если нужно выполнять действия последовательно, их можно разделить промежуточными состояниями.) Название состояния обычно выделяют полужирным шрифтом и делают первую букву заглавной. Названия событий – пишут курсивом, начиная со строчной буквы.

Сторожевые условия и действия не выделяются шрифтом и тоже пишутся со строчной буквы.

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

5.1 Действия и деятельность Действие (effect) — это ссылка на поведение, выполняемое в ответ на произошедшее событие. Деятельность (acitivity) — это фактическое поведение, которое может вызываться любым количеством действий. Например, деятельность disconnectPhoneLine (разъединитьЛинию) может выполняться в ответ на событие onHook (наРычаг) на рис.

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

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

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

Ключевое слово do используется для обозначения текущей деятельности (см. далее) и не может использоваться в качестве имени события. На рис. 5.1 показана диаграмма состояний для всплывающего меню рабочей станции. При нажатии правой кнопки мыши меню отображается на экране. Когда пользователь отпускает эту кнопку, меню исчезает.

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

Pop-up menu

–  –  –

5.2 Текущая деятельность Текущей (do activity) называется деятельность, занимающая некоторый промежуток времени. По определению такая деятельность может выполняться только в некотором состоянии и не может прикрепляться к переходу. Например, индикатор аварии у ксерокса может мигать в состоянии «Замятие бумаги» (рис. 5.2). Текущая деятельность включает непрерывные операции, такие как отображение картинки на телеэкране, а также последовательные операции, завершающиеся по прошествии некоторого промежутка времени (например, закрытие клапана).

Paper jam do / flash warning light

Рисунок 5.2. Текущая деятельность для ксерокса

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

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

На рис. 5.3 показана схема управления открыванием гаражной двери. Пользователь порождает событие depress (нажатие) нажатием кнопки, посредством которой он закрывает и открывает дверь. Каждое событие изменяет направление движения двери на противоположное, однако для обеспечения безопасности дверь должна быть открыта полностью, прежде чем ее можно будет снова закрыть. Система управления включает деятельность motor up (двигатель вверх) и motor down (двигатель вниз) для двигателя.

Двигатель порождает события door open (дверь открыта) и door closed (дверь закрыта), когда перемещение двери завершается. Оба перехода в состояние Opening (Открывание) приводят к открытию двери.

Garage gate

–  –  –

Рисунок 5.3.

Деятельность при переходах На рис. 5.4 показана та же самая модель, в которой деятельность прикреплена к входу в состояние. Деятельность при входе изображается внутри значка состояния с ключевым словом entry и символом /. Такая деятельность выполняется при входе в состояние по любому из входящих переходов. Деятельность при входе эквивалентна прикреплению той же деятельности к каждому из входящих переходов. Если входящий переход имеет свою собственную деятельность, она выполняется в первую очередь.

Garage gate

–  –  –

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

Если к состоянию привязано несколько видов деятельности, они выполняются в следующем порядке:

1) деятельность при входящем переходе,

2) деятельность при входе,

3) текущая деятельность,

4) деятельность при выходе,

5) деятельность при исходящем переходе.

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

В принципе, в состоянии может произойти любое событие. Entry и exit — частные случаи возможных событий. Как показано на рис. 5.5, существует отличие между событием в состоянии и переходом в себя: деятельность при входе и при выходе выполняется только в том случае, если происходит переход в себя.

Событие в состоянии Переход в себя Closed Menu visible shutdown / motor off cursor moved / highlight menu item Рисунок 5.5. Событие в состоянии и переход в себя

5.4 Переход по завершении Часто единственным назначением состояния является последовательное выполнение некоторой деятельности. Как только деятельность завершается, запускается переход в следующее состояние. Стрелка без названия события обозначает автоматический переход, который запускается, как только завершается деятельность, связанная с исходным состоянием. Такой переход называется переходом по завершении, потому что он переключается завершением деятельности в исходном состоянии.

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

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

Reading Sleeping do / read a book

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

Деятельность send targets (attributes) передает сигнал S с заданными атрибутами целевому объекту (или группе объектов) target. Например, телефонная линия передает коммутатору сигнал connect(phone number) (соединить(номер телефона)), когда пользователь набирает на своем аппарате полный номер телефона. Сигнал может быть адресован множеству объектов или одному объекту. В первом случае все объекты получают по копии сигнала одновременно, и каждый из них обрабатывает свою копию независимо. Если же сигнал всегда адресуется одному и тому же объекту, на диаграмме его можно не указывать (но при реализации это сделать все равно придется).

Если объект может получать сигналы от нескольких объектов, порядок получения параллельных сигналов может повлиять на итоговое состояние. Это называется ситуацией гонок (race condition). Например, в модели на рис. 5.4 дверь может как остаться открытой, так и закрыться, если кнопка будет нажата почти в тот же момент, когда дверь полностью откроется. Ситуация гонок не обязательно бывает ошибкой проектирования, но в параллельных системах часто возникают нежелательные ситуации гонок, которых следует избегать аккуратным проектированием. Требование одновременного получения двух сигналов никогда не может быть выполнено в реальном мире, потому что небольшие отклонения скорости передачи неотъемлемо присущи распределенным системам.

Похожие работы:

«УДК 615.851 ББК 53.57 К41 Перевод с английского Е. Мирошниченко Кинслоу Фрэнк Кто ничего не ищет — находит все: Секрет истинного К41 счастья / Перев. с англ. — М.: ООО Издательство "София", 2013. — 288 с. ISBN 978-5-399-00471-6 В своей глубокой книге "Кто ничего не ищет — находит все" Фрэнк Кинслоу показывает нам п...»

«В. Г. БЕЛИНСКИЙ Рецензия на "Деяния Петра Вели о о, м дро о преобразователя России" И. Голи ова Россия тьмой была покрыта много лет: Бог рек: да будет Петр — и бысть в России свет! Старинное двустишие Борода принадлежит к состоянию дикого че ловека; не брить ее то же, что...»

«Правила участия в Акции "Акция с телеканалом France 24" Акция "Акция с телеканалом France 24" (далее – "Акция") проводится в зоне обслуживания сети связи следующих макрорегиональных филиалов ПАО "Ростелеком" (ОГРН 1027700198767, имеющее место...»

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

«ВАЖНАЯ ИНФОРМАЦИЯ ОБ АПЕЛЛЯЦИЯХ Important Information Regarding Appeals Данная ВАЖНАЯ ИНФОРМАЦИЯ ОБ АПЕЛЛЯЦИЯХ направляется Вам для того, чтобы проинформировать Вас о Ваших правах и обязанностях как стороны в данном слушании. Важно, чтобы Вы немедленно прочитали данную информацию и начали подготовку к слушанию. Прилагаемо...»

«Journal of Siberian Federal University. Engineering & Technologies 6 (2013 6) 721-736 ~~~ УДК 711.1 Пространственная структура познавательного туризма Красноярского края Д.М. Астанин Сибирский федеральный университет, Россия 660041, Красноя...»

«УДК 666.9 Н.С. ЦАПКО, канд. техн. наук, доц., ХНЭУ им. С. Кузнеца, Харьков ИССЛЕДОВАНИЕ ПРОДУКТОВ ГИДРАТАЦИИ СПЕЦИАЛЬНОГО РЕНТГЕНОКОНТРАСТНОГО БАРИЙСОДЕРЖАЩЕГО ЦЕМЕНТА Статья посвящена исследованию продуктов гидратации отечественного рентгеноконтрастного цемента для стоматологии. Ра...»








 
2017 www.kniga.lib-i.ru - «Бесплатная электронная библиотека - онлайн материалы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.