Vysvetlite, čo znamená princíp Liskovovej substitúcie a ako sa uplatňuje v objektovo orientovanom programovaní.
sobes.tech AI
Odpoveď od AI
Princip zamenjivosti Liskov (Liskov Substitution Principle, LSP) je eden od pet SOLID principov v objektno usmerjenem programiranju. Navaja, da morajo biti objekti podrazreda zamenljivi z objekti nadrazreda brez spremembe pravilnosti programa.
Preprosto povedano, če razred B deduje od razreda A, morajo biti objekti razreda B takšni, da jih je mogoče uporabiti namesto objektov razreda A brez nepričakovanih napak ali sprememb v logiki.
To se doseže z zagotavljanjem, da podrazred:
- Ne krši invariatov nadrazreda.
- Ne zoži predpogojev metod (zahteva strožje vhodne podatke).
- Ne širi postpogojev (daje manj garancije za rezultat).
Primer:
class Bird {
func fly() {
print("Ptica leti")
}
}
class Sparrow: Bird {
override func fly() {
print("Vraba leti")
}
}
// Kršitev LSP, če dodamo razred Penguin, ki ne zna leteti
class Penguin: Bird {
override func fly() {
fatalError("Pingvin ne zna leteti")
}
}
V tem primeru Penguin krši LSP, saj ga ni mogoče uporabiti namesto Bird brez napak. Bolje bi bilo definirati lojen vmesnik za ptice, ki letijo.
Tako LSP pomaga ustvarjati hierarhije razredov, ki so enostavne za razširitev in vzdrževanje, ter se izogibajo nepričakovanim napakam pri zamenjavi objektov.