On Mon, Nov 5, 2012 at 6:44 PM, Marc H. [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