Sobes.tech
Junior — Middle

Программалоодо Лисковдун алмаштыруу принциби кандайча колдонулуп жатканын мисал келтире аласызбы?

sobes.tech AI

AIден жооп

Лискoв ордуулгaн зөрчил (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 анги нь Liskov ордуулгын зарчмыг зөрчиж байна, учир нь дэд анги нь үндсэн ангийн (fly арга) зангилааг дэмжихгүй байна. LSP-ийг дагаж мөрдөхийн тулд, нисдэг ба нисдэггүй шувуудыг ангилах нь илүү дээр, жишээ нь, интерфэйс эсвэл тусдаа үндсэн анги ашиглах замаар.