Junior — Middle
Μπορείς να δώσεις ένα παράδειγμα κατάστασης όπου παραβιάζεται η αρχή του Liskov από το Solid;
sobes.tech AI
Απάντηση από AI
Η Αρχή Υποκατάστασης του Liskov δηλώνει ότι τα αντικείμενα μιας υποκλάσης πρέπει να μπορούν να αντικαταστήσουν τα αντικείμενα της βασικής κλάσης χωρίς να αλλάζει η ορθότητα του προγράμματος.
Παράδειγμα παραβίασης:
Ας υποθέσουμε ότι υπάρχει μια βασική κλάση Bird με μια μέθοδο fly(). Η υποκλάση Penguin κληρονομεί από το Bird, αλλά οι πιγκουίνοι δεν μπορούν να πετάξουν. Αν στον κώδικα, όπου αναμένεται οποιοδήποτε Bird, καλέσουμε fly(), αυτό θα οδηγήσει σε σφάλμα ή λανθασμένη συμπεριφορά για το Penguin.
class Bird {
void fly() {
print('Πετάει');
}
}
class Penguin extends Bird {
@override
void fly() {
throw Exception('Οι πιγκουίνοι δεν πετάνε');
}
}
void makeBirdFly(Bird bird) {
bird.fly();
}
void main() {
Bird sparrow = Bird();
Bird penguin = Penguin();
makeBirdFly(sparrow); // Λειτουργεί
makeBirdFly(penguin); // Σφάλμα, παραβίαση της αρχής του Liskov
}
Σε αυτή την περίπτωση, ο Penguin παραβιάζει την αρχή του Liskov, καθώς δεν μπορεί να αντικαταστήσει το Bird χωρίς να αλλάξει η συμπεριφορά.