The centralized event-scheduling model presented in the previous chapter
is not well suited to the simulation of the robot system. The robot system is
highly decentralized: the devices are autonomous and their interactions are
There is no need for event synchronization among the device activities.
The robot devices share only the data structures that represent the position
of the robot in the environment. The event-based model provides features to
model complex finite state machines, whereas a very simple finite state
machine can describe the behaviour of every robot device.
Thus, we choose to adopt the process-based model that consists of imple-
menting every robot device as a thread (see Sidebar 10.1 for a description of
Java threads). The definition of class Device needs to be extended to imple-
ment the run() method of the Runnable interface. This method is common to
every concrete device and implements the finite state machines depicted in
Figure 10.13. Class Device defines two abstract methods that every subclass
must implement. Method executeCommand() initializes the device state in
order to execute a new command when the device is not running. Method
nextStep() performs a micro state transition that executes a new micro step.
This solution corresponds to the implementation of pattern Template
method described in Gamma et al . (1995). Figure 10.14 depicts the inter-
action diagram between class Device and class Laser . Method println(command)
specifies which command should be executed.
if not running
Figure 10.14 The interaction diagram of the run() method