Junior — Middle
Μπορείτε να δώσετε ένα παράδειγμα της αρχής αντικατάστασης του Liskov στον αντικειμενοστραφή προγραμματισμό;
sobes.tech AI
Απάντηση από AI
Η Αρχή Υποκατάστασης του Liskov (Liskov Substitution Principle, LSP) δηλώνει ότι τα αντικείμενα μιας υποκλάσης πρέπει να μπορούν να αντικαταστήσουν τα αντικείμενα της βασικής κλάσης χωρίς να παραβιάζουν την ορθότητα του προγράμματος.
Παράδειγμα σε C#:
class Bird {
public virtual void Fly() {
Console.WriteLine("Το πουλί πετάει");
}
}
class Sparrow : Bird {
public override void Fly() {
Console.WriteLine("Το σπουργίτι πετάει");
}
}
class Ostrich : Bird {
public override void Fly() {
throw new NotSupportedException("Το στρουθοκάμηλο δεν πετάει");
}
}
void MakeBirdFly(Bird bird) {
bird.Fly();
}
// Χρήση:
MakeBirdFly(new Sparrow()); // σωστό
MakeBirdFly(new Ostrich()); // παραβιάζει το LSP, καθώς ρίχνει εξαίρεση
Σε αυτό το παράδειγμα, η κλάση Ostrich παραβιάζει την αρχή υποκατάστασης του Liskov, καθώς δεν υποστηρίζει τη συμπεριφορά της βασικής κλάσης Bird (η μέθοδος Fly), ρίχνοντας εξαίρεση. Για να τηρηθεί το LSP, πρέπει να τροποποιηθεί η ιεραρχία των κλάσεων ή να διαχωριστούν τα interfaces, ώστε οι υποκλάσεις να μην υποχρεούνται να υλοποιούν μη υποστηριζόμενες συμπεριφορές.