|
La
herencia, entendida como una característica de la programación
orientada a objetos y más concretamente del C++, permite
definir una clase modificando una o más clases
ya existentes. Estas modificaciones consisten habitualmente en añadir
nuevos miembros (variables o funciones), a la clase que
se está definiendo, aunque también se puede redefinir
variables o funciones miembro ya existentes.
La
clase de la que se parte en este proceso recibe el nombre de clase
base, y la nueva clase que se obtiene se denomina clase
derivada. Ésta a su vez puede ser clase base en un
nuevo proceso de derivación, iniciando de esta manera una
jerarquía de clases. De ordinario las clases
base suelen ser más generales que las
clases derivadas. Esto es así porque a las
clases derivadas se les suelen ir añadiendo características,
en definitiva variables y funciones que diferencian concretan y
particularizan.
En
algunos casos una clase no tiene otra utilidad que la de ser clase
base para otras clases que se deriven de ella. A este tipo
de clases base, de las que no se declara ningún
objeto, se les denomina clases base abstractas (ABC,
Abstract Base Class) y su función es la de agrupar miembros
comunes de otras clases que se derivarán de ellas. Por ejemplo,
se puede definir la clase vehiculo para después
derivar de ella coche, bicicleta, patinete, etc.,
pero todos los objetos que se declaren pertenecerán a alguna
de estas últimas clases; no habrá vehículos
que sean sólo vehículos. Las características
comunes de estas clases (como una variable que indique si está
parado o en marcha, otra que indique su velocidad, la función
de arrancar y la de frenar, etc.), pertenecerán a la clase
base y las que sean particulares de alguna de ellas pertenecerán
sólo a la clase derivada (por ejemplo el número
de platos y piñones, que sólo tiene sentido para una
bicicleta, o la función embragar que
sólo se aplicará a los vehículos de motor con
varias marchas).
Este
mecanismo de herencia presenta múltiples ventajas
evidentes a primera vista, como la posibilidad de reutilizar
código sin tener que escribirlo de nuevo. Esto es
posible porque todas las clases derivadas pueden utilizar el código
de la clase base sin tener que volver a definirlo
en cada una de ellas.
|
|