Вы можете описать эти взаимодействия, используя две диаграммы конечного автомата UML, одну для ведущего и одну для ведомого. Например, чтобы указать, что переход из состояния Idle в состояние Busy ведомого происходит после получения сигнала Req
от ведущего устройства, вы рисуете переход из режима ожидания в состояние Busy с меткой перехода Req
на диаграмме состояния ведомого устройства. Чтобы указать, что мастер отправляет сигнал Req
, когда он входит в состояние X, вы пишете entry/Req
внутри символа состояния X на диаграмме конечного автомата мастера.
В качестве альтернативы, вы можете рисовать элементы для отправки и приема сигналов (см. Разделы 14.2.4.8.2–14.2.4.8.5 спецификации UML 2.5.1):
Например, чтобы перейти из режима ожидания в состояние занятости при получении сигнала Req с параметром id:
Вы также описали ситуацию, когда ведомое устройство запрашивает определенные данные у мастера. Для этого вам понадобится третья схема (или текстовая спецификация) интерфейса, предоставленного ведущим и требуемого ведомым, например:
На диаграмме конечного автомата ведомого вы можете вызвать операцию, определенную в интерфейсе. Например, чтобы вызвать операцию read
для master
, когда ведомое устройство входит в состояние Busy, и сохранить его в локальной переменной x
, введите entry/x:=master.read()
в символе состояния X.
Для ознакомления с диаграммой конечного автомата UML см. wikipedia