fbpx
Wikipedia

Herencia múltiple

Herencia múltiple hace referencia a la característica de los lenguajes de programación orientada a objetos en la que una clase puede heredar comportamientos y características de más de una superclase. Esto contrasta con la herencia simple, donde una clase solo puede heredar de una superclase.

Lenguajes que soportan herencia múltiple en su mayor parte son: C++, Centura SQL Windows, CLOS, Eiffel, Object REXX, Perl y Python.

La herencia múltiple permite a una clase tomar funcionalidades de otras clases, como permitir a una clase llamada MusicoEstudiante heredar de una clase llamada Persona, una clase llamada Músico, y una clase llamada Trabajador. Esto puede ser abreviado como MusicoEstudiante : Persona, Músico, Trabajador.

Ambigüedades

En la herencia múltiple aparecen ambigüedades, como en el ejemplo de encima: si la clase Músico heredaba de Persona y Trabajador, y la clase Trabajador heredaba de Persona. Existirían las siguientes reglas::

  • MusicoEstudiante : Persona, Músico, Trabajador
  • Músico : Persona, Trabajador
  • Trabajador: Persona

Si un compilador está mirando la clase MusicoEstudiante necesita saber si debe juntar las características iguales o si deben estar separadas. Por ejemplo, tendría sentido unir las características "Edad" de Persona para MusicoEstudiante. La edad de una persona no cambia si le consideras una Persona, un Trabajador o un Músico. Sin embargo, tendría sentido separar la característica "Nombre" de Persona y Músico si los músicos usan un nombre artístico diferente de su nombre real. Las opciones de juntar y separar son válidas según el contexto, y solo el programador sabe qué opción es correcta para la clase que está diseñando.

Cada lenguaje de programación trata estos problemas de herencia repetida de diferente forma:

  • C++ requiere que el programador establezca de qué clase padre vendrá la característica a usar. Por ejemplo con "Trabajador::Persona.Edad". C++ no soporta herencia repetida explícita porque no habría forma de indicar qué superclase usar.
  • CLOS permite al programador control total del método de combinación, y si no es suficiente, el protocolo de metaobjetos ofrece al programador formas de modificar la herencia, envío de métodos, instanciación de clases, y otros mecanismos internos sin afectar a la estabilidad del sistema.
  • Eiffel permite al programador explicitar si junta o separa características que son heredadas de superclases. Eiffel juntará características automáticamente si tienen el mismo nombre e implementación. El programador tiene la opción de renombrar las características para separarlas. Eiffel también permite explicitar herencia repetida como A: B, B.
  • Logtalk soporta tanto interfaces como multi-herencia de implementación, permitiendo declarar alias de métodos que ofrecen renombrar y acceder a métodos que quedarían ocultados por el mecanismo de resolución de conflictos convencional.
  • Perl usa la lista de clases para heredar de una lista ordenada. El compilador usa el primer método que encuentra mediante búsqueda en profundidad por la lista de superclases.

Java, Nemerle, Delphi, C# y Objective-C no permiten herencia múltiple; esto hace que no haya ambigüedad. Sin embargo, permiten a las clases implementar múltiples interfaces.

Debate

Hay debate sobre si la herencia múltiple puede ser implementada de forma simple y sin ambigüedad. Con frecuencia es criticada por su aumentada complejidad y su ambigüedad, así como los problemas de versiones y mantenimiento que puede causar (a menudo resumido como el problema del diamante).[1]

Los detractores también señalan que hay problemas de implementación de la herencia múltiple como no ser capaces de explicitar herencia de múltiple clases y el orden de las semánticas de clase que cambian con la herencia. Hay lenguajes que solucionan todos los problemas técnicos de la herencia múltiple, pero el debate principal sigue sobre si implementar y usar herencia múltiple es más fácil que usar herencia simple y patrones de diseño de software.

Véase también

Referencias

  1. (en inglés) Traits: Composable Units of Behavior

Enlaces externos

  • Tutorial sobre el uso de herencia en Eiffel (en inglés)
  •   Datos: Q1070739

