1. A generic software state machine for implementing a software application in an object oriented environment, comprising: a set of state objects defined for each software element of the software application that the software element may enter, the set of state objects representing a number of behavior states that a particular one of the software elements may express, the particular one of the software elements being associated with a particular one of the state objects; and a set of event objects defined for each state object representative of inputs that the software element may receive or actions the software element may encounter while being associated with the particular one of the state objects, the software element operable to change its association to another one of the state objects in response to the inputs received or actions encountered.