In article <3F550B69.5020305 / thingmagic.com>,
Ben Giddings  <ben / thingmagic.com> wrote:
: Sometimes having the affected object be the receiver can have some 
: strange effects though.  paper_obj.draw(pen_obj) may make more sense as 
: a programmer, but it is strange that a it seems to be the paper drawing, 
: and not the pen.  In this case, it might make more sense to make it 
: paper_obj.getDrawnOnBy(pen_obj) but that's both long-winded and odd-looking.

Yeah, BUT, what the heck is the pen drawing?

And whoever heard of a pen drawing stuff anyway?

Absent someone wielding a pen, though, a computer can do that.

    draw(polygon,pen,paper);

Well, that's not OO.  The point of OO is to decide who knows how
to do what.  Let's try again:

    polygon.draw(pen,paper);

That seems a little strange.  Self-drawing polygons, but they just
happen to use a specific pen?  Let's look at it again:

    paper.draw(pen, polygon);

The paper draws a polygon with a pen!  Hrm.  Maybe not.

    pen.draw(polygon,paper);

The pen draws a polygon on paper.  Although that still doesn't
look quite right.  I think that's something to do with the
language not being as expressive as English.  The concept of "draw
a polygon on a piece of paper with a pen" needs a little more
thinking to come up with a way of doing it that makes sense to
both computers and people.

    pen.draw(paper) do { polygon; }

perhaps?  That doesn't make any sense to me, though.

The point is, we're trying to express the real-life concept of
"use a tool to do things with stuff", and it sometimes helps and
sometimes hinders to think in terms of "things that stuff happens
to" and "things that can do stuff".  Perhaps we need a new idea,
"things that can perform actions on stuff"--but that's the Unix
"filters" paradigm....

--Dave