A Note on Terminology

Before jumping into the technical details of the design, a word of clarification is necessary. For those of you who aren't familiar with the terminology, an OO "message" has absolutely nothing to do with a Windows message like WM_CHAR (though a Windows message does indeed exhibit some message-like behavior). In standard OOPese, objects communicate with one another by sending messages. Message passing is implemented in different ways in different languages. In C++, for example, "sending a message" to an object involves calling a member function of either the receiving object's class or one of its base classes. When you send a message to an object, you effectively invoke the associated message-handler function in the receiving object. Other languages do it in different ways. I've used terms like "send a message" because the design I'll be discussing is really language (and to a large extent, operating system) independent, so using accepted non-Microsoft terminology seems sensible. Just bear in mind that the Windows SendMessage API has nothing to do with OO message passing. I'll make it clear when I mean a Windows message, so assume that generally a message is an OO thing, not a Windows thing.