Introducción
• La herencia es una característica de reutilización de código en la programación orientada a objetos.
• Imagine que tiene programada una clase que describe algunas características de un grupo de objetos.
2Mtl. Lourdes Cahuich
Introducción
• Imagine también que usted tiene que programar un grupo de objetos que tienen todas las características y comportamiento de la clase que ya tiene, pero este grupo tiene –además- ciertas características particulares.
3Mtl. Lourdes Cahuich
Introducción
• En lugar de programar desde cero una nueva clase que describa estos objetos y sus características principales, es mejor crear una clase que herede de la clase existente, con todas sus propiedades y métodos, y sólo agregar las características adicionales del grupo especial de objetos.
4Mtl. Lourdes Cahuich
Clase base y clase derivada
• La clase nueva se le llama clase “derivada”
• La clase general se llama clase “base”.
Clase base
Clase D
Clase B
Clase derivada
5Mtl. Lourdes Cahuich
- nombre:string- edad:int- genero:char
Persona
+ respirar():string+ reir():string
- carrera:string- numeroCuenta:double
+ estudiar():string
Estudiante
6Mtl. Lourdes Cahuich
Ejemplo herencia básica C#
• Vamos a crear un proyecto en C#, de la misma forma que lo hemos hecho durante el curso.
• Usaremos el archivo de clase que creamos en la actividad práctica 7 (cuando aprendimos a crear archivos de clase)
• Nuestra clase se llamó “MiPrimeraClase”, ahora cambiaremos un poco ese archivo.
7Mtl. Lourdes Cahuich
Creación clase base / padre / general
• Cambiaremos el nombre de la clase “MiPrimeraClase” por “Persona”.
• Las propiedades y los métodos no cambian.
//Propiedadesprivate string nombre;private int edad;private char genero;
8Mtl. Lourdes Cahuich
Se agregan los siguientes métodos
//Métodospublic string respirar(){return "inhalar - exhalar";
}public string reir(){return "LOL";
}
9Mtl. Lourdes Cahuich
Recordamos el constructor
public Persona(){
this.nombre = "sin nombre";this.edad = 0;this.genero = '?';
}
10Mtl. Lourdes Cahuich
Creación clase derivada / hija / especializada
• Ahora crearemos OTRO archivo de clase, de manera similar a como creamos el anterior.
• Sólo que ahora en el nuevo archivo de clase incluiremos el namespace de la clase Persona
11Mtl. Lourdes Cahuich
Clase derivada
• Esta nueva clase se llamará “Estudiante” y será una clase derivada de “Persona”
using ClasePersona; Este es el namespace de la clase base
namespace ClaseEstudiante Este es el namespace de la clase derivada que estamos creando
12Mtl. Lourdes Cahuich
Clase derivada
public class Estudiante : Persona{
//propiedades particulares del estudianteprivate string carrera;private double numeroCuenta;//métodos particulares del estudiantepublic string estudiar(){
return "Leo, Anoto, Aprendo";}
14Mtl. Lourdes Cahuich
//métodos "setters/getters"public string leeCarrera(){
return this.carrera;}public void escribeCarrera(string c){
this.carrera = c;}public double leeNumeroCuenta(){
return this.numeroCuenta;}public void escribeNumeroCuenta(double nc){
this.numeroCuenta = nc;} 15Mtl. Lourdes Cahuich
//constructor clase estudiante
public Estudiante(){
this.carrera = "Aun no se inscribe";this.numeroCuenta = 0;
}}
16Mtl. Lourdes Cahuich
Creamos interfaz para probar herencia
• Ya que tenemos las clases base y derivada, agregaremos los controles gráficos en el archivo de código de nuestra aplicación, que debe lucir así.
17Mtl. Lourdes Cahuich
private void btnCreaPersona_Click(object sender, EventArgs e){
Persona humano = new Persona();//Métodos de personalblNombre.Text = humano.leeNombre().ToString();lblEdad.Text = humano.leeEdad().ToString();lblGenero.Text = humano.leeGenero().ToString();//Métodos de estudiantelblCarrera.Text ="";lblMatricula.Text ="";lblMetodoEstudiante.Text = "";metodoPersona = humano.respirar();
}18Mtl. Lourdes Cahuich
private void btnCreaEstudiante_Click(object sender, EventArgs e){
Estudiante alumno = new Estudiante();//Métodos de personalblNombre.Text = alumno.leeNombre().ToString();lblEdad.Text = alumno.leeEdad().ToString();lblGenero.Text = alumno.leeGenero().ToString();//Métodos de estudiantelblCarrera.Text = alumno.leeCarrera().ToString();lblMatricula.Text = alumno.leeNumeroCuenta().ToString();metodoEstudiante = alumno.estudiar().ToString();
}19Mtl. Lourdes Cahuich
private void btnMetodoPersona_Click(object sender, EventArgs e)
{lblMetodoPersona.Text = metodoPersona;
}
private void btnMetodoEstudiante_Click(object sender, EventArgs e){
lblMetodoEstudiante.Text = metodoEstudiante;}
20Mtl. Lourdes Cahuich