Polimorfismo en C#

Una clase abstracta...

  • Es una clase que no se puede instanciar. Se usa únicamente para definir subclases.
  • Dicho de otra forma: son aquellas clases base (superclases) de las que no se permite la creación de objetos.
  • Para ello, se utiliza la palabra clave abstract.

Métodos abstractos

Se caracterizan por el hecho de que no pueden ser implementados en la clase base. De ellos, solo se escribe su signatura en la superclase, y su funcionalidad –polimórfica– tiene que indicarse en las clases derivadas (subclases).

¿Cuándo se utilizan clases abstractas?

Cuando deseamos definir una abstracción que englobe objetos de distintos tipos y queremos hacer uso del polimorfismo

Ejemplo

Código de ejemplo para clase figura


abstract class Figura
{

	private string color;

	public Figura(string color) 
	{
		this.Color = color;
	}

	public abstract double CalcularArea();

	protected string Color { get => color; set => color = value; }
	
}

						

Código de ejemplo para clase cuadrado


class Cuadrado : Figura
{
	private double lado;

	public Cuadrado(string color, double lado) : base(color)
	{
		this.lado = lado;
	}

	public override double CalcularArea()
	{
		return lado * lado;        
	}
}

						

Interfaces

  • Una interfaz es una clase completamente abstracta (una clase sin implementación)
  • Considerando el caso anterior, si no estuviésemos interesados en conocer el color de una Figura, podríamos eliminar por completo su implementación y convertir Figura en una interfaz.

Código de la interfaz


						interface Figura
						{										 
							double CalcularArea();					
							
						}
					
					

Interfaces

…es una especie de plantilla para la construcción de clases. Normalmente una interfaz se compone de un conjunto de declaraciones de cabeceras de métodos (sin implementar, de forma similar a un método abstracto) que especifican un protocolo de comportamiento para una o varias clases.

…una clase puede implementar una o varias interfaces: en ese caso, la clase debe proporcionar la declaración y definición de todos los métodos de cada una de las interfaces.

  • En la declaración de una interfaz, lo único que puede aparecer son declaraciones de métodos (su nombre y signatura, sin su implementación)
  • Una interfaz no encapsula datos, sólo define cuáles son los métodos que han de implementar los objetos de aquellas clases que implementen la interfaz.

...son una forma de especificar qué debe hacer una clase sin especificar el cómo.

Ejemplo

Código de ejemplo implementación de múltiples interfaces


class Cuadrado : Ifigura, IDibujable, IRotable
    {
        public double CalcularArea()
        {
            //... proceso para calcular area
            return 0.0;
        }

        public void dibujar()
        {
            //... proceso para dibujar
        }

        public void rotar(int grados)
        {
            //... proceso para rotar
        }
    }