Вы можете описать эти взаимодействия, используя две диаграммы конечного автомата 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):
![signal-symbols](https://i.stack.imgur.com/DN1DD.png)
Например, чтобы перейти из режима ожидания в состояние занятости при получении сигнала Req с параметром id:
![signal-receipt](https://i.stack.imgur.com/Fktgk.png)
Вы также описали ситуацию, когда ведомое устройство запрашивает определенные данные у мастера. Для этого вам понадобится третья схема (или текстовая спецификация) интерфейса, предоставленного ведущим и требуемого ведомым, например:
![interface](https://i.stack.imgur.com/d9ul3.png)
На диаграмме конечного автомата ведомого вы можете вызвать операцию, определенную в интерфейсе. Например, чтобы вызвать операцию read
для master
, когда ведомое устройство входит в состояние Busy, и сохранить его в локальной переменной x
, введите entry/x:=master.read()
в символе состояния X.
Для ознакомления с диаграммой конечного автомата UML см. wikipedia