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
-
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)ivoid Print(string s).
-
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
Animalamb un mètodeMakeSound(), i subclassesDogiCatque sobreescriuenMakeSound().
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.
Curs de Programació en C#
Mòdul 1: Introducció al C#
- Introducció al C#
- Configuració de l'Entorn de Desenvolupament
- Programa Hello World
- Sintaxi i Estructura Bàsica
- Variables i Tipus de Dades
Mòdul 2: Estructures de Control
Mòdul 3: Programació Orientada a Objectes
Mòdul 4: Conceptes Avançats de C#
- Interfícies
- Delegats i Esdeveniments
- Genèrics
- Col·leccions
- LINQ (Consulta Integrada al Llenguatge)
- Programació Asíncrona
Mòdul 5: Treballant amb Dades
Mòdul 6: Temes Avançats
- Reflexió
- Atributs
- Programació Dinàmica
- Gestió de Memòria i Recollida d'Escombraries
- Multifil i Programació Paral·lela
Mòdul 7: Construcció d'Aplicacions
Mòdul 8: Millors Pràctiques i Patrons de Disseny
- Estàndards de Codificació i Millors Pràctiques
- Patrons de Disseny
- Proves Unitàries
- Revisió de Codi i Refactorització
