El polimorfisme és un dels quatre pilars de la programació orientada a objectes (POO), juntament amb l'encapsulació, l'herència i l'abstracció. El terme "polimorfisme" prové del grec i significa "moltes formes". En el context de la POO, el polimorfisme permet que una interfície comuna sigui utilitzada per diferents tipus d'objectes.

Conceptes Clau

  1. Polimorfisme en Temps de Compilació (Sobrecàrrega de Mètodes):

    • Permet que múltiples mètodes tinguin el mateix nom però diferents signatures (nombre o tipus de paràmetres).
    • Exemple: void Print(int i) i void Print(string s).
  2. Polimorfisme en Temps d'Execució (Sobreescriptura de Mètodes):

    • Permet que una subclasse proporcioni una implementació específica d'un mètode que ja està definit en la seva superclasse.
    • Exemple: Una classe base Animal amb un mètode MakeSound(), i subclasses Dog i Cat que sobreescriuen MakeSound().

Exemple Pràctic

Sobrecàrrega de Mètodes

using System;

public class PolymorphismExample
{
    // Sobrecàrrega de mètodes
    public void Print(int i)
    {
        Console.WriteLine("Entero: " + i);
    }

    public void Print(string s)
    {
        Console.WriteLine("Cadena: " + s);
    }

    public static void Main(string[] args)
    {
        PolymorphismExample example = new PolymorphismExample();
        example.Print(5);
        example.Print("Hola");
    }
}

Sobreescriptura de Mètodes

using System;

public class Animal
{
    public virtual void MakeSound()
    {
        Console.WriteLine("L'animal fa un so");
    }
}

public class Dog : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("El gos borda");
    }
}

public class Cat : Animal
{
    public override void MakeSound()
    {
        Console.WriteLine("El gat miola");
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Animal myDog = new Dog();
        Animal myCat = new Cat();

        myDog.MakeSound(); // El gos borda
        myCat.MakeSound(); // El gat miola
    }
}

Exercicis Pràctics

Exercici 1: Sobrecàrrega de Mètodes

Crea una classe Calculator amb mètodes sobrecarregats Add que acceptin diferents tipus de paràmetres (enters, dobles).

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public double Add(double a, double b)
    {
        return a + b;
    }
}

Exercici 2: Sobreescriptura de Mètodes

Crea una classe base Shape amb un mètode Draw(). Crea subclasses Circle i Rectangle que sobreescriguin el mètode Draw().

public class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Dibuixant una forma");
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Dibuixant un cercle");
    }
}

public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Dibuixant un rectangle");
    }
}

Solucions

Solució Exercici 1

public class Calculator
{
    public int Add(int a, int b)
    {
        return a + b;
    }

    public double Add(double a, double b)
    {
        return a + b;
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Calculator calc = new Calculator();
        Console.WriteLine(calc.Add(3, 4)); // 7
        Console.WriteLine(calc.Add(3.5, 4.5)); // 8.0
    }
}

Solució Exercici 2

public class Shape
{
    public virtual void Draw()
    {
        Console.WriteLine("Dibuixant una forma");
    }
}

public class Circle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Dibuixant un cercle");
    }
}

public class Rectangle : Shape
{
    public override void Draw()
    {
        Console.WriteLine("Dibuixant un rectangle");
    }
}

public class Program
{
    public static void Main(string[] args)
    {
        Shape myCircle = new Circle();
        Shape myRectangle = new Rectangle();

        myCircle.Draw(); // Dibuixant un cercle
        myRectangle.Draw(); // Dibuixant un rectangle
    }
}

Resum

En aquesta secció, hem après sobre el polimorfisme en C#, incloent-hi la sobrecàrrega de mètodes i la sobreescriptura de mètodes. Hem vist exemples pràctics de com implementar aquests conceptes i hem practicat amb exercicis per reforçar el nostre coneixement. El polimorfisme és una eina poderosa que permet escriure codi més flexible i reutilitzable, facilitant la gestió de projectes complexos.

© Copyright 2024. Tots els drets reservats