Sobes.tech
Junior — Middle

Ποια είναι η διαφορά μεταξύ μιας διεπαφής και μιας αφηρημένης κλάσης στο πλαίσιο του αντικειμενοστραφούς προγραμματισμού;

sobes.tech AI

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

Η διεπαφή και η αφηρημένη κλάση είναι δύο τρόποι ορισμού αφαιρέσεων στον αντικειμενοστραφή προγραμματισμό, αλλά έχουν βασικές διαφορές:

  • Διεπαφή περιγράφει ένα σύνολο μεθόδων που πρέπει να υλοποιήσει μια κλάση, αλλά δεν περιέχει υλοποίηση (αν και σε ορισμένες γλώσσες είναι δυνατές μέθοδοι με προεπιλεγμένη υλοποίηση). Η διεπαφή δεν μπορεί να περιέχει κατάσταση (μεταβλητές στιγμής).
  • Αφηρημένη κλάση μπορεί να περιέχει τόσο αφηρημένες μεθόδους (χωρίς υλοποίηση) όσο και μεθόδους με υλοποίηση. Μπορεί επίσης να περιέχει πεδία (κατάσταση).

Παράδειγμα σε Swift:

protocol Vehicle {
    func startEngine()
}

class Car: Vehicle {
    func startEngine() {
        print("Κινητήρας ενεργοποιήθηκε")
    }
}

// Η αφηρημένη κλάση σε Swift υλοποιείται μέσω μιας κλάσης με μεθόδους που πρέπει να υπερισχύσουν
class Animal {
    func makeSound() {
        fatalError("Αυτή η μέθοδος πρέπει να υπερισχύσει")
    }
}

class Dog: Animal {
    override func makeSound() {
        print("Γαβ")
    }
}

Έτσι, η διεπαφή ορίζει μια σύμβαση, και η αφηρημένη κλάση μπορεί να παρέχει μερική υλοποίηση και να διατηρεί κατάσταση.