A bottom-up programming paradigm. The idea is to concentrate on creating relatively simple individual entities of a system, then letting them interact with each other by "sending messages" (triggering events) to one another. When an event is triggered, certain code executes - this code may send new messages to even more objects. The heart of the program is a simple time-slicing loop which gives each object a chance to act on messages received.

By writing a system in this way, you don't have to concentrate on the overall monolithic structure of the large program - just on little bits at a time. The behaviour of the larger system emerges from the interaction of these smaller components. Adding new components to the system becomes easier, because you don't have to deal with the complexity explosion you get when adding things to a more traditional system - the new component simply needs to know how to react to messages the rest of the system sends it. You deal with things one object at a time, rather than having to consider the entire system when adding something.