Está en la página 1de 3

POLIMORFISMO EN C#

Adaptado por: JOHN JAIRO PATIÑO VANEGAS


Antes de hablar de polimorfismo debemos hablar de otros de los pilares de programación orientada
a objetos la Herencia.

Según (Microsoft), La herencia es una característica de los lenguajes de programación orientados a


objetos que permite definir una clase base, que proporciona funcionalidad específica (datos y
comportamiento), así como clases derivadas, que heredan o invalidan esa funcionalidad. (Microsoft,
2019)

Polimorfismo: Es uno de los pilares de la programación orientada a objetos que más se utiliza, en
este sentido, el polimorfismo se refiere a la propiedad por la que es posible enviar mensajes
sintácticamente iguales a objetos de tipos distintos. El único requisito que deben cumplir los objetos
que se utilizan de manera polimórfica es saber responder al mensaje que se les envía. (UTN, 2019)

A continuación veremos tres formas de hacer polimorfismo en c#

1. Polimorfismo por herencia: cuando se hereda de una clase normal y puedo convertirme en
ella.
Definición de Herencia: Es el pilar más fuerte que asegura la
reutilización de código, además la herencia en la programación
orientada a objetos es la habilidad de extender una funcionalidad
existente definiendo una nueva clase que hereda la funcionalidad de
una clase existente. (UTN, 2019)

Caso: suponga lo siguiente, en una compañía de alquileres de vehículos tiene 2 tipos de clientes, un
cliente preferencial o por contrato y otro cliente ocasionales; a los cuales se le calcula una tarifa
diferencial. Los clientes preferenciales o por contrato tienen un descuento del 15% del valor total
del alquiler según la siguiente formula

ValorTotal= Kilometros recorridos * Valor Del Kilometo – Descuento(15%)

ValorTotal = ( km * valorKm ) – (( km * valorKm ) * DESCUENTO)

Y los ocasionales no tienen descuento tarifa plena según vehículo.

ValorTotal = ( km * valorKm )

Para ello planteamos el siguiente diseño aplicando polimorfismo por Herencia


Diagrama 1: Diagrama UML Herencia
Fuente: Autor

Código Fuente Implementando Herencia C#


public class Persona
{
public string ID { get; set; }
public string Nombre { get; set; }

public Persona(string iD, string nombre)


{
ID = iD;
Nombre = nombre;
}

public virtual double calcularPrecio(double km, double valor)


{
return (km*valor);
}
public override string ToString()
{
return "ID:{ID} --- Nombre:{Nombre}";
}
}

public class PersonaContrato : Persona


{
const Double DESCUENTO = 0.15;
public PersonaContrato(string iD, string nombre):base(iD, nombre)
{
}

public override double calcularPrecio(double km, double valor)


{
double precio;
precio = (km * valor) ;
precio = precio - (precio * DESCUENTO);

return precio;
}
}
class Program
{
static void Main(string[] args)
{
List<Entity.Persona> personas = new List<Entity.Persona>();
Entity.Persona cliente1 = new Entity.PersonaContrato("1","pedro");
Entity.Persona cliente2 = new Entity.Persona("2", "juan");
personas.Add(cliente1);
personas.Add(cliente2);
//SIMULAOS ALQUILER
Console.SetCursorPosition(10,10);
Console.Write("NOMBRE");
Console.SetCursorPosition(25,10);
Console.Write("TOTAL A PAGAR PO 100KM" );
int i = 0;
Console.SetCursorPosition(8, 11);
Console.Write("=============================================");
foreach (var item in personas)
{
Console.SetCursorPosition(10,12+i);
Console.Write(item.Nombre );
Console.SetCursorPosition(35,12+i);
Console.Write(item.calcularPrecio(100.0F, 1000.0F));
i++;
Console.SetCursorPosition(8, 12 + i);
Console.Write("---------------------------------------------");
i++;
}

Console.ReadKey();
}
}

2. polimorfismos por abstracción: cuando puedo heredar de una clase abstracta y puedo
convertirme en ella.

EN LA PROXIMA ENTREGA

3. polimorfismo por interface: es la posibilidad que tenemos de implementar una interface.

EN LA PROXIMA ENTREGA