Sobes.tech
Junior — Middle

Magyarázza el, mit jelent a Liskov-helyettesítési elv, és hogyan alkalmazzák az objektumorientált programozásban.

sobes.tech MI

Válasz az MI-től

A Liskov-helyettesítési elv (Liskov Substitution Principle, LSP) az objektumorientált programozás SOLID öt alapelvének egyikét képezi. Azt mondja ki, hogy az alosztály példányai helyettesíthetik a szuperosztály példányait anélkül, hogy a program helyességét megváltoztatnák.

Egyszerűbben fogalmazva, ha az B osztály öröklődik az A osztályból, akkor B osztály példányai úgy viselkedjenek, hogy azokat az A osztály példányai helyett lehet használni anélkül, hogy váratlan hibák vagy logikai változások lépnének fel.

Ez úgy érhető el, hogy az alosztály nem:

  • sérti meg az alapszint invariánsait,
  • szűkíti a metódusok előfeltételeit (szigorúbb bemeneti adatokat kér),
  • vagy bővíti a posztfeltételeket (kevésbé garantált eredményt ad).

Példa:

class Bird {
    func fly() {
        print("A madár repül")
    }
}

class Sparrow: Bird {
    override func fly() {
        print("A veréb repül")
    }
}

// A LSP megsértése, ha hozzáadunk egy Penguin osztályt, amely nem tud repülni
class Penguin: Bird {
    override func fly() {
        fatalError("A pingvin nem tud repülni")
    }
}

Ebben a példában a Penguin megsérti a LSP-t, mert nem használható a Bird helyett hibák nélkül. Jobb lenne külön interfészt definiálni a repülő madarak számára.

Így a LSP segít olyan osztályhierarchiák létrehozásában, amelyek könnyen bővíthetők és karbantarthatók, elkerülve a váratlan hibákat az objektumok cseréjekor.