Herencia privativa

Herencia pública en C

Uno de los conceptos más importantes de la programación orientada a objetos es el de herencia. La herencia nos permite definir una clase en términos de otra clase, lo que facilita la creación y el mantenimiento de una aplicación. También ofrece la oportunidad de reutilizar la funcionalidad del código y agilizar el tiempo de implementación.

Al crear una clase, en lugar de escribir miembros de datos y funciones miembro completamente nuevos, el programador puede designar que la nueva clase herede los miembros de una clase existente. Esta clase existente se denomina clase base, y la nueva clase, clase derivada.

Una clase puede derivar de más de una clase, lo que significa que puede heredar datos y funciones de varias clases base. Para definir una clase derivada, se utiliza una lista de derivación de clases para especificar la(s) clase(s) base. Una lista de derivación de clases nombra una o más clases base y tiene la forma –

Una clase derivada puede acceder a todos los miembros no privados de su clase base. Por lo tanto, los miembros de la clase base que no deben ser accesibles a las funciones miembro de las clases derivadas deben ser declarados privados en la clase base.

C++ heredar miembros privados

En C++ existen tres tipos de herencia: pública, protegida y privada. Desde un punto de vista técnico, difieren en la visibilidad de los métodos de la clase derivada y, por tanto, influyen en la interfaz de la clase derivada. Así pues, desde un punto de vista técnico, estos tipos de herencia son fáciles de explicar. Pero desde el punto de vista del diseño de software, puede resultar más difícil explicar los diferentes conceptos. En este artículo quiero dar una breve visión general sobre estos tres tipos de herencia desde el punto de vista del diseño de software y conectarlos con los conceptos subyacentes del paradigma orientado a objetos.

Este tipo de herencia crea una relación «es-un» entre objetos. El objeto derivado ofrecerá la interfaz de la clase base y, por tanto, el tipo de clase derivada «es-un» tipo de clase base también. Esto refleja las ideas de herencia dentro del paradigma orientado a objetos. En un artículo anterior encontrará más detalles sobre este concepto.

En contraste con la herencia pública, que crea una relación lógica entre clases, la herencia privada refleja un punto de vista más técnico. Creará una relación «se implementa en términos de» entre clases. Por lo tanto, este concepto compite con la composición, que crea el mismo tipo de vínculo entre clases. Como siempre se debe preferir la composición a la herencia, la herencia privada sólo es necesaria en caso de que las limitaciones técnicas omitan el uso de la composición. En un artículo anterior encontrarás más información sobre este concepto y algunos casos de uso de la herencia privada.

C++ con herencia

En este artículo, vamos a aprender acerca de la herencia privada en la programación orientada a objetos (POO) con referencia a C++. La herencia privada implica el uso de Especificadores de Acceso Privado para sus funciones miembro y miembros de datos.

Ahora bien, antes de entrar en el tema, uno debe ser consciente de lo que es la herencia. La herencia, como su nombre indica, nos ayuda a definir una clase utilizando las propiedades de otra clase, la clase de la que se heredan las propiedades se conoce como la clase padre o clase base y la clase que hereda la clase padre se conoce como la clase hija o clase derivada.

Entre estos tipos de herencia, la herencia pública es la más utilizada y son muy limitados los recursos al tipo de herencia no pública. Pueden surgir muchas preguntas sobre el uso de las no públicas ya que sus aplicaciones raramente serían visibles para nosotros en nuestra vida diaria.

La herencia sigue el concepto de relación IS-A, por ejemplo, Coche es un vehículo, Camión es un vehículo donde Coche y Camión son clases derivadas y Vehículo es la clase base. Ahora la Herencia Privada no es una relación IS-A sino que se utiliza para implementar una relación HAS-A. Consideremos un enunciado más, Coche tiene un Asiento donde Coche es la clase base y Asiento es la clase derivada. Ahora, Car y Seat no tienen una relación particular pero Seat quiere usar algunos miembros de Car evitando su uso posterior por cualquier otra clase o función, esto es lo que proporciona esta herencia. Precisamente, esta herencia se puede escribir como:

Herencia en C

El tema 32 demuestra que C++ trata la herencia pública como una relación is-a. Lo hace mostrando que los compiladores, cuando se les da una jerarquía en la que una clase Estudiante hereda públicamente de una clase Persona, convierten implícitamente Estudiantes en Personas cuando es necesario para que una llamada a una función tenga éxito. Merece la pena repetir una parte de ese ejemplo utilizando herencia privada en lugar de herencia pública:

En contraste con la herencia pública, los compiladores generalmente no convertirán un objeto de clase derivada (como Estudiante) en un objeto de clase base (como Persona) si la relación de herencia entre las clases es privada. Por eso falla la llamada a comer para los objetos.

El hecho de que herencia privada signifique es-implementado-en-términos-de es un poco inquietante, porque el Tema 38 señala que composición puede significar lo mismo. ¿Cómo se supone que debes elegir entre ellos?

¿Cuándo debe hacerlo? Principalmente cuando los miembros protegidos y/o las funciones virtuales entran en escena, aunque también hay un caso límite en el que los problemas de espacio pueden inclinar la balanza hacia la herencia privada. Nos preocuparemos del caso límite más adelante. Después de todo, es un caso límite.

¡Vota!
Scroll al inicio
Ir arriba