One
of the great software inventions of the 20th century was the state machine. An
application can often be broken up into multiple state machines each of which
controls a specific component of the application. Each of these state machines
has their own internal states and state transitions that dictate how the
software reacts to various stimuli. Designing software using state machines
will ease in the development of software that is modular, maintainable and easy
to understanding. A wide variety of resources exist that demonstrate state
machine theory and algorithms.