ClubEnsayos.com - Ensayos de Calidad, Tareas y Monografias
Buscar

Herencia C++


Enviado por   •  31 de Enero de 2015  •  1.463 Palabras (6 Páginas)  •  268 Visitas

Página 1 de 6

Herencia Simple

Es cuando una clase derivada hereda de una única clase, es decir una clase derivada sólo tiene un padre o ascendiente. Por su parte una clase base puede tener tantos descendientes como sean necesarios sin limitación alguna. Es un sistema jerárquico en forma arborescente, similar a la estructura de directorios de algunos sistemas operativos4. La forma general de la herencia en C++ es: class : [] { // Cuerpo de la declaración de la clase }; El nombre_clase_heredada se refiere a una clase base declarada previamente. Ésta pude estar ya compilada, o puede que se declare en el mismo programa que la derivada, en este segundo caso se debe declarar la clase base antes de la derivada, o al menos declarar el nombre de la clase base como una referencia anticipada.

HERENCIA MULTIPLE:

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 sólo 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 sólo 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.

herencia con protección.

Al igual que otros lenguajes de programación orientados a objetos, C# tiene modificador de acceso protected (protegido), además de public y private.

Los miembros heredados con protección están implícitamente protegidos en la clase derivada Los miembros de una clase derivada sólo pueden acceder a sus miembros heredados con protección En una struct no se usa el modificador de acceso protected

El significado del modificador de acceso protected depende de la relación entre la clase que tiene el modificador y la clase que intenta acceder a los miembros que usan el modificador. Los miembros de una clase derivada pueden acceder a todos los miembros protegidos de su clase base. Para una clase derivada, la palabra reservada protected es equivalente a la palabra public. En el fragmento de código

...

Descargar como (para miembros actualizados)  txt (9.5 Kb)  
Leer 5 páginas más »
Disponible sólo en Clubensayos.com