manba

18-dars - Javada polimorfizm.

18-dars - Javada polimorfizm.

Obyektga abstrakt darajada qarash xususiyati. Masalan, turli xil oynalar mavjud: deraza oynasi, eshik oynasi, mashina oynasi, telefon oynasi. Bularning barchasi bir biridan ishlatilish sohasi, tuzulishi, shakli bilan farq qiladi. Lekin barchasini umumiy qilib oyna deb qarash mumkin. Polimorfizm turli xil obyektlar bilan bir xil uniformada ishlash imkoniyatini beradi.

Polimorfizm orqali bir jarayonni turli yo'llar bilan tashkillashtirishimiz mumkin. Polimorfizm so'zi yunoncha ikki so'zning birikmasidan tashkil topgan «poly» — Ko'p va «morphs» — formalar. Polimorfizm ham ko'p formalar degan ma'noni anglatadi.

Javada polimorfizmni ikki turi mavjud: programma kompilyatsiya bo'layotgan vaqtda sodir bo'ladigan polimorfizm (compile time polymorphism, static polymorphism) va programma ishlab turgan vaqtda sodir bo'ladigan polimorfizm (runtime polymorphism, dynamic polymorphism). Javada polimorfizm funksiyalarni qayta yuklash (overload) va qayta yozish (override) bilan amalga oshiriladi.

Kompilyatsiya vaqtidagi polimorfizm

Agar funksiyani qayta yuklansa (overload) bu — (compile time polimorfizmga) kompilyatsiya vaqtidagi polimorfizmga misol bo'ladi. Funksiyalarni qayta yuklash haqida oldingi maqolalarimizda to'xtalib o'tganmiz.

Quyidagi misolga e'tiboringizni qarating:

class X 
{ 
    void metodA(int num) 
    { 
        System.out.println ("metodA:" + num); 
    } 
    void metodA(int num1, int num2) 
    { 
        System.out.println ("metodA:" + num1 + "," + num2); 
    } 
    double metodA(double num) { 
        System.out.println("metodA:" + num); 
        return num; 
    } 
}
  
class Y 
{ 
    public static void main (String args []) 
    { 
        X Obj = new X(); 
        double natija; 
        Obj.metodA(20); 
        Obj.metodA(20, 30); 
        result = Obj.metodA(5.5); 
        System.out.println("Javob:" + result);
     } 
}

Natija:

metodA:20

metodA:20,30

metodA:5.5

Javob:5.5

Yuqoridagi misolda, X classning 3 ta funksiyasi bor. Uchala funksiyalarning ham nomlari bir xil — metodA, ammo funksiyalarning argumentlarida farqlar mavjud. Kompilyatsiya vaqtida kompilyator funksiyaga yuborilayotgan argumentlarning soni va ma'lumot turiga qarab kerakli funksiyani tanlab oladi. Qaysi funksiyalarni chaqirish kompilatsiya vaqtida aniqlanishi tufayli ham bu polimorfizm turi kompilyatsiya vaqtidagi polimorfizm deb nomlanadi.

Kompilyatsiya vaqtidagi polimorfizmni yana (Static binding) statik bog'lash, (Early binding) erta bog'lash deb ham ataladi.

Ishchi vaqtdagi kompilyatsiya (Runtime polimorfizm)

Dastlab casting, up-casting va down-casting tushunchalari bilan tanishib olaylik (Aslida, ishchi vaqtdagi polimorfizmni tushunish uchun faqat up-casting ni o'zini bilish yetadi, ammo men to'liqroq yozdim). Obyektni bir turdan boshqa turga o'tkazishga (casting) deyiladi.

Agar ota klassning obyekti bola klassga o'tkazilsa bu down-casting deyiladi. Misol:

Object satrObject = "Bu shunchaki satr"; // Object – ota class

String satrString = (String)ObyektSatr; // String – Object classning bola classi

Yuqoridagi misolda Object turidagi o'zgaruvchi (satrObject) String turiga o'zgartirilyapti. Bilamizki, Obyekt klass barcha classlarning otasi hisoblanadi.

Agar bola klassning obyekti ota klass turiga o'tkazilsa bu up-casting deyiladi. Misol:

String satrString = "Bu shunchaki satr"; Object satrObject = (Object)satrString;

Agar ota klassning o'zgaruvchisi bola klass obyektini ko'rsatsa (xotiradagi adresini ko'rsatsa) ham up-casting deyiladi.

Misol:

class A{} 
class B extends A{} 
A a = new B(); //upcasting

Yuqoridagi misolda A class toifasidagi a o'zgaruvchi (reference variable) B bola classning obyektini ko'rsatadi (xotiradagi manzilini ko'rsatadi).

Runtime polimorfizmda bola classdagi override qilingan metod, ota class toifasidagi o'zgaruvchi orqali chaqiriladi. Quyidagi misolga qarang:

class Chevrolet
{ 
    void run()    
    {
        System.out.println("running");
    } 
} 

class Malibu extends Chevrolet
{ 
    void run()
    {
        System.out.println("Chevrolet Malibu");
    } 
    public static void main(String args[])
    { 
        Chevrolet ch = new Malibu();//upcasting
         ch.run(); 
    } 
}

Natija:

Chevrolet Malibu

Yuqoridagi misolda biz ikkita klass yaratyapmiz. Malibu class Chevrolet class dan nasl olayapti va run() funksiyani qayta yozyapti(override). Qayta yozilgan run funksiya ota klass turidagi o'zgaruvchi ch orqali chaqirilayapti. ch o'zgaruvchi Malibu turidagi obyektni ko'rsatayotgani uchun Malibu klassda qayta yozilgan funksiya chaqiriladi.

Manba:


Rayimjonov G'ayratjon - Texnoman foydalanuvchisi

Muallif haqida

Rayimjonov G'ayratjon


Qiziq bo‘ladi:


Birinchi bo‘ling!

Iltimos, fikr bildirish uchun saytga kiring yoki ro‘yxatdan o‘ting!