Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre uno de los mejores conceptos creados en C y que todos sus derivados lo tienen como es la herencia.

Anuncios

La herencia es al igual que su significado es la capacidad que tiene una clase maestra o padre de transferirle sus propiedades (variables) y/o metodos (funciones) a sus hijos, es decir que lo que pasemos o heredemos a nuestros hijos automaticamente les concedera el acceso, para entender mejor el concepto vamos a ver el siguiente ejemplo:

Nota: Por un tema de practicidad trabajare con un solo archivo pero se deberia hacer con dos archivos.

Herencia.cs

using System;

public class Animal
{
	public int edad, peso;

}

public class Perro: Animal
{
	public Perro(int e, int p)
	{
		edad = e;
		peso = p;
	}
}

public class Program
{
	static int Main()
	{
		Perro arturo = new Perro(5,27);
		Console.WriteLine(arturo.edad + "\t" + arturo.peso);
		return 0;
	}
}
Anuncios

En este caso vamos a tener una clase maestra llamada Animal, la cual contendra dos variables de tipo int, una servira para contener la edad y otra para el peso, pero solamente las declaramos y no las asignamos, luego tendremos la clase heredera que en este caso va a ser Perro, veamos a la misma:

public class Perro: Animal
{
	public Perro(int e, int p)
	{
		edad = e;
		peso = p;
	}
}
Anuncios

Observen como se establece la herencia, primero declaramos a la clase como siempre pero le agregamos los dos puntos (:) y seguido de la clase maestra (en este caso Animal), luego sera como siempre, por ejemplo en este caso solo tenemos un constructor que recibira dos datos, uno para la edad (llamado e) y otro para el peso (llamado p), en el bloque lo que hacemos es asignar a cada uno de los valores recibidos en las variables de la clase maestra, veamos ahora el cuerpo del main:

	static int Main()
	{
		Perro arturo = new Perro(5,27);
		Console.WriteLine(arturo.edad + "\t" + arturo.peso);
		return 0;
	}
Anuncios

En este caso creamos un nuevo objeto de la clase Perro llamado arturo, usaremos el constructor que pusimos con los valores, para luego mostrarlos en pantalla, compilemos y probemos para ver como funciona:

C:\Users\tinchicus\Documents\Visual Studio 2019>Herencia
5       27

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

Pero herencia tambien nos permite heredar metodos, para ello vamos a hacer la siguiente modificacion en la clase Animal:

public class Animal
{
	public int edad, peso;

	public string Hablar()
	{
		return "El animal ha hablado";
	}
}
Anuncios

En esta modificacion agregamos una nueva funcion o metodo dentro de la clase maestra, modifiquemos el Main de la clase Program de la siguiente manera:

	static int Main()
	{
		Perro arturo = new Perro(5,27);
		Console.WriteLine(arturo.edad + "\t" + arturo.peso);
		Console.WriteLine(arturo.Hablar());
		return 0;
	}
Anuncios

En este bloque hacemos que el perro hable por medio de la nueva linea que llama al nuevo metodo que agregamos, si lo compilamos y ejecutamos veremos lo siguiente:

C:\Users\tinchicus\Documents\Visual Studio 2019>Herencia
5       27
El animal ha hablado

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

Las clases herederas no solamente tienen los atributos que reciben de la clase maestra, por ejemplo vamos a modificar la clase Perro de la siguiente manera:

public class Perro: Animal
{
	public string nombre;

	public Perro(int e, int p, string n)
	{
		edad = e;
		peso = p;
		nombre = n;
	}
}
Anuncios

En este ejemplo agregamos una nueva variable public de tipo string llamada nombre, la cual almacenara el nombre del perro, tambien modificamos el constructor para que reciba tres datos: la edad, el peso y el nombre, a su vez los asigna a las variables que corresponda, por ultimo modifiquemos el main de la siguiente manera:

	static int Main()
	{
		Perro arturo = new Perro(5,27,"Arturo");
		Perro lola = new Perro(2,12,"Lola");
		Console.WriteLine(arturo.nombre + "\t" 
			+ arturo.edad + "\t" + arturo.peso);
		Console.WriteLine(arturo.Hablar());
		Console.WriteLine(lola.nombre + "\t" 
			+ lola.edad + "\t" + lola.peso);
		Console.WriteLine(lola.Hablar());
		return 0;
	}
Anuncios

En este bloque creamos un nuevo objeto de tipo Perro llamado lola y usaremos el nuevo constructor para ambos casos, enviaremos nuevos datos para completar nuestros objetos, luego mostraremos a los dos y los haremos hablar, si compilamos veremos la siguiente salida:

