Event-Driven Programming Explained