Darsliklar Kotlin Polimorfizm. (Sinf/Class)

Kotlin Kotlin Polimorfizm. (Sinf/Class)

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.

Polimorfizmbir interfeys (metod nomi) orqali turli sinf obyektlarining o’ziga xos xatti-harakatini chaqirish qobiliyati. Kotlin’da u meros va override orqali 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:

open class Hayvon {
    open fun ovoz() = println("Noma'lum ovoz")
}

class Mushuk : Hayvon() {
    override fun ovoz() = println("Miyov")
}

class It : Hayvon() {
    override fun ovoz() = println("Vov")
}

fun main() {
    val a: Hayvon = Mushuk()
    val b: Hayvon = It()
    a.ovoz()
    b.ovoz()
}
Miyov
Vov

a va bHayvon turida e’lon qilingan, ammo har biri o’z haqiqiy turiga (Mushuk, It) mos ovoz chiqardi. Kotlin obyektning haqiqiy turini ish vaqtida aniqlaydi.

Ro’yxatda polimorfizm

Polimorfizmning butun kuchi to’plam bilan birlashganda namoyon bo’ladi:

open class Hayvon {
    open fun ovoz() = println("...")
}
class Mushuk : Hayvon() {
    override fun ovoz() = println("Miyov")
}
class It : Hayvon() {
    override fun ovoz() = println("Vov")
}

fun main() {
    val hayvonlar = listOf(Mushuk(), It())
    for (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.

Abstrakt sinf va interfeys

Kotlin polimorfizm uchun abstract sinf va interface beradi. Ular umumiy “shartnoma”ni belgilaydi:

Vosita Tavsifi
open class meros olinadigan oddiy sinf
abstract class obyekt yaratib bo’lmaydigan andoza
interface faqat “shartnoma” (bir necha bo’lishi mumkin)

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 abstract/interface ni ko’rib chiqdik. Enkapsulatsiya, meros va polimorfizm bilan OOP ning uch ustunini o’zlashtirdik. Keyingi darsda fayllar bilan ishlashga o’tamiz.