On Mon, Nov 5, 2012 at 6:44 PM, Marc Heiler <[email protected]> wrote:

> There is one thing that is however not looked at much at
> all in this discussion - less the distinction between
> multiple inheritance vs. module mixins, and much more so
> what the distinction class vs. module actually serves.
>
> Because I often feel that the distinction between classes
> and modules is much more arbitrary than seems to be reasonable.
>

The difference between class and module in Ruby is
- classes can be instantiated, modules can't
- classes can be inherited (SI), modules can be included (MI)

Did I miss any?  Other than that both are identical (e.g. both can be used
as namespace).  For me the more dramatic difference is actually the first
one because despite the differences between SI and MI in Ruby it's just
gradual (i.e. the number of items to inherit from - 1 for classes, n for
modules).

So if we assume for a moment that we agree on the most significant
difference then it follows quite naturally (for me at least) that classes
should be used for entities, tangible things while modules should rather be
used for capabilities (behavior).  And I believe you can see that
distinction at work in the standard library: there's Array which is a list
of objects (entity) and Enumerable which is a set of capabilities.


> But why is that behaviour contained within a module? Why
> could we not assume that ALL behaviour of every object
> resides in an (perhaps invisible) module?
>
> Then we could use classes the same way as modules.
>

I do not understand how this follows from the premise.  If all behavior
would reside in modules than classes would not contain behavior at all.
But then classes and modules could not be used the same way.  What am I
missing here?


> Why must there be this distinction between classes and
> modules in this way?
>

I do not think there is a reason why the distinction "must" be there.  It's
just what Matz designed the language to be.  I think the distinction I was
trying to make above is actually not too unreasonable.  It seems so far it
has served the language quite well so far.

Kind regards

robert

-- 
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/

-- You received this message because you are subscribed to the Google Groups 
ruby-talk-google group. To post to this group, send email to 
[email protected]. To unsubscribe from this group, send email 
to [email protected]. For more options, visit this 
group at https://groups.google.com/d/forum/ruby-talk-google?hl=en

Reply via email to