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("Γαβ")
}
}
Έτσι, η διεπαφή ορίζει μια σύμβαση, και η αφηρημένη κλάση μπορεί να παρέχει μερική υλοποίηση και να διατηρεί κατάσταση.