Herencia simple vs herencia Multiple

29/10/2008 - 16:28 por Oswaldo | Informe spam
Teóricamente .Net no permite la herencia argumentando, esto simplifica las
cosas y evita complexidad innecesaria. Me gustaría saber la opinión de
aquellas personas que han profundizado en le tema; es esto una ventaja o una
desventaja y si depende del escenario en que casos sería necesaria?
Saludos y gracias de antemano!

Preguntas similare

Leer las respuestas

#11 Octavio Hernandez
29/10/2008 - 20:43 | Informe spam
Hola Alfredo/Rafa,

Para mí una de las implementaciones "ejemplares" de la herencia múltiple
(como de varias otras cosas - me vienen a la mente las aserciones,
invariantes, etc.) es la de Eiffel (que se describe en "Object Oriented
Software Construction"). Pero eso tampoco lo usa casi nadie...

Slds - Octavio



"Alfredo Novoa" wrote in message
news:13ozrum2xyvog$
Hola RFOG,

El Wed, 29 Oct 2008 17:10:24 +0100, RFOG escribió:

Y hasta donde yo sé, el lenguaje de uso general (y que se use) que mejor
soporta/usa la herencia múltile es C++ [Hala, a lloverme h*stias a
porrillo
:-)]... Realmente creo que es el único, je je.



Hombre, tener tienes toda la razón. La herencia múltiple de Common Lisp es
mejor, pero no lo usa ni dios.

Python dice tener herencia múltiple, pero también es bastante limitada.


Saludos
Respuesta Responder a este mensaje
#12 Luisa Goicochea
30/10/2008 - 12:45 | Informe spam
Yo tuve una duda en otro hilo que puede verse como un ejemplo sobre
implementar herencia múltiple segun me explicó Alberto Población:

http://groups.google.com.do/group/m...9334b96262




"Oswaldo" escribió en el mensaje
news:
Teóricamente .Net no permite la herencia argumentando, esto simplifica las
cosas y evita complexidad innecesaria. Me gustaría saber la opinión de
aquellas personas que han profundizado en le tema; es esto una ventaja o
una
desventaja y si depende del escenario en que casos sería necesaria?
Saludos y gracias de antemano!

Respuesta Responder a este mensaje
#13 Julián Mejio
30/10/2008 - 12:56 | Informe spam
Igual, desde mi punto de vista, la herencia múltiple es buena, sin embargo, sólo
para aquellos que la sepan manejar. Además en su naturaleza, la herencia
múltiple de por sí es limitada, ya que empezando por la sobrecarga de métodos,
si no tienes control sobre éstos puedes dificultar la depuración del programa.
Igualmente es necesaria en el sentido de que no te toque crear una jerarquía
grande, pero como dije anteriormente, con el sacrificio de poner todo el cuidado
en que no vaya a generar ambigüedades con nombre de métodos, propiedades, o
cualquier artefacto del que vayas a heredar.

Oswaldo wrote:
Teóricamente .Net no permite la herencia argumentando, esto simplifica las
cosas y evita complexidad innecesaria. Me gustaría saber la opinión de
aquellas personas que han profundizado en le tema; es esto una ventaja o una
desventaja y si depende del escenario en que casos sería necesaria?
Saludos y gracias de antemano!

Respuesta Responder a este mensaje
#14 Luisa Goicochea
30/10/2008 - 13:08 | Informe spam
Igual, desde mi punto de vista, la herencia múltiple es buena, sin embargo,
sólo para aquellos que la sepan manejar.



Hasta la herencia simple es para quien la sepa manejar :)
Respuesta Responder a este mensaje
#15 RFOG
30/10/2008 - 13:26 | Informe spam
Buena respuesta la de Alberto, pero eso, como diría Alfredo, es una chapuza
causada por las limitaciones del lenguaje.

Por un lado, IMHO, los métodos de extensión son una chapuza que violan los
conceptos de orientación a objetos (la encapsulación). Es como si se
hubieran enfrentado a la imposibilidad de la herencia múltiple y se
decantaran por eso.

Los interfaces son más de lo mismo. No niego que estén bien, que lo están,
pero es "subir el problema un nivel". Me explico: la idea del interfaz es la
de forzar que una clase tenga un idem y que si falta algo se detecte en
tiempo de compilación en lugar de ejecución y/o de implementación (es decir,
que se te olvide algo). Pero lo único que estás haciendo es subir un
escalón: ahora, si se te olvida algo o diseñas mal un intefaz, estás
j*diendo toda la jerarquía que dependa de dicho interfaz, con lo que ante un
error tendrás que editar el inferfaz... y todas las clases que dependan de
ella. Lo que has facilitado es que el compilador avise si se te escapa
alguna clase... si no se te olvida que herede de dicho interfaz, que esa es
otra.

Sin embargo, en C++ con clases virtuales puras y virtuales, puedes hacer
exactamente lo mismo pero con menos problemas: la clase virtual pura puede
tener código ya compartido y no poderse instanciar (sí, ya lo sé, Alfredo),
con lo que tus clases hijas tendrán menos código, etc...

Una solución a la herencia múltiple es la agregación. Para el ejemplo que
has puesto, y de nuevo en C#, la idea sería definir un interfaz para la
clase de los métodos comunes, luego definir una clase general que implemente
dicho comportamiento y que reciba una referencia a los elementos que ha de
modificar. Luego, en cada clase en donde hubieras debido hacer herencia
múltiple, declaras una instancia a esa clase general... y si necesitas
cambiar el comportamiento de algún método de esa clase general, pues heredas
otra nueva clase general y listo.

Siendo un poco cuidadodos y usando la virtualización, incluso podríamos
tener una jerarquía de clases virtuales que colapsarían en tiempo de
ejecución en lo necesitado. Seguro que hay algún patrón para esto, pero como
tampoco es que sea muy amigo de ellos...

La jerarquía sería algo así:

InterfazComún -> ClaseGenerica1 -> ClaseGenerica2 -> ...

Clase A (contiene ClaseGenerica1)
Clase B (contiene ClaseGenerica1)
Clase C (hereda de A y contiene ClaseGenerica1(que viene de A)
Clase D (hereda de A y contiene ClaseGenerica1(que no vamos a usar) y
ClaseGenerica2)...

etc.


"Luisa Goicochea" wrote in message
news:
Yo tuve una duda en otro hilo que puede verse como un ejemplo sobre
implementar herencia múltiple segun me explicó Alberto Población:

http://groups.google.com.do/group/m...9334b96262




"Oswaldo" escribió en el mensaje
news:
Teóricamente .Net no permite la herencia argumentando, esto simplifica
las
cosas y evita complexidad innecesaria. Me gustaría saber la opinión de
aquellas personas que han profundizado en le tema; es esto una ventaja o
una
desventaja y si depende del escenario en que casos sería necesaria?
Saludos y gracias de antemano!








Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
El hombre sufre tan terriblemente en el mundo que se ha visto obligado a
inventar la risa.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida