Herencia Simple
Generalidades sobre el concepto de herencia
Se entiende por herencia el proceso por el que una clase puede
tomar caractersticas de otra.
Gracias a la herencia, podemos hacer que todas las clases que
tengamos, o las que nos interesen, puedan estar conectadas
entre s, aprovechando, unas de otras, diversas caractersticas
bsicas.
La idea de la herencia parte de poder tener un diseo en el que
todo se vaya descomponiendo en mdulos o problemas que van
de lo ms general a lo ms especfico y que a su vez, estn
conectados entre s.
Cuando se hereda, las clases derivadas reciben las
caractersticas de la clase base, pudiendo aadir su
personalidad propia en forma de nuevas caractersticas, o
modificando las heredadas. El compilador hace una
copia de la clase base en la clase derivada, permitiendo al
programador aadir o modificar miembros sin que la clase base
sufra alteracin alguna.
Cuando una clase hereda de otra clase se denomina clase
derivada, clase hija, subclase o clase descendiente. La
clase de la cual hereda recibe el nombre de clase base, y en
ocasiones se la conoce como clase padre, superclase o
clase ascendiente.
Cualquier clase puede ser una clase base, una clase puede
ser clase base para ms de una clase derivada, Y a su vez,
una clase derivada puede ser clase base de otras clases
La herencia se puede usar de dos formas:
1. Cuando una clase escrita no llega a cubrir las necesidades
que exige un determinado problema, se
puede retocar el cdigo cambiando las caractersticas que se
requieren, e ignorando el resto. Esto
permite una programacin rpida. Esto es una forma de
reutilizacin del cdigo.
2. Se expresa un determinado problema como una jerarqua
de clases, donde existe una clase base de la
que se derivan otras subclases. La interfaz de la clase base
es comn a todas las clases derivadas.
Dentro de los mecanismos de herencia se van a diferenciar dos
tipos:
La Herencia Simple. Una clase derivada tiene un slo padre.
La Herencia Mltiple. Una clase derivada hereda de ms de
una clase base.
LA HERENCIA SIMPLE
Es cuando una clase derivada hereda de una nica clase, es
decir una clase derivada slo tiene un padre o ascendiente. Por
su parte una clase base puede tener tantos descendientes como
sean necesarios sin limitacin alguna. Es un sistema jerrquico
en forma arborescente, similar a la estructura de directorios de
algunos sistemas
operativos. (Como MSDOS PONER EN TARJETA )
La forma general de la herencia en C++ es:
class <nombre_clase_derivada>: [<acceso>]
<nombre_clase_heredada> {
// Cuerpo de la declaracin de la clase
};
El nombre_clase_heredada se refiere a una clase base
declarada previamente. sta pude estar ya compilada, o
puede que se declare en el mismo programa que la
derivada, en este segundo caso se debe declarar la clase
base
antes de la derivada, o al menos declarar el nombre de la
clase base como una referencia anticipada.
VENTAJAS DE LA HERENCIA
Una gran ventaja de los mecanismos de herencia es la
reutilizacin del cdigo, sta permite que un
programador pueda utilizar una clase como clase base de
otras nuevas clases de manera muy rpida.
Otra interesante caracterstica, es la extensibilidad. Esta
propiedad permite que los programas sean fcilmente
ampliables, as de una clase base se pueden derivar varias
clases que tengan un interfaz comn, pero su realizacin y
las acciones que llevan a cabo sean diferentes, as el
programa principal controlar un grupo de objetos, puede
utilizar una funcin miembro a cualquier objeto, pero el
efecto ser diferente, dependiendo de las subclases
especficas.
Ambigedades en la Herencia Simple
Una clase derivada puede tener un miembro con el mismo nombre
que un miembro de la clase base. Cuando
ocurre esto, y se referencia este nombre que est duplicado, el
compilador asumir que se desea acceder al
miembro de la clase derivada.
Este hecho se conoce como anulacin, invalidacin o suplantacin7
del miembro de la clase base por el miembro
de la clase derivada.
(PASAR A TARJETA)Para acceder al miembro de la clase base se
deber utilizar el operador de resolucin de mbito.
Los elementos de una clase se pueden dividir en tres grupos:
public: Accesibles desde cualquier funcin del programa.
private: Slo pueden acceder a ellos funciones miembros
de la clase, o funciones afines.
protected: Slo pueden acceder a ellos las funciones
miembro de la clase, de clases derivadas o las
funciones afines.
La siguiente tabla agrupa todas las posibles combinaciones
de los accesos a las secciones de una clase:
Especifica
dor de
acceso
Desde la
propia
clase
Public
Si
Si
si
Protected
Si
Si
No
Private
Si
No
No
Desde las
clases
derivadas
Desde el
exterior
Si se omite se supone que el acceso es private, de forma
que
si se quiere dar un acceso public o protected se debe
hacer explcitamente.