Algoritmlash asoslari


Kompilyatsiya vaqtidagi polimorfizm



Download 1,32 Mb.
bet30/41
Sana30.12.2021
Hajmi1,32 Mb.
#90368
1   ...   26   27   28   29   30   31   32   33   ...   41
Bog'liq
Algoritmlash asoslari

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:

Source code

     

  • 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). Ob’yektni bir turdan boshqa turga o'tkazishga (casting) deyiladi.

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

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

String satrString = (String)Ob’yektSatr; // String – Object classning bola classi

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

Agar bola klassning ob’yekti 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 ob’yektini ko'rsatsa (xotiradagi adresini ko'rsatsa) ham up-casting deyiladi.
Misol:

Source code

     

  • class A{}

  •  

  • class B extends A{}

  •  

  • A a = new B(); //upcasting


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

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

Source code

     

  • 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 ob’yektni ko'rsatayotgani uchun Malibu klassda qayta yozilgan funksiya chaqiriladi.



20-dars - Javada abstrakt klass
Abstract kalit so'zi bilan yaratilgan klasslar abstrakt klasslar deb nomlanadi. Abstrakt klasslar abstakt funksiyalar (tanasi yozilmagan funksiya) yoki abstrakt bo'lmagan funksiyalardan (tanasi yozilgan funksiya) tashkil topgan bo'ladi.

Abstrakt klass quyidagicha e'lon qilinadi:

abstract class A{

}

  • Abstrakt klasslar odatda super(ota) klasslar yaratishda ishlatiladi;

  • Abstrakt klasslardan yaratilayotgan klasslarimizni sxemasini ya'ni skletini yaratishda foydalaniladi;

  • Abstrakt klassimizda undan meros oladigan klasslar uchun umumiy bo'lgan funksiyalar, konstantlar, o'zgaruvchilar e'lon qilinadi.

Tanasi (implementation) yozilmagan va abstract kalit so'zi bilan yaratilgan funksiya — abstrakt funksiya deyiladi.

abstract void funksiya();

Abstrakt funksiyasi bor bo'lgan abstrakt klassga misol:

Source code

     

  • public abstract class Mashina {

  •  

  • abstract void madeli();

  •  

  • abstract void mashinaTuri();

  •  

  • abstract void uzunligi();

  •  

  • abstract void rangi();

  •  

  • }

  •  

  • public class Malibu extends Mashina{

  •  

  • @Override

  •  

  • void madeli() {

  •  

  • System.out.println("Chevrolet");

  •  

  • }

  •  

  • @Override

  •  

  • void mashinaTuri() {

  •  

  • System.out.println("Malibu");

  •  

  • }

  •  

  • @Override

  •  

  • void uzunligi() {

  •  

  • System.out.println("4.7 metr");

  •  

  • }

  •  

  • @Override

  •  

  • void rangi() {

  •  

  • System.out.println("Qora");

  •  

  • }

  •  

  • public static void main(String[] args) {

  •  

  • Mashina mashina = new Malibu();

  •  

  • mashina.madeli();

  •  

  • mashina.mashinaTuri();

  •  

  • mashina.uzunligi();

  •  

  • mashina.rangi();

  •  

  • }

  •  

  • }

Natija :

Chevrolet

Malibu

4.7 metr

Qora
Yuqoridagi misolda Malibu klassi abstrakt funksiyalari (modeli, mashinaTuri, uzunligi, rangi) bor bo'lgan Mashina abstarkt klassidan nasl olyapti va uning abstrakt klassi tanasini realizatsiya(Override) qilayapti.

Amaliyotda abstrakt klass bir nechta klasslar uchun ota klass vazifasini bajaradi va abstrakt funksiyalar turli bola klasslarda turlicha realizatsiya qilinadi.

Shuningdek abstrakt klass konstruktor, tanasi bor funksiya, ma'lumotlar va hattoki main() funksiyaga ega bo'lishi mumkin. Quyidagi misolga qarang:


Download 1,32 Mb.

Do'stlaringiz bilan baham:
1   ...   26   27   28   29   30   31   32   33   ...   41




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish