We discovered, during the process of workshopping this paper at UIUC, that a half-generation of object-oriented programmers have grown up knowing only Java. Not only are they largely ignorant unaware of / oblivious to / of Smalltalk, let alone CLOS, but they are confused as well to the distinction between dynamic multidispatch and static overloading. So I’ve taken the liberty of concocting a simple, real-world example in order to illustrate this distinction, and thereby dispel some of this confusion.

Consider this Simple Scotsman. He’s a subclass of Carouser, and implements but a single operation, “imbibe”, which takes a Libation as an argument. In order for our model to exhibit the degree of real-world fidelity this problem demand, we’ll need find a way to ensure our Scotsman’s behavior is distinguished by the kind of Libation he imbibes.

Here’s our first attempt: When our Caledonian Carouser savors his dram of Scotch, he adds it / augments the contents of his stomach, nudges / cranks his blood alcohol level up a wee notch, and utters something incomprehensible that evidently nonetheless indicates profound satisfaction…

However, when Angus samples the Irish, he adds it to the contents of his stomach. It would seem it has no discernable effect on his BAL. He mutters something in visible disgust.