Sobes.tech
Junior

Τι είναι ο πολυμορφισμός στον προγραμματισμό;

sobes.tech AI

Απάντηση από AI

Ο πολυμορφισμός είναι η ικανότητα αντικειμένων διαφορετικών κλάσεων να αντιδρούν διαφορετικά στην ίδια κλήση μεθόδου. Επιτυγχάνεται μέσω της χρήσης κληρονομικότητας, αφηρημένων κλάσεων και διεπαφών. Στην C#, ο πολυμορφισμός εκδηλώνεται μέσω της επανακαθορισμού (overriding) μεθόδων της βασικής κλάσης στις παράγωγες και μέσω της υπερφόρτωσης (overloading) μεθόδων.

Παραδείγματα πολυμορφισμού:

  1. Επανακαθορισμός μεθόδων (Polymorphism σε χρόνο εκτέλεσης): Η παράγωγη κλάση παρέχει τη δική της υλοποίηση μιας μεθόδου που δηλώνεται στην βασική κλάση. Για αυτό, στη βασική κλάση χρησιμοποιείται η λέξη-κλειδί virtual, και στην παράγωγη override.

    // Βασική κλάση
    class Shape
    {
        // Εικονική μέθοδος που μπορεί να επανακαθοριστεί
        public virtual void Draw()
        {
            // Προεπιλεγμένη υλοποίηση
        }
    }
    
    // Παράγωγη κλάση 1
    class Circle : Shape
    {
        // Επανακαθορισμός της μεθόδου Draw
        public override void Draw()
        {
            // Υλοποίηση για κύκλο
        }
    }
    
    // Παράγωγη κλάση 2
    class Square : Shape
    {
        // Επανακαθορισμός της μεθόδου Draw
        public override void Draw()
        {
            // Υλοποίηση για τετράγωνο
        }
    }
    

    Σε αυτή την περίπτωση, μπορείτε να δημιουργήσετε μια λίστα αντικειμένων Shape και να καλέσετε τη μέθοδο Draw για καθένα, και θα καλείται η συγκεκριμένη υλοποίηση για κάθε τύπο σχήματος.

  2. Υπερφόρτωση μεθόδων (Polymorphism σε χρόνο μεταγλώττισης): Πολλές μέθοδοι με το ίδιο όνομα, αλλά με διαφορετικές υπογραφές (αριθμό ή τύπο παραμέτρων) στην ίδια κλάση.

    class Calculator
    {
        // Υπερφορτωμένη μέθοδος Add (για int)
        public int Add(int x, int y)
        {
            return x + y;
        }
    
        // Υπερφορτωμένη μέθοδος Add (για double)
        public double Add(double x, double y)
        {
            return x + y;
        }
    }
    

Ο πολυμορφισμός προάγει τη δημιουργία πιο ευέλικτου, επεκτάσιμου και εύκολα συντηρήσιμου κώδικα. Επιτρέπει τη συγγραφή γενικού κώδικα που μπορεί να λειτουργεί με αντικείμενα διαφορετικών τύπων.