Documentos de Académico
Documentos de Profesional
Documentos de Cultura
HERENCIA
Por: Yolanda Martnez Trevio
Herencia
2
La herencia es un concepto que permite definir una clase general para despus definir otras clases ms especializadas, agregando detalles a la declaracin de cada una de estas clases especializadas. Computacionalmente, la herencia es el proceso mediante el cual se crea una clase nueva, llamada clase derivada o clase hija, a partir de otra clase, llamada clase base o clase padre.
Esta es la clase general, tambin se llama clase Padre Esta es la clase especializada, tambin se llama clase Hijo
Herencia
3
Las clases derivadas heredan todas las propiedades de la clase base; es decir, heredan sus atributos (datos) y sus mtodos (funciones). Despus de desarrollar la clase general solo tienes que escribir la diferencia o especializacin de cdigo para cada clase hija. Se puede desarrollar una jerarqua de clases derivando clases de las clases hijas (es decir, las clases hijas pueden a su vez ser padres de otras clases)
Ejemplo de Herencia
4
Se puede tener una clase general Persona que tenga nombre y edad; sus mtodos de acceso y modificacin y un mtodo para mostrar los datos en la pantalla. Despus, se puede disear la clase Estudiante, la cual debe tener nombre y edad, adems de la carrera que estudia. En este caso, se puede utilizar la herencia para heredar el nombre y la edad y sus mtodos relacionados y solo agregar los elementos que se requieren para un estudiante. De manera similar, se puede disear la clase Maestro; pensando que adems del nombre y edad se requiere el departamento para el que da clases.
Ejemplo de Herencia:
5
Clase Base
Clases Derivadas
Ejemplo de Herencia:
6
Ejemplo de Herencia:
7
Clase Base
Clase Derivada: Estudiante Esta ser la clase derivada que heredar de la clase Persona sus atributos (nombre y edad) y mtodos (setNombre, setEdad, getNombre, getEdad, print).
Ejemplo de Herencia:
8
Clase Base
Clase Derivada: Maestro Clase derivada que heredar de la clase Persona sus atributos (nombre y edad) y mtodos (setNombre, setEdad, getNombre, getEdad, print).
Herencia en C++
9
Para indicar que una clase es una clase derivada de otra se utiliza el siguiente formato: class ClaseDerivada : public ClaseBase Recuerda que la clase derivada hereda todos los atributos (o datos miembro) y todos los mtodos (o funciones miembro) de la clase base. Sin embargo, la clase derivada solamente puede utilizar los elementos que no son privados de la clase base; es decir, para utilizar los datos miembro privados de la clase base requiere hacerlo a travs de los mtodos de acceso y modificacin.
Modificadores de acceso
10
Herencia en C++
11
class Estudiante : public Persona { public: Estudiante(); Estudiante(string, int, string); string getCarrera(); void setCarrera(string); void muestraDatos(); private: string carrera; };
Persona::Persona() { nombre = "N/A"; edad = 0; } Persona::Persona(string nom, int ed) { nombre = nom; edad = ed; } string Persona::getNombre() { return nombre; }
void Persona::setNombre(string nom) { nombre = nom; } int Persona::getEdad() { return edad; } void Persona::setEdad(int ed) { edad = ed; } void Persona::muestraDatos() { cout<<"Nombre: "<<nombre<<" edad: "<<edad; }
Estudiante::Estudiante(string nom, int ed, string ca) : Persona(nom, ed) { carrera = ca; } string Estudiante::getCarrera() { return carrera; } void Estudiante::setCarrera(string ca) { carrera = ca; }
#include "Estudiante.h" int main() { Estudiante juan("Juan", 25, "ISD"), laura; Persona rosa("Rosa", 8), pedro; cout<<"Los datos del estudiante 1 son: "<<endl; juan.muestraDatos(); cout<<"Los datos del estudiante 2 son: "<<endl; cout<<"Nombre "<<laura.getNombre()<<" Edad: <<laura.getEdad()<<" Carrera "<<laura.getCarrera(); cout<<"Los datos de la persona 1 son: "<<endl; rosa.muestraDatos(); cout<<"Los datos de la persona 2 son: "<<endl;
15
16
Redefinir un mtodo
17
Nota que en la clase Persona existe el mtodo muestraDatos y en la clase Estudiante tambin existe el mtodo muestraDatos.
Redefinir un mtodo
18
Para redefinir un mtodo, una clase derivada define de nuevo el mtodo con exactamente el mismo encabezado que ste tiene en la clase base; con esto se consigue que un objeto de la clase derivada tenga su propia versin de dicho mtodo. En el ejemplo un objeto de la clase Estudiante no puede utilizar el mtodo muestraDatos de la clase Persona porque solamente mostrara nombre y edad y no mostrara la carrera; entonces es necesario redefinir el mtodo para adaptarlo a los cambios que tiene la clase derivada con respecto a la clase base.
Redefinir un mtodo
19
Para redefinir un mtodo, ste debe tener el mismo nombre y lista de parmetros que el mtodo al que sustituye. Si no se cumple este requisito, se heredara el mtodo de la clase base y la clase derivada tendra otro mtodo con el mismo nombre. Esto no es redefinicin sino sobrecarga de nombres.