Hello all - I am reviving this thread with some OO Design archaeology I stumbled upon while revising my course notes. In 1995 Peter Coad proposed a "Do it myself" pattern for assigning responsibilities that says:"I do those things that are normally done to the actual object that I'm an abstraction of."
Anyway, this heuristic could explain cd.buy()
Here's the reference (but it's out of print...):
Coad, P. (1997). Object Models : Strategies, Patterns, and Applications (2nd Revised ed. edition). Upper Saddle
River, N.J : Pearson Technology Group.