Hi,

In message "[ruby-talk:03588] Interface polymorphism"
    on 00/06/21, hal9000 / hypermetrics.com <hal9000 / hypermetrics.com> writes:

|In his book _Object-Oriented Perl_, Damian Conway discusses
|what he calls "interface polymorphism" (as distinguished
|from inheritance polymorphism). Basically as long as two
|objects both implement the method needed at the moment, no
|ancestor relationship need exist between the objects.

|I immediately thought of Ruby's "mix-in" capability (and
|the method_missing method). I think this is certainly an
|example of what Conway was talking about.

Well, Mix-in is not a "interface polymorphism", it's a variation of
"inheritance polymorphism".

An example of "interface polymorphism" is Enumerable module, which
requires a mixing class to have `each' method and that's all.  No
inheritance relation is needed.

|For that matter, I am not sure how Ruby handles name clashes --
|i.e., names defined in more than one included module. I suppose
|you simply use the fully qualified name?

No special way to resolve name class is provided for Ruby.  Just two:

  1) alias

     to prepare alias to the original

  2) override

     since Mix-in is an inheritance, usual override rule for method
     combination is applicable.

							matz.