Agar
SclassTclass ning vorisi (ya’niTdan meros olgan) bo‘lsa, undaTturidagi obyekt ishlatiladigan barcha joylardaSobyektini 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.
🔒 LSP dastur ishonchliligi va kengaytirilishini ta’minlaydi.
Agar bu tamoyil buzilsa:
- Kodni test qilish qiyinlashadi
- Kutilmagan xatoliklar chiqadi
- Polimorfizmning foydasi yo‘qqa chiqadi
public class Hayvon
{
public virtual void Yurish() => Console.WriteLine("Yuryapti");
}
public class Baliq : Hayvon
{
public override void Yurish()
{
throw new NotImplementedException(); // ❌ Baliq yurmaydi
}
}Baliq class Hayvondan meros olgan, lekin u "Yurish" metodini to‘liq bajara olmaydi. Bu LSP ga zid.
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.
| 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 |
classDiagram
class Hayvon {
+void HarakatQil()
}
class Qush {
+void HarakatQil()
}
class Baliq {
+void Suzish()
}
Hayvon <|-- Qush
Hayvon <|-- Baliq
🧩 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! 😉