Next: Interfaces as abstraction of a component's behaviour, Up: System Decomposition [Contents][Index]
Between components there are two fundamental type of interactions: 1) synchronous and 2) asynchronous.
The example above depicts a synchronous action, after sending the event enable to the ProtocolStack, the Application execution will be blocked until the "reply" (either a void reply or a value returned as result) is received.
When the ProtocolStack is activated, it can be requested to setup a connection by sending the event "connectReq" to it. After giving a "reply" on this event the ProtocolStack component will start setting up a connection and the two components continue to run concurrently, i.e., are able to perform other tasks while the connection request is being processed by the ProtocolStack component. Once the request is completed the ProtocolStack will send a notification connectReqRes to the Application. This illustrates an asynchronous action.
[Application] [ProtocolStack] | | | connectReq | |-------------------->| | "reply" | |<- - - - - - - - - - | | | | | | | | connectReqRes | |<--------------------| | "reply" | |- - - - - - - - - - >|
Remember that events have a direction. For the ProtocolStack component in this example the connectReqRes event is an out event. The Application, however, receives this event as an in event that has a void return or some other return type (currently Dezyne only supports void out events).