Incluso si pudieran ser malas prácticas, diría que hay tiempo para que cumpla su propósito.
.net
c#
object-oriented
Amir Rezaei
fuente
fuente
Respuestas:
/programming/995255/why-is-multiple-inheritance-not-allowed-in-java-or-c cubre muy bien esta pregunta.
Mi opinión sobre esto es esta: los diseñadores probablemente quisieron hacer un lenguaje que promoviera buenos principios de diseño. Ok, hay veces que la herencia múltiple es perfecta. Sin embargo, esas son la excepción, más que la regla, y pueden ser abusadas muy fácilmente. Entonces, los diseñadores decidieron hacer que sea imposible hacerlo.
Para aquellos casos en los que sería bueno, debe usar interfaces. Esos trabajos, aunque torpemente; pero no los necesitarás tanto para eso.
fuente
Solo para ilustrar por qué no, C ++ admite la herencia múltiple, pero se desaconseja encarecidamente, ya que puede lograr la mayoría de las cosas con la composición que haría con MI, sin embargo, de una manera mucho más limpia. A diferencia de C ++, C # no es un lenguaje OOP de tipo "híbrido", es decir, no evolucionó de un lenguaje anterior.
Si realmente necesita herencia múltiple, puede implementar múltiples interfaces.
fuente
Walter Bright es el creador de D, que no incluye MI, y la única persona que ha escrito un compilador C ++ completo por sí mismo. Según él, la razón por la que D carece de MI es que es demasiado difícil crear un sistema de MI que sea a la vez eficiente, simple y útil. Sospecho que Java y C # usan un razonamiento similar. Los lenguajes como Perl y Python no tienen la eficiencia como objetivo principal, por lo que tienen un sistema que es simple y útil, pero difícil de implementar de manera eficiente. C ++ no parece tener la simplicidad como un objetivo, por lo que creó un sistema enormemente complicado que casi nadie comprende.
Creo que Walter está justo en el blanco. Si existe algún idioma que tenga un sistema de MI que satisfaga estos tres criterios razonablemente bien, deje un comentario.
fuente
La herencia múltiple, si la usa mucho, da como resultado situaciones muy complejas. Demasiada complejidad con poco beneficio es la razón por la que se descartó tanto para Java como para C #.
fuente
Debido a que los diseñadores de lenguaje aparentemente querían producir un mejor C ++, no un mejor lenguaje en general. (Se puede debatir el éxito que tuvieron).
La herencia múltiple de estilo C ++ tiene algunos problemas, por lo que las personas que derivan de C ++ generalmente la omiten (Java, C #, D). Otros idiomas, Eiffel y Common Lisp, por nombrar dos, lo hacen de manera diferente y no parecen tener los mismos problemas.
fuente