Junior — Middle
Μπορείτε να δώσετε ένα παράδειγμα που να δείχνει την αρχή αντικατάστασης του Λίσκοφ στον αντικειμενοστραφή προγραμματισμό;
sobes.tech AI
Απάντηση από AI
Η Αρχή Υποκατάστασης του Liskov (Liskov Substitution Principle, LSP) δηλώνει ότι τα αντικείμενα μιας υποκλάσης πρέπει να μπορούν να αντικατασταθούν με αντικείμενα της υπερκλάσης χωρίς να παραβιάζεται η ορθότητα του προγράμματος.
Παράδειγμα:
// Υπερκλάση
class Bird {
void fly() {
System.out.println("Το πουλί πετάει");
}
}
// Υποκλάση που επεκτείνει σωστά τη συμπεριφορά
class Sparrow extends Bird {
@Override
void fly() {
System.out.println("Το σπουργίτι πετάει");
}
}
// Παραβίαση του LSP
class Ostrich extends Bird {
@Override
void fly() {
throw new UnsupportedOperationException("Το στρουθοκάμηλο δεν μπορεί να πετάξει");
}
}
// Χρήση
void makeBirdFly(Bird bird) {
bird.fly(); // Αναμένεται ότι το πουλί μπορεί να πετάξει
}
// Αν δοθεί Ostrich, η μέθοδος fly() θα ρίξει εξαίρεση, παραβιάζοντας το LSP.
Για να τηρηθεί το LSP, είναι καλύτερο να διαχωριστεί η ιεραρχία:
interface Flyable {
void fly();
}
class Bird {}
class Sparrow extends Bird implements Flyable {
public void fly() { System.out.println("Το σπουργίτι πετάει"); }
}
class Ostrich extends Bird {
// Δεν υλοποιεί το Flyable, καθώς δεν μπορεί να πετάξει
}
Έτσι, τα αντικείμενα των υποκλάσεων μπορούν να χρησιμοποιηθούν χωρίς απρόβλεπτη συμπεριφορά.