Herencia.
La herencia es uno de los pilares del paradigma orientado a objetos, cuando creamos una clase base y por necesidad queremos implementar la herencia a sus clases derivadas.
Todas las clases están clasificadas en una jerarquía, donde cada clase tiene su superclase (clase base) y cada clase puede tener una o más subclases (clase derivada).
La herencia me permite heredar los atributos y métodos de una clase base a una clase derivada.
A continuación veremos el siguiente diagrama para ejemplificar lo que es herencia:
La clase base (superclase) persona va heredar sus atributos y métodos (algunos o todos) a la clase derivada veterinario y abogado (subclases), esto con el fin de no escribir las mismas líneas de código en cada clase que hacemos herencia, si bien sabemos que un veterinario tiene un nombre, una edad, un peso y el abogado también no es necesario escribir nuevamente el nombre, el peso y la edad en las clases derivadas.
Aquí observamos en UML ejemplo de herencia.
La clase persona es una generalización de las clases veterinario y abogado.
Aquí pongo un ejemplo de como se implementa la herencia en C#
class Abogado : Persona
class Veterinario : Persona
Donde la clase Abogado y Veterinario van heredar todos los atributos y métodos de la clase persona…pero ¿será cierto que hereda todo?
Aquí se muestra el código de la clase veterinario.
class Veterinario : Persona
{
//atributos...aqui puede poner nuevos atributos
public string cedula;
public string especialidad;
//aqui puede meter nuevos métodos
public void enConsulta(int a)
{
if (a == 1)
System.Console.WriteLine("estoy en consulta");
else
System.Console.WriteLine("no estoy en consulta");
}
public void enCirugia(int b)
{
if (b == 1)
Console.WriteLine("Estoy en cirugia");
else
Console.WriteLine("No estoy en Cirugia");
}
}
Aquí se muestra el código de la clase abogado.
class Abogado : Persona
{
//atributos
public string titulo;
public string cursos;
//metodos
public void litigar(int a)
{
if (a == 1)
Console.WriteLine("Estoy en un litigio");
else
Console.WriteLine("No estoy en un litigio");
}
}
Aquí se muestra el código de la clase base Persona
class Persona
{ //Atributos de la clase Persona
public string nombre;
public int edad;
public double peso;
public double estatura;
public string colorOjos;
public string sexo;
/*en esta parte voy a agregar los métodos de la
* clase persona*/
public void comer(int state)
{
if (state == 1)
System.Console.WriteLine("estoy comiendo");
else
System.Console.WriteLine("no estoy comiendo");
}
public void bailar(int st)
{
if (st == 1)
System.Console.WriteLine("Estoy bailando");
else
Console.WriteLine("No estoy bailando");
}
public void tomar(int ste)
{
if (ste == 1)
Console.WriteLine("Estoy tomando agua");
else
Console.WriteLine("No estoy tomando agua");
}
public void correr(int stat)
{
if (stat == 1)
Console.WriteLine("Estoy corriendo");
else
Console.WriteLine("No estoy corriendo");
}
public void despertar(int s)
{
if (s == 1)
Console.WriteLine("Estoy despierto, estoy despierto");
else
Console.WriteLine("No estoy despierto, sigo dormido");
}
public void dormir(int at)
{
if (at == 1)
Console.WriteLine("Estoy dormido");
else
Console.WriteLine("SIgo despierto, tengo energia");
}
}
Aquí se muestra el main
static void Main(string[] args)
{
Veterinario persona01 = new Veterinario(); //forma de instanciar objetos instancio la clase veterinario en persona01
persona01.nombre = "Alvaro"; //asigno los valores a los atributos del objeto persona01
persona01.edad = 24;
persona01.estatura = 1.80;
persona01.peso = 79.022;
persona01.colorOjos = "cafes";
persona01.sexo = "Hombre";
persona01.cedula = "1548A1115";
persona01.especialidad = "Anfibios";
Console.WriteLine("mi nombre es: " + persona01.nombre);
Console.WriteLine("Mi edad es: " + persona01.edad );
Console.WriteLine("Mido : " + persona01.estatura);
Console.WriteLine("Mi peso es : " + persona01.peso);
Console.WriteLine(" Tengo los ojos : " + persona01.colorOjos);
Console.WriteLine(" Mi sexo es : " + persona01.sexo);
Console.WriteLine(" Mi cedula es : " + persona01.cedula);
Console.WriteLine(" Mi especialidad es : " + persona01.especialidad);
persona01.tomar(0);
persona01.enCirugia(0);
persona01.enConsulta(1);
Abogado persona02 = new Abogado(); //Instancio el objeto persona02
persona02.nombre = "Fatima"; //asigno valores a sus atributos del objeto
persona02.edad = 22;
persona02.estatura = 1.75;
persona02.peso = 65.201;
persona02.colorOjos = "azules";
persona02.sexo = "Mujer";
persona02.titulo = "Licenciatura";
persona02.cursos = "Litigios sobre desarollo rural, Leyes fiscales";
Console.WriteLine("mi nombre es: " + persona02.nombre); //imprimo en pantalla los datos de persona02
Console.WriteLine("Mi edad es: " + persona02.edad);
Console.WriteLine("Mido : " + persona02.estatura);
Console.WriteLine("Mi peso es : " + persona02.peso);
Console.WriteLine(" Tengo los ojos : " + persona02.colorOjos);
Console.WriteLine(" Mi sexo es : " + persona02.sexo);
Console.WriteLine(" Mi titulo maximo es : " + persona02.titulo);
Console.WriteLine(" Mis cursos son : " + persona02.cursos);
persona02.litigar(0);
}
¿Las clases derivadas heredaron los atributos y métodos de la clase persona?
Espero sus comentarios ya que sirven de mucho para mejorar estos ejemplos.
Comentarios
http://www.nimmue.monterd.net