Matz supuestamente dijo "mixins podían hacer casi todo lo que la herencia múltiple hacer, sin los inconvenientes asociados" (palabras Matz)."¿Cómo es que la inclusión del módulo Ruby no es realmente "herencia múltiple" y cómo el estilo Ruby evita los problemas asociados con la herencia múltiple?
En primer lugar, ¿por qué es Rubí inclusión módulo no 'herencia múltiple'? Me parece que hay es muy poca diferencia entre módulos y clases. El hecho de que no se pueda instanciar un módulo es irrelevante cuando se usa como una superclase.
También sé que la sucesiva inclusión de módulos forma una cadena de herencia única (no árbol) que se extiende hacia arriba desde clase. Pero esto, para mí, no es suficiente para distinguirlo de la "herencia múltiple" ya que el sistema de herencia múltiple de Python también "linealiza" la cadena de la superclase (usando el C3 algorithm) es solo que el proceso de "linearización" de Ruby es significativamente más simple.
Entonces, ¿qué distingue exactamente las mezclas de módulos de Ruby de la herencia múltiple en, por ejemplo, un lenguaje como Python? ¿Y por qué los argumentos detrás de la adopción de Python del algoritmo c3 MRO no se aplican a Ruby? Y si se aplican, ¿por qué Ruby decidió no adoptar este algoritmo?
gracias
Aquí es un buen artículo sobre el caso, ver si responde a tu pregunta: http://www.artima.com/weblogs/viewpost.jsp?thread=246488 –
@Mladen esto es absolutamente brillante ... si lo agregas como una respuesta correcta, 'aceptaré' 'it :) – horseyguy