La herencia es una de las tres propiedades fundamentales de la Programación Orientada a Objetos (POO). Según el documento, este concepto se desarrolla a través de los siguientes puntos:
1. Definición y Estructura
- Construcción de clases: La herencia permite construir nuevas clases a partir de clases base que han sido definidas previamente.
- Redefinición: Al crear una nueva clase mediante herencia, es posible añadir nuevos datos o acciones, así como redefinir los ya existentes.
- Jerarquía: Este proceso de creación sucesiva establece una jerarquía de clases que se puede representar como un árbol.
2. Funcionamiento de la Jerarquía
- Relación Padre-Hijo: Las clases situadas en la parte superior del árbol jerárquico se consideran «clases padres» o superclases, mientras que las situadas abajo son subclases.
- Acceso a comportamiento: Una subclase hereda automáticamente los atributos y comportamientos (datos y métodos) de su superclase.
- Superclase abstracta: Existe un tipo especial de superclase denominada «abstracta», la cual se utiliza exclusivamente para crear subclases y no permite la creación de instancias directas (objetos) de sí misma.
3. Método de Encadenamiento
Cuando se envía un mensaje a un objeto para que ejecute una acción, el sistema sigue un proceso de búsqueda jerárquica:
- La búsqueda del método comienza en la clase del receptor.
- Si no se encuentra el método allí, la búsqueda se desplaza hacia la superclase de esa clase.
- Este proceso continúa hacia arriba en la cadena de superclases hasta que se encuentra el método o la cadena se termina.
- Si se encuentra, el método se ejecuta; de lo contrario, se produce un mensaje de error.
4. Ventajas de la Herencia
- Reutilización (Reuso): Permite que tanto las estructuras de datos como los procedimientos sean compartidos, lo que facilita la creación de librerías y sistemas de software reusable.
- Abstracción: Al utilizar componentes reusables, el programador puede tratar los problemas en un nivel de abstracción superior.
- Mantenimiento y Claridad: Reduce la interdependencia entre los componentes, aportando mayor claridad al diseño del programa.