Clases derivadas y herencia

Una jerarquía de clases en programación orientada a objetos se refiere a una estructura de clases organizadas en forma de árbol, donde las clases se clasifican en superclases y subclases. La jerarquía de clases se basa en el concepto de herencia, donde las subclases heredan propiedades y comportamiento de las superclases.

En una jerarquía de clases, la clase en la parte superior del árbol se conoce como clase base o superclase, mientras que las clases debajo de ella se denominan subclases o clases derivadas. Cada subclase puede heredar las características de su superclase directa y también puede agregar sus propias características adicionales o modificar las características heredadas.

Aquí hay un ejemplo de una jerarquía de clases de vehículos:

Ejemplo de una jerarquía de clases de vehículos

En este ejemplo, la clase Vehículo es la superclase que representa características y comportamientos comunes a todos los vehículos, como el número de ruedas, la capacidad de pasajeros, etc. Las clases Coche y Motocicleta son subclases de Vehículo y heredan sus propiedades y métodos.

La subclase Coche puede tener subclases adicionales como Sedán y Deportivo, que heredan las propiedades y métodos de la clase Coche y agregan sus propias características específicas.

De manera similar, la subclase Motocicleta puede tener subclases como Chopper y Scooter, que heredan de Motocicleta y agregan características adicionales.

La jerarquía de clases permite organizar y estructurar el código de manera más clara y modular, ya que las clases más específicas heredan y reutilizan el código de las clases más generales. Además, facilita la implementación de polimorfismo, permitiendo tratar objetos de las subclases como objetos de la superclase en determinados contextos.

Las clases derivadas y la herencia son conceptos fundamentales en la programación orientada a objetos (POO) que permiten la reutilización de código y la creación de relaciones jerárquicas entre las clases.

La herencia en POO se refiere a la capacidad de una clase (llamada subclase o clase derivada) de heredar propiedades y comportamiento de otra clase (llamada superclase o clase base). Esto significa que la subclase puede aprovechar los miembros (atributos y métodos) de la superclase sin tener que volver a escribirlos. Además, la subclase puede agregar nuevos miembros o modificar los miembros heredados según sea necesario.

La sintaxis básica para definir una clase derivada en C++ es la siguiente:

La palabra clave public indica el tipo de acceso a la clase base.

En este caso, public especifica que la clase derivada hereda públicamente los miembros y métodos de la clase base.

También existen private y protected, que restringen la visibilidad de los miembros heredados en diferentes formas.

Al heredar de una clase base, la clase derivada adquiere todos los miembros y métodos de la clase base, excepto aquellos que están marcados como private. Esto permite que la clase derivada utilice los miembros heredados como si fueran propios y también puede proporcionar su propia implementación para esos miembros si es necesario (anulación de métodos).

La herencia permite construir relaciones jerárquicas entre clases, lo que facilita la organización y estructuración del código. Las clases derivadas pueden especializarse y agregar nuevas funcionalidades específicas mientras aprovechan el código existente en la clase base.

Aquí hay un ejemplo simple que ilustra la herencia en C++:

En este ejemplo, la clase Animal es la clase base…

…y la clase Perro es la clase derivada.

La clase Perro hereda el método comer() de la clase Animal

…y también agrega su propio método ladrar().

Al crear un objeto de la clase Perro, se pueden invocar tanto los métodos heredados de la clase base como los métodos propios de la clase derivada.