The advantages of an object oriented approach to software design have been widely discussed in the literature. Project Smalltalk at Xerox PARC was the first heavily funded investigation into the object oriented approach to software [Gol83]. The Department of Defense sanctioned language, Ada, has many provisions to support a form of object oriented software design [Dep83,Boo83]. The C++ extension to the C language provides object support for C [ES90,Eck90].
The Lisp language [McC60] has been the breeding ground for a number of object oriented approaches, including Closures [AS85], Flavors [Moo86], LOOPS [BKK$^$86], Object Lisp [Dre85,Tel87,Tel89], and CLOS [Gab89,Kee88,Ste90]. The Whitewater Group's Actor is also an object oriented system [Fra89]. The X-Windows system [Nye88] and Microsoft's MS-Windows [Pet88] and Presentation Manager [Pet89] are all object oriented systems of a sort.
We have been developing an object oriented system called Dreams based on the Forth language. Although most currently popular object oriented programming systems operate with a class based object model, Dreams makes use of a prototype object model. The prototype model for objects is becoming more widespread, however. This is due to its simplicity. The SELF object oriented language [US91] uses prototypes.
Another Forth object oriented approach has been developed, but it uses an early binding strategy similar to Ada and C++ [Pou87]. TILE Forth is a portable Forth system written in C that runs under the UNIX operating system [Pat90]. TILE Forth is freely available under the Gnu Software License [Sta87]. It contains object oriented extensions for both class based and prototype based object models, thereby providing Forth-based examples of both approaches.
All this concern over object orientation is a result of a desire to make software easier to write, easier to re-use for other applications, easier to maintain, and generally easier to understand. Whereas conventional programming methodologies separate algorithm from data, the object oriented approach unifies the two with objects that behave in certain ways depending on what they are told and on what they already know.
The message passing practice of many object oriented systems is analogous to the way we as humans operate when we delegate a task to another person: we send them a message that tells them what to do. What they actually do is a function of what we told them, and what they already understand. In dreams, the messages are called thoughts. The objects are called dreams. They impose the understanding. Thoughts are interpreted, or ``pondered'', in the understanding of a dream.