I like to tell people about the UCO or &quot;Unencapsulated Composite Operation&quot;. It tends to win arguments over &quot;global functions are evil&quot;.<p>Say you have two classes, A and B. You have an operation that uses <i>both</i> of them. You can declare A::func(B) or B::func(A) but this couples the classes together. Yuckko.<p>So you just make a global function, func(A, B). The function gets its job done using public methods, and the classes remain unaware of each other.<p>That&#x27;s the foot in the door. Then you whip multidispatch and CLOS on &#x27;em and watch their eyes get real wide :-)