Polimorfizm — OOP ning uchinchi ustuni. So’zning ma’nosi “ko’p shakllilik”: bitta metod nomi turli obyektlarda turlicha xatti-harakat qiladi. Bu OOP ning eng nafis imkoniyati — u bir xil kod bilan turli obyektlarni boshqarish imkonini beradi.
Polimorfizm — bir interfeys (metod nomi) orqali turli sinf obyektlarining o’ziga xos xatti-harakatini chaqirish qobiliyati. C#’da u
virtualvaoverrideorqali amalga oshiriladi.
Ota sinf turi orqali
Polimorfizmning asosi: ota sinf turidagi o’zgaruvchi bola sinf obyektini saqlashi mumkin. Metod chaqirilganda esa obyektning haqiqiy turiga mos versiya ishlaydi:
using System;
class Hayvon
{
public virtual void Ovoz()
{
Console.WriteLine("Noma'lum ovoz");
}
}
class Mushuk : Hayvon
{
public override void Ovoz() => Console.WriteLine("Miyov");
}
class It : Hayvon
{
public override void Ovoz() => Console.WriteLine("Vov");
}
Hayvon a = new Mushuk();
Hayvon b = new It();
a.Ovoz();
b.Ovoz();
Miyov
Vov
a va b — Hayvon turida e’lon qilingan, ammo har biri o’z haqiqiy turiga (Mushuk, It) mos ovoz chiqardi. C# obyektning haqiqiy turini ish vaqtida aniqlaydi.
Ro’yxatda polimorfizm
Polimorfizmning butun kuchi to’plam bilan birlashganda namoyon bo’ladi:
using System;
using System.Collections.Generic;
class Hayvon { public virtual void Ovoz() => Console.WriteLine("..."); }
class Mushuk : Hayvon { public override void Ovoz() => Console.WriteLine("Miyov"); }
class It : Hayvon { public override void Ovoz() => Console.WriteLine("Vov"); }
List<Hayvon> hayvonlar = new List<Hayvon> { new Mushuk(), new It() };
foreach (Hayvon h in hayvonlar)
{
h.Ovoz(); // har biri o'z ovozini chiqaradi
}
Miyov
Vov
Bir xil h.Ovoz() chaqiruvi har bir obyektda uning turiga mos ishladi. Yangi tur qo’shsangiz — masalan, Ot — sikl kodini umuman o’zgartirmaysiz.
virtual, override, abstract
C# polimorfizm uchun uch kalit so’z beradi. Ularni jadvalda ko’ramiz:
| Kalit so’z | Vazifasi |
|---|---|
virtual |
metodni qayta yozilishi mumkin qiladi |
override |
bola sinfda metodni qayta yozadi |
abstract |
tanasiz metod (bola majburan yozadi) |
Nega polimorfizm kuchli?
Polimorfizm tufayli siz umumiy interfeys (Hayvon) bilan ishlaysiz, aniq turlar esa har biri o’zicha javob beradi. Bu kengaytiriladigan, moslashuvchan tizimlar qurishning kalitidir — yangi tur qo’shish mavjud kodni buzmaydi.
Xulosa
Bu bo’limda polimorfizmni, ota sinf turi orqali bola obyektini boshqarishni, ro’yxatda polimorfizmni va virtual/override/abstract kalit so’zlarini ko’rib chiqdik. Enkapsulatsiya, meros va polimorfizm bilan OOP ning uch ustunini o’zlashtirdik. Keyingi darsda fayllar bilan ishlashga o’tamiz.