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
Animal
amb un mètodeMakeSound()
, i subclassesDog
iCat
que 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ó