herencia, múltiple, hace, referencia, característica, lenguajes, programación, orientada, objetos, clase, puede, heredar, comportamientos, características, más, superclase, esto, contrasta, herencia, simple, donde, clase, solo, puede, heredar, superclase, leng. Herencia multiple hace referencia a la caracteristica de los lenguajes de programacion orientada a objetos en la que una clase puede heredar comportamientos y caracteristicas de mas de una superclase Esto contrasta con la herencia simple donde una clase solo puede heredar de una superclase Lenguajes que soportan herencia multiple en su mayor parte son C Centura SQL Windows CLOS Eiffel Object REXX Perl y Python La herencia multiple permite a una clase tomar funcionalidades de otras clases como permitir a una clase llamada MusicoEstudiante heredar de una clase llamada Persona una clase llamada Musico y una clase llamada Trabajador Esto puede ser abreviado como MusicoEstudiante Persona Musico Trabajador Indice 1 Ambiguedades 2 Debate 3 Vease tambien 4 Referencias 5 Enlaces externosAmbiguedades EditarEn la herencia multiple aparecen ambiguedades como en el ejemplo de encima si la clase Musico heredaba de Persona y Trabajador y la clase Trabajador heredaba de Persona Existirian las siguientes reglas MusicoEstudiante Persona Musico Trabajador Musico Persona Trabajador Trabajador PersonaSi un compilador esta mirando la clase MusicoEstudiante necesita saber si debe juntar las caracteristicas iguales o si deben estar separadas Por ejemplo tendria sentido unir las caracteristicas Edad de Persona para MusicoEstudiante La edad de una persona no cambia si le consideras una Persona un Trabajador o un Musico Sin embargo tendria sentido separar la caracteristica Nombre de Persona y Musico si los musicos usan un nombre artistico diferente de su nombre real Las opciones de juntar y separar son validas segun el contexto y solo el programador sabe que opcion es correcta para la clase que esta disenando Cada lenguaje de programacion trata estos problemas de herencia repetida de diferente forma C requiere que el programador establezca de que clase padre vendra la caracteristica a usar Por ejemplo con Trabajador Persona Edad C no soporta herencia repetida explicita porque no habria forma de indicar que superclase usar CLOS permite al programador control total del metodo de combinacion y si no es suficiente el protocolo de metaobjetos ofrece al programador formas de modificar la herencia envio de metodos instanciacion de clases y otros mecanismos internos sin afectar a la estabilidad del sistema Eiffel permite al programador explicitar si junta o separa caracteristicas que son heredadas de superclases Eiffel juntara caracteristicas automaticamente si tienen el mismo nombre e implementacion El programador tiene la opcion de renombrar las caracteristicas para separarlas Eiffel tambien permite explicitar herencia repetida como A B B Logtalk soporta tanto interfaces como multi herencia de implementacion permitiendo declarar alias de metodos que ofrecen renombrar y acceder a metodos que quedarian ocultados por el mecanismo de resolucion de conflictos convencional Perl usa la lista de clases para heredar de una lista ordenada El compilador usa el primer metodo que encuentra mediante busqueda en profundidad por la lista de superclases Java Nemerle Delphi C y Objective C no permiten herencia multiple esto hace que no haya ambiguedad Sin embargo permiten a las clases implementar multiples interfaces Debate EditarHay debate sobre si la herencia multiple puede ser implementada de forma simple y sin ambiguedad Con frecuencia es criticada por su aumentada complejidad y su ambiguedad asi como los problemas de versiones y mantenimiento que puede causar a menudo resumido como el problema del diamante 1 Los detractores tambien senalan que hay problemas de implementacion de la herencia multiple como no ser capaces de explicitar herencia de multiple clases y el orden de las semanticas de clase que cambian con la herencia Hay lenguajes que solucionan todos los problemas tecnicos de la herencia multiple pero el debate principal sigue sobre si implementar y usar herencia multiple es mas facil que usar herencia simple y patrones de diseno de software Vease tambien EditarMixinReferencias Editar en ingles Traits Composable Units of BehaviorEnlaces externos EditarTutorial sobre el uso de herencia en Eiffel en ingles Datos Q1070739Obtenido de https es wikipedia org w index php title Herencia multiple amp oldid 136776414, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos