This PhD thesis examines theoretical and practical aspects of typestate modeling in object-oriented languages. It presents the Hanoi modeling language for representing typestate constraints and describes a dynamic checker for Hanoi models implemented using AspectJ. The thesis also reports on a user study that evaluated whether programmers can effectively reason about typestate models. The study found that programmers were generally able to answer questions about typestate models, suggesting typestate is a comprehensible concept for developers. Overall, the thesis provides insights into making typestate modeling practical and usable in real-world programming.