Thanks for surfing with a better browser. Please consider changing your web browser.
October 02, 2003

State Machines and Agile Software Development

State Machines part three

I've recently finished reading Agile Software Development cover to cover. I learned a ton. I can't recommend this book strongly enough. This goes on my list of must-haves along side Design Patterns , and Refactoring , and Effective Java .

Bob Martin Introduces the state pattern on page 419:

Finite state automata are among the most useful abstractions in the software arsenal. They provide a simple and elegant way to explore and define the behavior of a complex system. They also provide a powerful implementation strategy that is easy to understand and easy to modify. I use them at all levels of a system, from controlling the high-level GUI to the lowest-level communication protocols. They are almost universally applicable.

That dispelled any doubts I had about all those workflows . And it gave me insight about what made that Tango outline effective. Despite some tendency toward self-doubt, I trust my intuition when it gets insistent. But confirmation by external authorities gives me a warm, fuzzy feeling inside. :-)

Just as I was settling a little too deeply into my self-satisfaction, Bob mentioned his state machine compiler, available for free at Object Mentor . It humbled me. Create a state transition table and let the compiler pop out a bunch of state machine gears and cogs. What an excellent example of meta-programming (about which I'll have more to say). Moreover, a state transition table is an excellent way to think about the state pattern. The compiler allows me to work with the state machine at a conceptual level without having to get lost in the state pattern minutia. This is the kind of trick I just know is going to change the way I approach problems. This is leverage.

By the way, Larry, who recommended Agile Software Development to me, has just commented about using state charts to design user interfaces .

Update: Thought I should include an example of the SMC config file. This is the state transition table for a turnstyle from the SMC distribution. I think you can see at a glance how it spares you the state machine minutia.

Context Turnstylecontext     // The Name Of The Context Class
Fsmname Turnstyle            // The Name Of The Fsm To Create
Initial Locked               // The Name Of The Initial State
                             // For C++ Output
Pragma Header  Tscontext.H   // The Header File Name For The Context Class
{
    Locked
    {
        Coin     Unlocked    Unlock
        Pass     Locked      Alarm
    }
    Unlocked
    {
	    Coin    Unlocked    Thankyou
	    Pass    Locked      Lock
    }
}
Posted 09:02 PM | TrackBack (0)
Comments
Email a comment

The comment form is broken. Please email your comments to blog-comment@dobbse.net.