Sobes.tech
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 χωρίς να αλλάξει η συμπεριφορά.