C:\Users\tinchicus\Documents\Visual Studio 2019>Herencia
Arturo  5       27
El animal ha hablado
Lola    2       12
El animal ha hablado

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

En esta salida tenemos dos objetos de la clase Perro que heredan de Animal dos tipos de variables pero cada objeto tiene sus propios datos a pesar de compartir las mismas variables, como pueden observar es una herramienta poderosa, vamos a hacer una nueva modificacion en este caso agregaremos una nueva clase llamada Gato:

public class Gato : Animal
{
	public string nombre;
	public string raza;
}
Anuncios

En esta clase tendremos una bien simple que no solamente hereda los atributos de Animal sino que posee dos variabes mas como son nombre y raza, nuestra siguiente modificacion sera en el main:

	static int Main()
	{
		Perro arturo = new Perro(5,27,"Arturo");
		Perro lola = new Perro(2,12,"Lola");
		Gato invisible = new Gato();
		invisible.nombre = "Invisible";
		invisible.raza = "mezcla";
		invisible.edad = 11;
		invisible.peso = 5;

		Console.WriteLine(arturo.nombre + "\t" 
			+ arturo.edad + "\t" + arturo.peso);
		Console.WriteLine(arturo.Hablar());
		Console.WriteLine(lola.nombre + "\t" 
			+ lola.edad + "\t" + lola.peso);
		Console.WriteLine(lola.Hablar());
		Console.WriteLine(invisible.nombre + "\t" 
			+ invisible.edad + "\t" + invisible.peso);
		Console.WriteLine(invisible.Hablar());
		return 0;
	}
Anuncios

En este caso tenemos un nuevo objeto de tipo Gato al cual debemos cargarles todos los datos nosotros porque no tenemos ningun constructor que lo haga por nosotros, despues agregamos las lineas para mostrar al nuevo objeto y para que hable, compilemos y probemos:

C:\Users\tinchicus\Documents\Visual Studio 2019>Herencia
Arturo  5       27
El animal ha hablado
Lola    2       12
El animal ha hablado
Invisible       11      5
El animal ha hablado

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

En esta salida vemos que funciono correctamente, pero tenemos un ultimo detalle que es el tema del metodo Hablar porque cada animal tiene el suyo propio.

Anuncios

Al igual que las variables, las funciones (o metodos) pueden ser agregados o podemos sobreescribir los heredados, a menudo a este mecanismo se lo denomina override, por ejemplo vamos a tomar las dos clases herederas y vamos a modificarlas de la siguiente manera:

public class Perro: Animal
{
	public string nombre;

	public Perro(int e, int p, string n)
	{
		edad = e;
		peso = p;
		nombre = n;
	}

	public new string Hablar()
	{
		return "Guau!!!!";
	}
}

public class Gato : Animal
{
	public string nombre;
	public string raza;

	public new string Hablar()
	{
		return "Miau!!!!";
	}
	
}
Anuncios

En este caso agregamos el metodo Hablar de la misma estructura que en la clase maestra pero con dos variaciones, la primera es que posee la palabra new delante del tipo, esto es para decirle al lenguaje que este metodo oculta a la maestra, luego variamos las instrucciones para que devuelva en el primer caso la palabra Guau y Miau en la segunda clase, si lo volvemos a compilar y probamos veremos lo siguiente:

C:\Users\tinchicus\Documents\Visual Studio 2019>Herencia
Arturo  5       27
Guau!!!!
Lola    2       12
Guau!!!!
Invisible       11      5
Miau!!!!

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

Como pueden ver ahora cada animal tiene su propia forma de hablar pero sin afectar a la clase maestra, ergo todo los nuevos herederos u objetos creados de Animal siguen disponiendo de la misma funcion y variables.

Anuncios

Entonces podemos decir que la herencia es una herramienta muy interesante para cuando tenemos distintas clases, las cuales pueden o deben compartir ciertos rasgos, ya sean propiedades o bien metodos, tambien podemos restringir a otros niveles pero por ahora no lo voy a complicar mas y dejemos el concepto de que la herencia es una herramienta para compartir los atributos de una clase hacia otras.

Anuncios

En resumen, hoy hemos visto que es herencia, su sintaxis, para que se usa, que comparten, como lo hace, como podemos tener recursos compartidos pero a su vez los nuestros, tambien podemos tener nuestros metodos o podemos modificar al heredado para que sea nuestro solamente, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00