Sobes.tech
Junior — Middle

Obyektga yo'naltirilgan dasturlashda Liskovning o'rnini bosish printsipining misolini keltira olasizmi?

sobes.tech AI

AIdan javob

Liskov almashtirish prinsipi (Liskov Substitution Principle, LSP) shart qiladiki, subklassning obyektlari asosiy klassning obyektlari bilan almashtirilishi mumkin bo‘lishi kerak, bu esa dastur to‘g‘ri ishlashini buzmasdan.

C# misoli:

class Bird {
    public virtual void Fly() {
        Console.WriteLine("Qush uchadi");
    }
}

class Sparrow : Bird {
    public override void Fly() {
        Console.WriteLine("Qorqizil uchadi");
    }
}

class Ostrich : Bird {
    public override void Fly() {
        throw new NotSupportedException("Ostrich uchmaydi");
    }
}

void MakeBirdFly(Bird bird) {
    bird.Fly();
}

// Foydalanish:
MakeBirdFly(new Sparrow()); // to‘g‘ri
MakeBirdFly(new Ostrich()); // LSPni buzadi, chunki xatolik yuzaga keladi

Ushbu misolda, Ostrich sinfi, Bird asosiy sinfining Fly metodini qo‘llab-quvvatlamagani uchun Liskov almashtirish prinsipini buzadi va xatolik yuzaga keladi. LSPni saqlash uchun, sinf hierarhiyasini o‘zgartirish yoki interfeyslarni bo‘lish kerak, shunda subklasslar qo‘llab-quvvatlanmaydigan xulq-atvorni amalga oshirmasligi mumkin.