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.