Sobes.tech
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, беҳтар аст, ки синфҳоро ба паррандаҳои парвозкунанда ва паррандаҳои наметавонанд парвоз кунанд, ба мисли интерфейсҳо ё синфҳои асосии ҷудо.