13 - El concepto de herencia en la Programación Orientada a Objetos

Lección 13 del curso Python Nivel Avanzado.

Introducción

En la práctica anterior vimos cómo diseñar e implementar una app de productividad usando la Programación Orientada a Objetos en Python y allí pusimos en práctica los conceptos de clases, métodos, atributos e instancias.

Pero resulta que a partir de las clases, como las que hemos creado hasta ahora, podemos crear nuevas clases agregando funcionalidades adicionales, lo que hace más versátil y flexible nuestro programa.

Cuando creamos una clase a partir de otra clase existente estamos usando lo que se conoce como herencia, así que en esta lección veremos en detalle este concepto.

Suscríbete para tener acceso al video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

¿Qué es la herencia?

Supongamos que implementamos un programa determinado que nos permite manipular y operar sobre diferentes figuras geométricas.

Así que creamos la clase FiguraGeometrica que contiene el atributo tipo y el método mostrar_tipoque nos indican el tipo de figura que tendremos una vez instanciada la clase e imprimirá esta información en pantalla.

Pero sabemos que podemos tener dos grandes familias de figuras geométricas: las bidimensionales y las tridimensionales. Y cada una es una FiguraGeometrica pero tendrá características diferentes.

Así que a partir de FiguraGeometrica podremos crear dos nuevas clases (Figura2D y Figura3D) que seguirán teniendo el atributo tipo, pero a las cuales además podremos añadirle los atributos area (en el caso 2D) y volumen (en el caso 3D).

Pero si nos enfocamos en cada una de estas nuevas clases podemos ver que hay diferentes tipos de figura 2D y 3D.

Por ejemplo, en el caso 2D podemos tener un círculo, que es una Figura2D pero que además del área tendrá por ejemplo un radio, o un rectángulo, que además del área tendrá por ejemplo el tamaño de sus lados. Y en el caso 3D podemos tener una esfera y un cono, que además del volumen tendrán atributos como el radio (en ambos casos) o la altura (en el caso del cono).

Así, hemos vismo que de FiguraGeometrica se derivan las clases Figura2D y Figura3D, y que de estas dos últimas se derivan las clases circulo y triangulo y esfera y cono respectivamente.

Estas clases derivadas poseen los mismos atributos y métodos de la clase original: todas tienen el atributo tipoy el método mostrar_tipo, todas las clases derivadas de Figura2D tienen el atributo area y todas las derivadas de Figura3D tienen el atributo volumen.

Así que podemos ver que es como si FiguraGeometrica fuese la clase padre (o madre) y como si Figura2D y Figura3D fueren las clases hijo/a y hubiesen heredado las características de la clase padre (el atributo tipo).

A su vez las clases circulo y triangulo son herederas de la clase Figura2D y también han heredado sus atributos, al igual que las clases esfera y cono que heredan las características de la clase Figura3D.

Así que en la programación orientada a objetos la herencia es el procedimiento en el cual una clase hereda los atributos y métodos de otra clase.

Terminología: clase base y subclases

En el ejemplo anterior podemos decir que la clase FiguraGeometricaes la clase base, a partir de la cual se derivan todas las demás subclases.

Así, Figura2D y Figura3D son subclases de FiguraGeometrica, mientras que circulo y triangulo lo son de Figura2D y esfera y cono lo son de 3D.

Por qué es útil el concepto de herencia

Este concepto de herencia resulta muy útil en la Programación Orientada a Objetos porque nos permite extender una clase base (como FiguraGeometrica) para lograr especializarla a través de subclases con nuevos métodos y atributos.

Y esto a su vez permite reutilizar el código y hace que nuestros programas puedan evolucionar a medida que agregamos más complejidad a los mismos.

Recuerda suscribirte para acceder al video con la explicación detallada de esta lección. Además podrás disfrutar de todos los cursos de la Academia Online

Conclusión

Ya tenemos claro el concepto de herencia, una herramienta fundamental en la Programación Orientada a Objetos, y que consiste en crear subclases que heredarán los atributos y métodos de la clase base de la cual se derivan.

Así que en la próxima lección veremos cómo poner en práctica este concepto, a través de la implementación de la herencia en Python.

Ver todas las lecciones de este curso