The author of this book firmly believes that the rise of so-called 'Visual' development tools has led to the creation of GUI-based applications that are wholly dependent on the GUI framework and are constructed in a largely ad-hoc fashion. This leads to a pathological coupling between interface and application with all the associated maintenance and quality nightmares. This book then is an attempt to apply a little engineering and architectural design to an application interface in the hope of creating something that is more flexible, maintainable and robust.
The book starts with chapters on UI construction issues and introduces the idea of a 'user interface - control - model' architecture. The author uses a simple CD player application to demonstrate the superiority of the statechart notation over more conventional state transition diagrams.
Several chapters go on to discuss the statechart notation and the practical issues involved in producing consistent diagrams for an event-driven application design. This was the most useful section of the book, in my opinion, containing many heuristics and tests, which can be used to check your designs.
There are chapters devoted to three case studies; a calculator, a help-desk system and the ubiquitous student database. These serve to expand on the points made in the previous chapters. At the end of the book are chapters on coding and testing together with an evaluation of the techniques presented.
The thing that stops me from recommending this book whole-heartily is the chapter on translating the design into actual code, which is crammed into 13 pages. The argument to use statecharts is let down badly by the code examples, which are in some weird Basic-like pseudocode. This obscures rather than illustrates the intention of each example. I would like to see examples in a range of specific languages such as C++, VB and Delphi.
A very good starting point for designing and documenting an interface but not the complete answer.