miércoles, 10 de agosto de 2011

HERENCIA

Una vez que hemos visto el concepto de clase y el de objeto, estamos en condiciones de
introducir otra de las características básicas de la programación orientada a objetos: el
uso de la herencia.
El mecanismo de herencia permite definir nuevas clases partiendo de otras ya
existentes. Las clases que derivan de otras heredan automáticamente todo su
comportamiento, pero además pueden introducir características particulares propias que
las diferencian.
Definición de la clase
“bicicleta”
OBJETOS O INSTANCIAS DE LA CLASE BICICLETAS 11
Como hemos visto, los objetos se definen a partir de clases. Con el mero hecho de
conocer a qué clase pertenece un objeto, ya se sabe bastante sobre él. Puede que no
sepamos lo que es la “Espada”, pero si nos dicen que es una bicicleta, ya sabremos que
tiene dos ruedas, manillar, pedales...
La programación orientada a objetos va más allá, permitiéndonos definir clases a partir
de otras clases ya construidas. Por ejemplo, las bicicletas de montaña, las de carretera y
los tándems son todos, en definitiva, bicicletas. En términos de programación orientada
a objetos, son subclases o clases derivadas de la clase bicicleta. Análogamente, la clase
bicicleta es la clase base o superclase de las bicicletas de montaña, las de carretera y los
tándems. Esta relación se muestra en la siguiente figura.
Cada subclase hereda los estados (en forma de declaración de variables) de la superclase
de la cual deriva. Las bicicletas de montaña, las de carretera y los tándems comparten
algunos estados: cadencia, velocidad... Además, cada subclase hereda los métodos de su
superclase.
LA HERENCIA EN LA PROG. ORIENTADA A OBJETOS12
Las bicicletas de montaña, las de carretera y los tándems comparten algunos
comportamientos: frenar y cambiar la cadencia de pedaleo, por ejemplo.
Sin embargo, las clases derivadas no se encuentran limitadas por los estados y
comportamientos que heredan de su superclase. Muy al contrario, estas subclases
pueden añadir variables y métodos a aquellas que han heredado. Los tándems tienen dos
asientos y dos manillares; algunas bicicletas de montaña tienen una catalina adicional
con un conjunto de marchas con relaciones de transmisión mucho más cortas. Las clases
derivadas pueden incluso sobrescribir los métodos heredados y proporcionar
implementaciones más especializadas para esos métodos. Por ejemplo, si nuestra
bicicleta de montaña tuviera una catalina extra, podríamos sobrescribir el método
“CambiarDeMarcha” para poder usar esas nuevas marchas.
Además, no estamos limitados a un único nivel de herencia. El árbol de herencias o
jerarquía de clases puede ser tan extenso como necesitemos. Los métodos y las variables
miembro se heredarán hacia abajo a través de todos los niveles de la jerarquía.
Normalmente, cuanto más abajo está una clase en la jerarquía de clases, más
especializado es su comportamiento. En nuestro ejemplo, podríamos hacer que la clase
bicicleta derivase de una superclase de vehículos.
La herencia es una herramienta clave para abordar la resolución de un problema de
forma organizada, pues permite definir una relación jerárquica entre todos los conceptos
que se están manejando. Es posible emplear esta técnica para descomponer un problema
de cierta magnitud en un conjunto de problemas subordinados a él. La resolución del
problema original se consigue cuando se han resuelto cada uno de los problemas
subordinados, que a su vez pueden contener otros. Por consiguiente, la capacidad de
descomponer un problema o concepto en un conjunto de objetos relacionados entre sí
cuyo comportamiento es fácilmente identificable puede ser extraordinariamente útil
para el desarrollo de programas informáticos.
La herencia proporciona las siguientes ventajas:
 Las clases derivadas o subclases proporcionan comportamientos especializados a
partir de los elementos comunes que hereda de la clase base. A través del 13
mecanismo de herencia los programadores pueden reutilizar el código de la
superclase tantas veces como sea necesario.
 Los programadores pueden implementar las llamadas superclases abstractas, que
definen comportamientos genéricos. Las clases abstractas definen e
implementan parcialmente comportamientos, pero gran parte de estos
comportamientos no se definen ni se implementan totalmente. De esta forma,
otros programadores pueden hacer uso de estas superclases detallando esos
comportamientos con subclases especializadas. El propósito de una clase
abstracta es servir de modelo base para la creación de otras clases derivadas,
pero cuya implantación depende de las características particulares de cada una
de ellas. Un ejemplo de clase abstracta podría ser en nuestro caso la clase
vehículos. Esta clase sería una clase base genérica, a partir de la cual podríamos
ir creando todo tipo de clases derivadas.

No hay comentarios:

Publicar un comentario