17.1 — Introducción a la herencia

17.1 — Introducción a la herencia

En el último capítulo, discutimos la composición de objetos, donde las clases complejas se construyen a partir de clases y tipos más simples. La composición de objetos es perfecta para construir nuevos objetos que tienen una relación "tiene un" con sus partes. Sin embargo, la composición de objetos es solo una de las dos formas principales en que C++ le permite construir clases complejas. La segunda forma es a través de la herencia, que modela una relación "es-un" entre dos objetos.

A diferencia de la composición de objetos, que implica la creación de nuevos objetos combinando y conectando otros objetos, la herencia implica la creación de nuevos objetos adquiriendo directamente los atributos y comportamientos de otros objetos y luego ampliándolos o especializándolos. Al igual que la composición de objetos, la herencia está en todas partes en la vida real. Cuando fuiste concebido, heredaste los genes de tus padres y adquiriste atributos físicos de ambos, pero luego añadiste tu propia personalidad encima. Los productos tecnológicos (computadoras, celulares, etc…) heredan características de sus antecesores (muchas veces utilizadas para retrocompatibilidad). Por ejemplo, el procesador Intel Pentium heredó muchas de las funciones definidas por el procesador Intel 486, que a su vez heredó funciones de procesadores anteriores. C++ heredó muchas funciones de C, el lenguaje en el que se basa, y C heredó muchas de sus funciones de los lenguajes de programación anteriores.

Considere las manzanas y los plátanos. Aunque las manzanas y los plátanos son frutas diferentes, ambas tienen en común que son frutas Y debido a que las manzanas y los plátanos son frutas, la lógica simple nos dice que todo lo que es cierto de las frutas también lo es de las manzanas y los plátanos. Por ejemplo, todas las frutas tienen un nombre, un color y un tamaño. Por lo tanto, las manzanas y los plátanos también tienen un nombre, un color y un tamaño. Podemos decir que las manzanas y los plátanos heredan (adquieren) todas estas propiedades de la fruta porque son Fruta. También sabemos que la fruta pasa por un proceso de maduración, por el cual se vuelve comestible. Debido a que las manzanas y los plátanos son frutas, también sabemos que las manzanas y los plátanos heredarán el comportamiento de maduración.

Puesto en un diagrama, la relación entre manzanas, plátanos y frutas podría verse así:

Este diagrama define una jerarquía.

Jerarquías

Una jerarquía es un diagrama que muestra cómo se relacionan varios objetos. La mayoría de las jerarquías muestran una progresión a lo largo del tiempo (386 -> 486 -> Pentium) o categorizan las cosas de una manera que va de lo general a lo específico (fruta -> manzana -> red delicious). Si alguna vez has estudiado biología, el famoso dominio, reino, filo, clase, orden, familia, género y especie define una jerarquía (de lo general a lo específico).

Aquí hay otro ejemplo de una jerarquía:un cuadrado es un rectángulo, que es un cuadrilátero, que es una forma. Un triángulo rectángulo es un triángulo, que también es una figura. Póngalo en un diagrama de jerarquía, que se vería así:

Este diagrama va de lo general (arriba) a lo específico (abajo), y cada elemento de la jerarquía hereda las propiedades y los comportamientos del elemento que tiene encima.

Una mirada al futuro

En este capítulo, exploraremos los conceptos básicos de cómo funciona la herencia en C++.

En el próximo capítulo, exploraremos cómo la herencia permite el polimorfismo (una de las grandes palabras de moda de la programación orientada a objetos) a través de funciones virtuales.

A medida que avancemos, también hablaremos sobre los beneficios clave de la herencia, así como algunas de las desventajas.