Самоучитель по UML




Синхронизирующие состояния - часть 3


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

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

Примечание

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

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




Содержание  Назад  Вперед