Sobes.tech
Junior

Ce este polimorfismul în programare?

sobes.tech AI

Răspuns de la AI

Polimorfismul este capacitatea obiectelor din clase diferite de a răspunde diferit la aceeași apelare a metodei. Acest lucru se realizează prin utilizarea moștenirii, claselor abstracte și interfețelor. În C#, polimorfismul se manifestă prin suprascrierea (overriding) metodelor clasei de bază în clasele derivate și prin supraincarcarea (overloading) metodelor.

Exemple de polimorfism:

  1. Suprascrierea metodelor (Polimorfism în timpul execuției): Clasa derivată oferă propria implementare a unei metode declarate în clasa de bază. Pentru aceasta, în clasa de bază se folosește cuvântul cheie virtual, iar în clasa derivată override.

    // Clasa de bază
    class Shape
    {
        // Metodă virtuală care poate fi suprascrisă
        public virtual void Draw()
        {
            // Implementare implicită
        }
    }
    
    // Clasa derivată 1
    class Circle : Shape
    {
        // Suprascrierea metodei Draw
        public override void Draw()
        {
            // Implementare pentru cerc
        }
    }
    
    // Clasa derivată 2
    class Square : Shape
    {
        // Suprascrierea metodei Draw
        public override void Draw()
        {
            // Implementare pentru pătrat
        }
    }
    

    În acest caz, se poate crea o listă de obiecte Shape și apela metoda Draw pentru fiecare, iar va fi apelată implementarea specifică pentru fiecare tip de figură.

  2. Supraincarcarea metodelor (Polimorfism în timpul compilării): Mai multe metode cu același nume, dar cu semnături diferite (număr sau tipuri de parametri) în aceeași clasă.

    class Calculator
    {
        // Metodă suprascrisă Add (pentru int)
        public int Add(int x, int y)
        {
            return x + y;
        }
    
        // Metodă suprascrisă Add (pentru double)
        public double Add(double x, double y)
        {
            return x + y;
        }
    }
    

Polimorfismul favorizează crearea unui cod mai flexibil, extensibil și ușor de întreținut. Permite scrierea unui cod generic care poate lucra cu obiecte de diferite tipuri.