A programming framework is provided for designing and implementing software state
machines. A state machine initializer may be created that defines the states, conditions,
actions, triggers, and state transitions for the software state machines. A set
of user interfaces, such as graphical user interfaces, may also be provided for
creating initializers. An abstract state machine object may then be created that
creates an instance of a particular state machine initializer. The state machine
initializer acts as a helper to the state machine object, which uses the initializer
to create an array of state transition objects. Once the state machine objects
creates the array of state transition objects, the state machine is ready to run.
A set of programming interfaces may also be provided to define the programming framework.