Skip to content

Instantly share code, notes, and snippets.

@AbduvaliMamatov
Created July 24, 2025 07:07
Show Gist options
  • Select an option

  • Save AbduvaliMamatov/666b1767f66fb53ef36e31f43e415e4d to your computer and use it in GitHub Desktop.

Select an option

Save AbduvaliMamatov/666b1767f66fb53ef36e31f43e415e4d to your computer and use it in GitHub Desktop.
Liskovning Almashtirish Prinsipi (SOLID - L)

🧱 Liskov Almashtirish Tamoyili (SOLID - L, Liskov Substitution Principle — LSP)

Liskov Substitution Principle (LSP) — obyektga yo‘naltirilgan dasturlashda qo‘llaniladigan 5 ta asosiy SOLID tamoyillaridan biridir. Ushbu tamoyil 1987-yilda Barbara Liskov tomonidan taklif qilingan.


📌 Asosiy g‘oya

Agar S class T class ning vorisi (ya’ni T dan meros olgan) bo‘lsa, unda T turidagi obyekt ishlatiladigan barcha joylarda S obyektini ham qo‘llash mumkin bo‘lishi kerak va bu o'zgarishlar noto‘g‘ri ishlashga olib kelmasligi lozim.

🔁 Boshqacha aytganda:

"Voris class ota class o‘rniga ishlatilganda tizim buzilmasligi kerak."


🧠 Bu tamoyil nima uchun muhim?

🔒 LSP dastur ishonchliligi va kengaytirilishini ta’minlaydi.
Agar bu tamoyil buzilsa:

  • Kodni test qilish qiyinlashadi
  • Kutilmagan xatoliklar chiqadi
  • Polimorfizmning foydasi yo‘qqa chiqadi

❌ Misol (LSP buzilishi)

public class Hayvon
{
    public virtual void Yurish() => Console.WriteLine("Yuryapti");
}

public class Baliq : Hayvon
{
    public override void Yurish()
    {
        throw new NotImplementedException(); // ❌ Baliq yurmaydi
    }
}

🧨 Muammo:

Baliq class Hayvondan meros olgan, lekin u "Yurish" metodini to‘liq bajara olmaydi. Bu LSP ga zid.


✅ To‘g‘ri Yondashuv (LSP saqlangan)

public abstract class Hayvon {}

public class QuruqlikHayvoni : Hayvon
{
    public void Yurish() => Console.WriteLine("Yuryapti");
}

public class Baliq : Hayvon
{
    public void Suzish() => Console.WriteLine("Suzmoqda");
}

📌 Har bir class o‘ziga xos metodlarni olgan. Endi hech kim noto‘g‘ri xatti-harakatni kutmaydi, LSP saqlangan.


📊 Taqqoslash Jadvali

Holat LSP buzilganmi? Izoh
Voris class ota class metodini bekor qilsa ✅ Ha Noto‘g‘ri implementatsiya
Voris class yangi metod qo‘shsa ❌ Yo‘q Bu holatda muammo yo‘q
Ota calss ning metod yoki xususiyatlari buzilsa ✅ Ha Tizim noaniq ishlaydi

🧮 Mermaid Diagramma: Vorislik va Almashtirish

classDiagram
    class Hayvon {
        +void HarakatQil()
    }

    class Qush {
        +void HarakatQil()
    }

    class Baliq {
        +void Suzish()
    }

    Hayvon <|-- Qush
    Hayvon <|-- Baliq
Loading

🎯 Yakuniy xulosa

🧩 LSP quyidagilarni ta'minlaydi:

  • ⚙️ Kutilgan funksionallik
  • 🤝 Oson testlash
  • 🛠️ Yaxshi dizayn

Unutmang: Agar voris clsss ota class o‘rniga ishlatilganda xatolik bersa, dizayn noto‘g‘ri bo‘lishi mumkin! 😉


📢 Boshqa SOLID tamoyillar bilan solishtirganda LSP kuchliroq samaradorlik beradi.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment