El pilar del polimorfismo se trata simplemente de que un único objeto puede tener múltiples estados y comportamientos, básicamente es la capacidad de los objetos de una clase, en responder de diferentes maneras a un solo mensaje, está estrechamente relacionada a la herencia, ya que mayormente sucede gracias a este.
Para entender mejor realizaré un pequeño ejemplo:
Ejemplo Polimorfismo mediante Herencia – C#
Tenemos la superclase o clase padre Inmueble, con sus respectivos atributos y el método VENDER.
Clase Inmueble
public class Inmueble { //Estados - Atributos protected string tipoInmueble; protected string ubicacion; protected double areaTerreno; protected double precio; //Comportamientos - Métodos public void vender() { Console.WriteLine( tipoInmueble + " VENDIDA por el precio de " + precio ); } }
La clase casa, departamento y terreno derivan (Heredan) de la clase Inmueble, por lo tanto, estas clases pueden usar los atributos y métodos protegidos o públicos de la clase Inmueble.
Clase Casa
public class Casa : Inmueble { //Estados - Atributos //... //Comportamientos - Métodos //... //Constructor public Casa(string tipo, double prec) { this.tipoInmueble = tipo; this.precio = prec; } }
Clase Departamento
public class Departamento:Inmueble { //Estados - Atributos //... //Comportamientos - Métodos //... //Constructor public Departamento(string tipo, double prec) { this.tipoInmueble = tipo; this.precio = prec; } }
Clase Terreno
public class Departamento:Inmueble { //Estados - Atributos //... //Comportamientos - Métodos //... //Constructor public Departamento(string tipo, double prec) { this.tipoInmueble = tipo; this.precio = prec; } }
Entonces, los objetos creados a partir de la clase casa, departamento y terreno pueden ejecutar un único método (Vender) de la clase inmueble, y este responde de diferentes maneras.
static void Main(string[] args) { Casa casa = new Casa("Casa de campo", 59954); Departamento departamento = new Departamento("Departamento duplex", 95454); Terreno terreno = new Terreno("Terreno", 9545555); terreno.vender(); departamento.vender(); casa.vender(); Console.ReadKey(); }
Resultado:
Terreno VENDIDA por el precio de 9545555 Departamento duplex VENDIDA por el precio de 95454 Casa de campo VENDIDA por el precio de 59954
Como resultado tenemos que, tal tipo de casa, departamento y terreno fueron vendidos por tal precio. Sabemos que la clase casa, departamento y terreno heredan de la clase inmueble, que tiene el método VENDER, lo cual invocamos desde tres objetos diferentes, es decir se llama un mismo método, pero respondió de tres maneras diferentes. Eso es el polimorfismo más básico, y sin darnos cuenta, lo hemos estado usando en los ejercicios anteriores.
Ejemplo Polimorfismo mediante Listas Genéricas – C#
Bueno realicemos otro ejemplo interesante, tenemos la clase casa, con sus respectivos atributos, constructores y métodos.
public class Casa { //Estados - Atributos public string tipo; public double precio; //Constructor public Casa(string tipo, double precio) { this.tipo = tipo; this.precio = precio; } //Comportamientos - Métodos public void vender() { Console.WriteLine( tipo + " VENDIDA por el precio de " + precio ); } }
Ahora crearemos una cantidad de objetos a partir de la clase casa, agregaremos a una lista (único objeto de tipo lista), ejecutaremos una sola acción y éste responderá de muchas maneras.
static void Main(string[] args) { Casa casa1 = new Casa("Casa de campo", 59954); Casa casa2 = new Casa("Casa rural", 324324); Casa casa3 = new Casa("Casa de playa", 57676); Casa casa4 = new Casa("Casa unifamiliar", 123567); Casa casa5 = new Casa("Casa prefabricada", 9787); Casa casa6 = new Casa("Casa proyecto", 3345454); List<Casa> casas = new List<Casa>(); casas.Add(casa1); casas.Add(casa2); casas.Add(casa3); casas.Add(casa4); casas.Add(casa5); casas.Add(casa6); foreach (Casa item in casas) { item.vender(); } Console.ReadKey(); }
Resultado:
Casa de campo VENDIDA por el precio de 59954 Casa rural VENDIDA por el precio de 324324 Casa de playa VENDIDA por el precio de 57676 Casa unifamiliar VENDIDA por el precio de 123567 Casa prefabricada VENDIDA por el precio de 9787 Casa proyecto VENDIDA por el precio de 3345454
Ejemplo Polimorfismo mediante Sobrecarga
Algunos también consideran polimorfismo a la sobrecarga de métodos o constructores, que básicamente es que un método o constructor se puede declarar varias veces con el mismo nombre, pero con diferentes parámetros, ya sea por cantidad de parámetros o tipo de dato.
public class Casa { //Estados - Atributos public string tipo; public double precio; public double areaTerreno; public double areaConstruida; //Constructor public Casa() { } public Casa(string tipo, double precio) { this.tipo = tipo; this.precio = precio; } public Casa(string tipo, double precio, double areaTerreno, double areaConstruida) { this.tipo = tipo; this.precio = precio; this.areaTerreno = areaTerreno; this.areaConstruida = areaConstruida; } //Comportamientos - Métodos public void vender() { Console.WriteLine( tipo + " VENDIDA por el precio de " + precio ); } public void vender(string cliente) { Console.WriteLine( tipo + " VENDIDA por el precio de " + precio+" por cliente: "+ cliente ); } public void vender(double descuento) { Console.WriteLine( tipo + " VENDIDA por el precio de " + precio+ "con descuento: "+ descuento ); } }
Los comentarios están cerrados.