Sobes.tech
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, καθώς δεν μπορεί να πετάξει
}

Έτσι, τα αντικείμενα των υποκλάσεων μπορούν να χρησιμοποιηθούν χωρίς απρόβλεπτη συμπεριφορά.