Controlling user interface objects through pre- and postconditions

We have augmented user interface objects (i.e. windows, menus, buttons, sliders, ets.) with preconditions that determine their visibility and their enabled/disabled status and postconditions that are asserted when certain actions are performed on the object. Postconditions are associated with each functionally different action on the object. Attaching pre- and postconditions to interface objects provides several useful features, such as selective enabling of controls, rapid prototyping, and automatic generation of explanations and help text.