Pages - Menu

lunes, 24 de junio de 2013

Curso de Programación Orientada a Objetos 4/6: Herencia

Después de unos días donde hemos realizado un paréntesis en el curso ofreciendo ejercicios y el índice oficial, volvemos al curso. En éste cuarto capítulo trataremos uno de los aspectos de la Programación Orientada a Objetos que es posiblemente la más importante, la Herencia.

Foto tomada de freedigitalphotos.net

¿Qué es la herencia?

Bueno, realmente llevamos usando herencia desde el principio del curso y en los ejercicios propuestos, ahora sólo falta definirla formalmente.

La herencia es la cualidad de la Programación Orientada a Objetos por la cual una clase recibe todos los métodos de sus clases padre y además define los suyos propios.

Cuando hablamos de herencia no podríamos definirlo mejor que como una herencia en el sentido estricto de la palabra. Una clase que viene de una o más clases en su correspondiente jerarquía recibe todos los métodos de sus clases predecesoras.

Ejemplo.

Imaginemos de nuevo nuestra clase Animal, la cual tendrá una subclase llamada Carnívoro y ésta a su vez dos subclases llamadas Felino y Cánido, de la cual instanciaremos los objetos León y Lobo.

Pues bien, imaginemos que la clase Animal tiene un método llamado Caminar, la subclase Carnívoro tiene un método llamado Comer, la clase Felino tiene el método Correr y la clase Cánido tiene el método Aullar.

En éste caso planteado si instanciamos un objeto León de la clase Felino, éste objeto tendrá los métodos Caminar, Comer y Correr. Mientras que si instanciamos un objeto Lobo de la clase Cánido tendrá los métodos Caminar, Comer y Aullar.

Si instanciamos un objeto de la clase Carnívoro, dicho objeto tendrá los métodos Caminar y Comer.

De ésta forma actúa la herencia, y aquí reside una gran parte de la potencia de la Programación Orientada a Objetos. Podemos definir una clase y métodos generales, luego varias clases hijas bien diferenciadas, y a su vez nuevas clases hijas por cada una de las anteriores. De ésta forma tendremos una jerarquía de clases perfectamente definida, bien implementada y con un potencial enorme para poder desarrollar comodamente.

Superclase y subclase.

Esto serían dos definiciones más formales de los elementos que hemos visto hasta ahora.

Superclase – Es la clase que aporta sus métodos a las clases que la hereden, también se llama Clase Padre.
Subclase – Son las clases que heredan de una Superclase, también se las conoce como Clase Hija.

En nuestro ejemplo Animal sería una superclase y Carnívoro una subclase de Animal, pero a la vez la clase Carnívoro es una superclase de Felino y Cánido y éstas serían sus subclases.

this y super.

Una subclase hereda todos los métodos de su superclase, no obstante es posible redefinir éstos de nuevo o bien ampliarlos.

Tanto si escogemos una opción como otra se puede utilizar perfectamente dos palabras reservadas para tal fin, aunque normalmente serán las siguientes:

this – Con esto accedemos a los atributos de la propia clase, gracias a esto podemos trabajar con los atributos propios. Es un método bastante potente y a la vez aclaratorio acerca de a qué elemento queremos hacer referencia.

super – Con super podemos acceder a todos los atributos de la superclase de la que estamos heredando (o de los ancestros)

Conclusión.

Gracias a la herencia podemos establecer una jerarquía de clases en las que los métodos se van heredando para así poder usarlos, ampliarlos o redefinirlos. Es un concepto muy importante de la Programación Orientada a Objetos así como una herramienta muy potente para desarrollar con claridad, rapidez y reutilización de código.

Con esto terminamos el cuarto capítulo del curso de Programación Orienta a Objetos, en el próximo capítulo veremos otro concepto bastante importante y que nos ayudará bastante a la hora de desarrollar: La encapsulación.

¿Qué utilidad le ves a la Herencia de Clases?