Unidad 19. La herencia en las clases (I)





19.1. Objetivos del tema.

La herencia es una de las características de las clases, vamos a ver el funcionamiento y sus ventajas de cara al uso dentro de los programas.

19.2. Introducción.

El concepto de herencia en una clase es tal cual la palabra nos lo índica, no es necesario ampliar el significado de la misma.

La filosofía es sencilla, yo creo una clase que puede ser el punto de partida para un concepto y que posteriormente puede ir especializándose o mejorándose, pero en lugar de copiar y pegar lo que ya tenemos escrito, lo que hacemos es indicar en el código de la clase que escribo, que tome todas las características de la clase que se índica.

No siempre las clases se pueden heredar, cuando escribimos una clase podemos indicar de forma explicita que no se pueda usar en otras clases, pero también podemos escribirla como plantilla, y obligar a que sea heredada y no pueda ser utilizada para declarar con ella un objeto.

19.3. Clase base, origen.

Cuando hablamos de herencia, hay que pensar que hablamos de una clase que es la origen y de otra que es la que la contiene.

En la imagen podemos ver como la clase Tres, se inicia a partir de los contenidos de las clases Uno y Dos, que se heredan en su inicio, y que serán la clase de referencia o de origen en parte de los contenidos de la misma.

Por lo tanto la clase tres tendrá todas las capacidades y características de las clases Uno y Dos más las que se desarrollen en ella misma.

En la clase origen se pueden definir métodos que no se hereden, esos no serán reutilizados en las clases que se obtengan a partir de la de origen.

En la clase resultante, la clase tres, tendrá entonces el código del que se dispone en las clases uno y dos, más el código que se genera propio en la clase tres.

 

19.4. Clase derivada.

La clase derivada es la clase resultante al heredar las clases Uno y Dos, y asumirá todas las características de las clases origen.

Además en esta clase podemos le añadiremos las características necesarias para que cumpla la función para la cual se diseña.

 

19.5. Tipos de herencia.

La herencia puede arrancar a partir de una o de varias clases, pero eso dependerá de las características del lenguaje utilizado, ya que no todos permiten que se hereden en una clase varias clases origen.

 

Cuando solo se admite la herencia de una clase origen, se denomina herencia simple, y si se admite más de una clase se denomina herencia múltiple.

 

La herencia múltiple es más compleja, tenemos que tener presente que cuando en una clase se heredan al mismo nivel varias clases origen, el problema surge cuando se da la circunstancia de existir métodos con el mismo nombre, pues hay que decidir cual de ellos es el que dispone de prioridad al ser utilizado, o bien cuando se llama a un método y éste tiene que buscarse por varias de las ramas posibles de las distintas herencias disponibles en la clase actual.

 

Si miramos la imagen de la derecha, en esa forma de rombo, si la clase siete hereda la cuatro, cinco y seis, cuando se indica el uso de un método que no es de la propia clase siete, hay que buscarlo en todas las ramas posibles, es decir, en la rama cuatro, dos y uno, pero también en la rama cinco, dos, uno y en la rama seis, tres y uno.

En cuanto a la herencia, hay que pensar que los métodos de la clase uno, puede ser que aparezcan, - en función de cómo cada lenguaje gestione la herencia -, repetidos varias veces, lo que genera ambigüedades en la gestión.

 

Dicho de otra forma, se complica en gran medida la gestión y localización de los métodos y el sistema de prioridades en el momento de localizar dos al mismo nivel, de ahí que lo que habitualmente contemplan los lenguajes de programación mayoritariamente es la herencia simple, que es más sencilla de gestionar, y también por consecuente más eficiente.

19.6. Sobre escritura.

Una vez que se crea una clase a partir de otras de origen, puede darse la circunstancia de que los métodos que tengamos heredados no nos interesen, en ese caso los métodos pueden ser sustituidos, sobre escritos, y entonces se ejecutarían los que se crean de nuevo en la clase resultante, ignorándose los de la clase origen.

19.7. Limitaciones en la herencia.

Todos los campos y métodos de una clase son siempre accesibles para el código de la misma clase.

Para controlar el acceso desde otras clases, y para controlar la herencia por las clases derivadas, o subclases, los elementos (atributos y métodos) de las clases tienen tres situaciones posibles de control de acceso:

 

Público, public   Los miembros declarados públicos son accesibles en cualquier lugar en que sea accesible la clase, y son heredados por las subclases.

 

Privado, private   Los miembros declarados privados son accesibles sólo en la propia clase.

 

Protegido, protected Los miembros declarados protegidos son accesibles sólo para sus subclases

19.8. Conclusiones.

El uso de la herencia nos puede permitir crear la siguiente estructura.

Creamos la clase persona, en esta clase definimos la estructura de datos personales y escribimos un método que nos visualice dichos datos en el soporte que se crea oportuno.

Después podemos escribir la clase alumno, y que esta clase herede la clase persona, por lo que ya tenemos a nuestra disposición todo lo referente a los datos personales y su visualización, provenientes de la clase base, Persona, y a la clase alumno le añadimos lo referente a los datos académicos y su correspondiente visualización.

Y podemos hacer lo mismo con la clase profesor, pero en lugar de datos académicos, le definimos datos administrativos.

Por lo tanto, ambas clases, alumno y profesor, heredan la misma clase, persona, y comparten la gestión de los datos personales.

Si creamos el objeto

 

AlumnoDePrimero = nuevo Alumno,

 

el objeto AlumnoDePrimero tendrá disponibles,

 

Los datos personales y académicos.

Los métodos de visualizar datos personales y datos académicos.

 

Y así sucesivamente podemos ir ampliando las características de cada una de las clases, e ir mejorando la estructura de las mismas.

 

Octubre-2010
Pág. 19.1

Atrás  Inicio  Adelante






Página inicial  Cursos Informática Gratuitos

Síguenos en:   Facebook       Sobre aulaClic            Política de Cookies