Junior — Middle
Масалан ба як намуна нишон диҳед, ки чӣ гуна принсипи ивазкунии Лисков дар амалияи барномасозӣ татбиқ мешавад?
sobes.tech AI
Ҷавоб аз AI
Принципи ивазшавии Лисков (Liskov Substitution Principle, LSP) мегӯяд, ки объектҳои подкласс бояд бо объектҳои асосии класс ивазшаванда бошанд, бидуни вайрон кардани дурустии барнома.
Масалан дар JavaScript (Node.js):
class Bird {
fly() {
console.log('Парранда парвоз мекунад');
}
}
class Sparrow extends Bird {
fly() {
console.log('Қирмиз парвоз мекунад');
}
}
class Ostrich extends Bird {
fly() {
throw new Error('Қоқи парвоз карда наметавонад');
}
}
function makeBirdFly(bird) {
bird.fly();
}
const sparrow = new Sparrow();
makeBirdFly(sparrow); // Қирмиз парвоз мекунад
const ostrich = new Ostrich();
makeBirdFly(ostrich); // Хатогӣ — вайрон кардани LSP
Ин ҷо, синфи Ostrich принсипи ивазшавии Лисковро вайрон мекунад, зеро подкласс ба рафтори синфи асосӣ (усул fly) дастгирӣ намекунад. Барои риояи LSP, беҳтар аст, ки синфҳоро ба паррандаҳои парвозкунанда ва паррандаҳои наметавонанд парвоз кунанд, ба мисли интерфейсҳо ё синфҳои асосии ҷудо.