Typestate-oriented programming
Jonathan Aldrich, Joshua Sunshine, Darpan Saini, Zachary Sparks · 2009
Objects model the world, and state is fundamental to a faithful modeling. Engineers use state machines to understand and reason about state transitions, but programming languages provide little support for reasoning about or implementing these state machines, causing software defects and lost productivity when objects are misused.