From: Brian Candler Date: 2003-09-03T23:21:59+09:00 Subject: Re: OOP flavors - was Re: Python vs. Ruby On Wed, Sep 03, 2003 at 04:16:19AM +0900, Hal Fulton wrote: > I've just realized that in the back of my mind, I prefer passing > the "little object" into the "big object" rather than vice versa. > Hmm. A psychological aspect there. > > Much of what Ruby already does bears this out, I think. > > array << item # not item << array > stack.push(item) # not item.push(stack) > queue.add(item) # not item.add(queue) > > Junk-food for thought... But perhaps more importantly: we expect the receiver of a message to modify its state, not the sender. item.push(stack) would be sending a message to the item to push itself onto a particular stack; the item would be unchanged by the action, but the stack would be changed. This is getting very close to the procedural push(stack,item) since the 'push' method would need to know about the internal instance variables and organisation of a stack in order to be able to update it. And then that logic would have to be put into every possible type of 'item' that you wanted to be able to push onto a stack ! The Ruby Way is that the stack itself knows how to push/pop items, and doesn't care what kind of object it is given to push (all it's doing is copying a reference to it, after all). That makes a great deal of sense. Not that this necessarily helps the paper.draw(object,pen) discussion, but the particular examples you gave do seem to have a natural sender/receiver divide. Regards, Brian.