Java bir kund



Download 1,09 Mb.
bet17/24
Sana30.09.2022
Hajmi1,09 Mb.
#850991
1   ...   13   14   15   16   17   18   19   20   ...   24
Bog'liq
Java быстрый старт (1)

OBYEKTGA YO'LLANGAN


DASTURLASH, II QISM


Keling, ob'ektga yo'naltirilgan dasturlashning yanada rivojlangan mavzulariga o'tamiz. Ushbu bobda siz meros, polimorfizm, mavhum sinflar va interfeyslar haqida bilib olasiz.



    1. MEROS OLISH

Meros ob'ektga yo'naltirilgan dasturlashning asosiy tushunchalaridan biridir . Xulosa qilib aytganda, meros mavjud kodni samarali qayta ishlatishingiz uchun mavjud sinf asosida yangi sinf yaratish imkonini beradi . Aslida, Java-dagi barcha sinflar Ob'ekt deb nomlangan tayyor tayanch sinfdan meros bo'lib o'tadi.

Object klassi sinflar bilan ishlashda foydalanish mumkin bo'lgan ko'plab tayyor usullardan iborat . Bunday usullardan biri, toString () ob'ektni ifodalovchi satrni qaytaradi . Biz toString() usulini keyinroq loyiha ustida ishlayotganimizda ko'ramiz .


Meros nima?



      1. OTA-ONA SINFI

Keling, ko'rsatadigan kichik dastur yozaylik
meros tushunchasi.
8.1. Meros 139
Aytaylik, siz ikki turdagi a'zolik, VIP va muntazam bo'lgan fitnes klubi uchun dastur yozyapsiz. NetBeans-ni ishga
tushiring va InheritanceDemo nomli yangi Java loyihasini yarating .
Inheritancedemo paketiga Member nomli yangi sinf qo‘shing . Agar sizga yangi sinf yaratish bo'yicha ko'rsatmalar kerak bo'lsa, 7.2-bo'limga qarang.
Ro'yxatdan sinf foydalanuvchidan ma'lumotlarni so'raydi . Shuning uchun biz sinfimizga buyruq qo'shishimiz kerak bo'ladi
import java.util.Scanner;

Ushbu buyruqni qatordan keyin qo'shing


paket merosi demosi;

Endi sinf ustida ishlashni boshlash uchun hamma narsa tayyor . A'zolar sinfiga quyidagi parchani qo'shing


( jingalak qavs ichida):
public String Welcome = "ABC Fitnessga xush kelibsiz";
himoyalangan ikki baravar yillik to'lov;
shaxsiy string nomi; private int memberID; private int memberSince; xususiy chegirma;
Bu a'zolar sinfining oltita maydonini e'lon qiladi .
Birinchisi, salomlashish xabarini saqlash uchun ochiq maydon . U " ABC Fitnessga xush kelibsiz" qatori bilan ishga tushirilgan .


Qolgan beshta maydondan biri himoyalangan, toÿrttasi esa xususiy deb eÿlon qilingan. Himoyalangan haqida
140 8 -bob. Obyektga yo‘naltirilgan dasturlash

maydonlar haqida keyinroq gaplashamiz. Hozircha bilish kifoya
himoyalangan maydon u joylashgan sinfda mavjudligi
e'lon qilingan, undan olingan har qanday sinfda va bir xil paketning istalgan sinfida. Olingan sinflar keyingi bo'limda muhokama qilinadi.

Endi sinfga ikkita konstruktor qo'shamiz:


jamoat a'zosi()


{
System.out.println("Parametrsiz ota-konstruktor");

}


umumiy a'zo(String pName, int pMemberID, int pMemberSince)

{
System.out.println("Ota-ona konstruktor bilan


3 parametr");

ism = pName;


a'zo ID = pMemberID;
memberSince = pMemberSince;
}

Birinchi konstruktor oddiygina " Parametrsiz ota-konstruktor" qatorini chiqaradi.


Ikkinchi konstruktor yanada qiziqarli ko'rinadi. U "3 parametrli ota-konstruktor" qatorini chiqaradi va uning parametrlarining qiymatlarini Ro'yxatdan sinfining uchta shaxsiy maydoniga belgilaydi.

Konstruktorlar yozilgach, navbat get va set usullariga keladi. Boshqa sinflar ishlashi uchun shaxsiy


chegirma maydoni uchun get va sozlash usullarini yozamiz .
bu maydon bilan:
8.1. Meros 141
ommaviy double getDiscount(){

chegirmani qaytarish;


}

public void setDiscount(){


Skaner kiritish = yangi Skaner(System.in); Stringpassword;


System.out.print("Administrator parolini kiriting: "); parol = input.nextLine();

agar (!password.equals("abcd"))


{
System.out.println("Parol noto'g'ri. Siz chegirmani tahrirlash huquqiga ega emassiz.");
}boshqa
{
System.out.print("Iltimos, chegirmani kiriting: "); chegirma = input.nextInt();
}
}

Get usuli shunchaki chegirma maydonining qiymatini qaytaradi .


Belgilangan usul yanada murakkab. Chegirma maydonini tahrirlashdan oldin foydalanuvchidan administrator parolini kiritish talab qilinadi . Bu usul shaxsiy maydonga ruxsatsiz kirishni oldini olish uchun o'rnatilgan usuldan qanday foydalanish mumkinligini ko'rsatadi. Biroq , xaker bunday kodni ko'p harakat qilmasdan buzishi mumkin bo'ladi. Haqiqiy hayotda ma'lumotlarni himoya qilish oddiydan ko'ra kuchliroq xavfsizlik choralarini talab qiladi.


parol.

Endi a'zolar sinfiga yana ikkita usul qo'shamiz .




142 8 -bob. Obyektga yo‘naltirilgan dasturlash
Birinchisi, displayMemInfo() nomli umumiy usul . U klub a'zosi haqidagi ma'lumotlarni chop etish uchun bir qator println() buyruqlaridan foydalanadi:

public void displayMemInfo(){ " System.out.println("A'zo nomi: + nomi); " System.out.println("A'zo ID: + a'zo ID);


System.out.println("A'zodan beri" + MemberSince);
"
System.out.println("Yillik to'lov: + yillik to'lov);
}
Ikkinchisi - accountAnnual Fee() nomli ommaviy usul . U
klub tashrifchisi uchun yillik to'lovni hisoblash uchun ishlatiladi :
umumiy bekor hisoblangan yillik to'lov()
{
yillik to'lov = 0;
}
Yillik texnik xizmat ko'rsatish narxi nolga tenglashtirilganini payqadingizmi? Hali bu haqda tashvishlanmang; usul keyinroq yangilanadi.
Hamma narsa bajarilgandan so'ng, a'zolar sinfi tugallanadi.



      1. OLIB SINF

Shunday qilib, a'zolar sinfi tugallandi. Endi undan kelib chiqadigan sinfni qanday yaratishni ko'rib chiqamiz . Hosil bo'lgan sinflar kichik sinflar yoki kichik sinflar deb ataladi , ular meros qilib olgan sinflar esa ota-ona, asosiy yoki yuqori sinflar deb ataladi .
Sizga shuni eslatib o'tamanki, bizning ota-ona sinfimiz (A'zo) quyidagi komponentlarni o'z ichiga oladi :
8.1. Meros 143

dalalar
public String Welcome = "ABC Fitnessga xush kelibsiz";
himoyalangan ikki baravar yillik to'lov;
shaxsiy string nomi; private int memberID; private int memberSince; xususiy chegirma;

Konstruktorlar


jamoat a'zosi()
umumiy a'zo(String pName, int pMemberID, int pMemberSince)
Usullari
ommaviy double getDiscount() ommaviy bekor qilish to'plamiDiscount() public void displayMemInfo()
umumiy bekor hisoblangan yillik to'lov()

Biz Register sinfidan kelib chiqadigan ikkita sinf, NormalMember va VIPMember yaratamiz .


NormalMember olingan sinfdan boshlaylik .
Inheritancedemo paketiga NormalMember nomli yangi Java sinfini qo'shing . E'tibor bering, yangi sinf yaratishda NetBeans avtomatik ravishda sinf deklaratsiyasini yaratadi

umumiy sinf NormalMember {


}


NormalMember klassi Member klassidan olinganligini koÿrsatish uchun kengaytmali soÿzlarni qoÿshing
sinf deklaratsiyasida:
144 8 -bob. Obyektga yo‘naltirilgan dasturlash

umumiy sinf NormalMember a'zoni kengaytiradi{

}


extensions - bu bir sinf boshqa sinfdan meros bo'lishini ko'rsatadigan Java kalit so'zi . Bizning misolimizda, NormalMember klassi Member sinfidan meros bo'lib o'tadi .
Bir sinf boshqa sinfdan meros ekanligini ko'rsatmoqchi bo'lsangiz, kengaytirilgan kalit so'zdan foydalaning. Faqatgina istisno Ob'ekt sinfidan meros bo'lib qoladi. Barcha Java
sinflari Object sinfidan kelib chiqqanligi sababli , bu meros aniq ko'rsatilishi shart emas.

Bir sinf boshqa sinfdan meros bo'lsa, u barcha ochiq va himoyalangan maydonlar va usullarni ota- sinfdan meros qilib oladi . Bu lotin degan ma'noni anglatadi


sinf ushbu maydonlar va usullardan xuddi o'z kodining bir qismi kabi foydalanishi mumkin; bu maydonlar va usullarni hosila sinfida yana e'lon qilish shart emas . Boshqacha qilib aytganda, biz olingan sinfni yozishni boshlamagan bo'lsak
ham, u allaqachon ikkita maydonni o'z ichiga oladi (xush kelibsiz va yillikFee) va to'rtta usul (getDiscount, setDiscount, displayMemInfo va accountAnnualFee ) ota-ona sinfidan
meros bo'lib o'tgan. Meroslash kodni qayta ishlatishni osonlashtiradi. Bu, ayniqsa , agar ota-sinfda hosil bo'lgan sinfda ishlatilishi mumkin bo'lgan ko'p miqdordagi umumiy/ himoyalangan maydonlar va usullar mavjud bo'lsa, qulay bo'ladi.
Biroq, olingan sinf ota-klassning shaxsiy maydonlari va usullarini meros qilib olmaydi . Bu degani, olingan sinf xususiyga kira olmaydi
8.1. Meros 145

sohalar va usullar bevosita; u boshqa usullardan foydalanishga majbur bo'ladi. Keyinchalik misol keltiriladi.
Shunday qilib, biz olish uchun NormalMember sinfini e'lon qildik
a'zosi. Endi biz uchun konstruktor yozishimiz kerak
olingan sinf.
Har safar olingan sinf konstruktorini yozganingizda, u birinchi navbatda ota-klass konstruktorini chaqirishi kerak. Agar buni qilmasangiz , Java siz uchun ota-klassning parametrsiz konstruktorini avtomatik ravishda chaqiradi .

Masalan, sinfga quyidagi konstruktorni qo'shing


Oddiy a'zo:

umumiy NormalMember() {


System.out.println("Parametrsiz bola konstruktor");

}
Yuqorida ko'rsatilganidek, konstruktorni e'lon qilganingizda, Java ota-klassdagi parametrsiz konstruktorni qidiradi va olingan sinf konstruktor kodini bajarishdan oldin uni chaqiradi . Agar siz ushbu konstruktordan olingan ob'ektni yaratish uchun foydalansangiz, ekranga ikkita qator chop etiladi:


Parametrsiz ota-konstruktor Parametrsiz bola konstruktor
Birinchi satr asosiy sinf konstruktori tomonidan, ikkinchi qator esa olingan sinf konstruktori tomonidan chiqariladi.
Agar siz ota-sinf parametrlari bilan konstruktorni chaqirmoqchi bo'lsangiz, super kalit so'zidan foydalanishingiz kerak . Misol:
146 8 -bob. Ob'ektga yo'naltirilgan dasturlash

umumiy NormalMember(String pName, int pMemberID, int
pMemberSince)
{
super(pName, pMemberID, pMemberSince); System.out.println("Child Constructor with
3 parametr");
}


Agar super kalit so'zi parametrlarga ega bo'lgan ota-klass konstruktorini chaqirish uchun ishlatilsa , buyruq

super(pName, pMemberID, pMemberSince);


olingan sinf konstruktoridagi birinchi buyruq bo'lishi kerak. Agar bu shart buzilgan bo'lsa, Java xato xabari chiqaradi.


Ushbu misolda super kalit so'zi ota-klassdagi ikkinchi konstruktorni (ya'ni 3 parametrli konstruktorni) chaqirish uchun ishlatiladi . Asosiy konstruktorga pName , pMember va pMemberSince uzatiladi.


Olingan sinf ob'ektini yaratishda, bu con
konstruktorda siz forma yozuvidan foydalanishingiz mumkin

NormalMember myChildMember =


new NormalMember("Jeyms", 1, 2010);

Kodni ishga tushirganingizda, siz quyidagi natijani olasiz:


3 ta parametrli ota-konstruktor 3 ta parametrli bola konstruktor

Sahna orqasida "Jeyms", 1 va 2010 qiymatlari mos ravishda nom, memberID va memberSince maydonlariga tayinlangan .


Savol tug'iladi - ism, a'zo ID maydonlari qaerdan kelgan
va a'zosi beri? Bu maydonlar xususiy maydonlardir
8.1. Meros 147
a'zolar sinfidan va avval men xususiy maydonlar meros bo'lib
o'tmasligini aytib o'tdim. Nima uchun olingan sinf bu maydonlarni o'z ichiga oladi?

Gap shundaki, xususiy maydonlar meros bo‘lib qolmaydi, desak, bu faqat hosila sinflari bu maydonlarga bevosita kira olmasligini bildiradi. Biroq, bu maydonlar olingan sinf ichida mavjud. Yagona farq shundaki, olingan sinf bu maydonlarga to'g'ridan-to'g'ri kira olmaydi va konstruktorlar, sozlagichlar yoki oluvchilardan foydalanishi kerak. Shaxsiy maydonlarga kirish uchun get- va set-metodlaridan foydalanish misoli keyinroq beriladi.


Usulni bekor qilish

Olingan sinf uchun konstruktorlarni yaratgandan so'ng, biz doimiy tashrif buyuruvchilar uchun yillik to'lovni hisoblash usulini yaratishga o'tamiz. Esda tutingki, biz avvalroq accountAnnualFee () usulini dasturlagan edik.


ota-onalar sinfida? Chunki ota-onalar sinfi
ommaviydir, u hosila sinf tomonidan meros qilib olinadi.
Shuning uchun, olingan sinf foydalanishi mumkin
bu usul kodingizning bir qismi sifatida.

Ammo esda tutingki, ota -ona sinfidagi accountAnnualFee () usuli tashrif buyuruvchining yillik to'lovini nolga qaytaradi. Boshqa formuladan foydalanib, olingan sinfda yillik to'lovni hisoblamoqchi bo'lsak- chi? Bunday holda, siz meros qilib olingan usulni bekor qilishingiz kerak bo'ladi.


Usulni bekor qilish shunchaki olingan sinfda usulning yangi versiyasini belgilashni anglatadi.
148 8 -bob. Obyektga yo‘naltirilgan dasturlash

AccountAnnualFee () usulini bekor qilish uchun NormalMember sinfiga quyidagi kodni qo'shing :
@Override
umumiy bekor hisoblangan yillik to'lov()
{
yillik to'lov = (1-0,01*chegirma)*(100 + 12*30);
}

Chegirma so'zi ostidagi qizil to'lqinli chiziqqa qarang


kodni saqlash paytida? U xatoga ishora qiladi. Agar sichqonchani chiziq ustiga olib kelsangiz, "chegirma a'zoda shaxsiy kirish darajasiga ega" xabari paydo bo'ladi. Buning sababi shundaki, chegirma maydoni a'zoda shaxsiydir va shuning uchun NormalMember uchun bevosita foydalana olmaydi.

NormalMember klassi chegirma maydoniga kirishi uchun a'zoda e'lon qilingan get usulidan foydalanishingiz kerak . Yuqoridagi kodni quyidagi bilan almashtiring:


yillik to'lov = (1-0,01*getDiscount())*(100 + 12*30);

Xato sifatida chegirmani getDiscount() bilan almashtirishga arziydi


yo'qoladi.
Izohlar
Usul deklaratsiyasi ustidagi @Override qatorini payqadingizmi ? Bunga izoh deyiladi . Java-da izohlar kompilyatorga qo'shimcha ma'lumotlarni uzatish uchun kodga qo'shiladigan metama'lumotlardir .
@Override izohidan foydalanib, siz kompilyatorga quyidagi usul bekor qilinishi kerakligini aytasiz
8.1. Meros 149
asosiy sinfda (ya'ni, Ro'yxatdan sinfida) e'lon qilingan accountAnnualFee () usuli.
Usulni bekor qilishda ma'lum qoidalarga rioya qilish kerak. Misol uchun, olingan sinfdagi usul ota-klass usuli bilan bir xil parametrlar ro'yxatiga ega bo'lishi kerak. Agar olingan sinfdagi usul ota-klassdagi usulni to'g'ri bekor qilmasa , kompilyator xato haqida xabar beradi. Agar bu sodir bo'lsa, qo'shimcha ma'lumot olish uchun kursorni xato ustiga olib borishingiz mumkin.
Metodni bekor qilishda @Override izohi ixtiyoriy . Biroq, kompilyatsiya xatolarining oldini olish uchun uni ishlatishni tavsiya qilaman.

Izohlar qattiq sintaksisga ega va katta-kichik harflarga sezgir. Shunday qilib , @override, @verriding yoki @ThisMethodOverrideAnother izohlari yaroqsiz. Java bir qator oldindan belgilangan izohlarni o'z ichiga oladi.


Oldindan belgilangan izohlarning toÿliq roÿyxati quyidagi manzilda mavjud: https://docs.oracle.com/javase/tutorial/java/
annotations/predefined.html.
Olingan NormalMember klassi endi tugallandi . Sinf quyidagi komponentlarni o'z ichiga oladi:

dalalar

Ota-ona sinfidan meros:
public String Welcome = "ABC Fitnessga xush kelibsiz";
himoyalangan ikki barobar yillik to'lov
150 8 -bob. Obyektga yo‘naltirilgan dasturlash

Konstruktorlar
umumiy NormalMember()
umumiy NormalMember(String pName, int pMemberID, int
pMemberSince)

Usullari
Ota-ona sinfidan meros:




ommaviy bekor qilish to'plamiDiscount() ommaviy double getDiscount() public void displayMemInfo()
Olingan sinfda bekor qilingan:
umumiy bekor hisoblangan yillik to'lov()
Keyin meros paketiga yana bir sinf qo'shiladi -
VIPMember. Bu sinf ham a'zodan meros bo'lib qoladi. VIPMember nomli inheritancedemo paketiga yangi sinf
qo'shing . Yaratilgan kodni quyidagi bilan almashtiring:
paket merosi demosi;
umumiy sinf VIPMember a'zoni kengaytiradi {
ommaviy VIPMember(String pName, int pMemberID, int
pMemberSince)
{
super(pName, pMemberID, pMemberSince); System.out.println("Child Constructor with
3 parametr");
}

@Override


umumiy bekor hisoblangan yillik to'lov()
{
yillik to'lov = (1-0,01*getDiscount())*1200;
}
}
Sinfda bitta konstruktor (3 ta parametr bilan) va bitta accountAnnualFee() usuli mavjud. hisoblash usuli
8.1. Meros 151
AnnualFee() annualFee() usulidan yillik to'lovni hisoblash uchun boshqa formuladan foydalanadi
NormalMember sinfida . Ikki usul mavjud ekan, bir xil nomga
(va imzoga) ega bo'lishi mumkin turli sinflarda.

VIPMember quyidagi komponentlarni o'z ichiga oladi:


dalalar

Ota-ona sinfidan meros:
public String Welcome = "ABC Fitnessga xush kelibsiz";
himoyalangan ikki barobar yillik to'lov

Konstruktorlar


ommaviy VIPMember(String pName, int pMemberID, int
pMemberSince)

Usullari
Ota-ona sinfidan meros:




ommaviy bekor qilish to'plamiDiscount() ommaviy double getDiscount() public void displayMemInfo()

Olingan sinfda bekor qilingan:


umumiy bekor hisoblangan yillik to'lov()

      1. MAIN() METOD

Barcha uchta kerakli sinf tayyor, siz asosiy () usulni yozishga o'tishingiz mumkin. Faylga o'tish
InheritanceDemo.java faylini yarating va main() usuliga quyidagi ikkita qatorni qo'shing :
152 8 -bob. Obyektga yo‘naltirilgan dasturlash

NormalMember mem1 = new NormalMember("Jeyms", 1, 2010); VIPMember a'zosi2 = yangi VIPMember ("Andy", 2, 2011);

Bu erda biz ikkita hosila sinfining ikkita ob'ektini yaratamiz


boyqushlar.


mem1 konstruktor tomonidan NormalMember sinfidan 3 ta parametr bilan yaratilgan .


mem2 konstruktor tomonidan VIPMember sinfidan 3 ta parametr bilan yaratilgan .




Yillik to'lovni hisoblash uchun tegishli sinflarning accountAnnualFee() usullari qo'llaniladi
har bir tashrif buyuruvchi:

mem1.calculateAnnualFee(); mem2.calculateAnnualFee();


mem1 NormalMember sinfining namunasi bo'lganligi sababli, ushbu sinfdan accountAnnualFee () usuli bajariladi. Shunday qilib, mem1 uchun yillik to'lov 100
+ 12 × 30 = 460 ni tashkil qiladi. mem2 misoli uchun u 1200 bo'ladi, chunki bu misol VIPMember sinfidagi usuldan foydalanadi.
Nihoyat, ekranda ma'lumotlarni ko'rsatish uchun ota- klassning (A'zo) displayMemberInfo() usuli qo'llaniladi . Buning uchun quyidagi buyruqlar bajariladi:
mem1.displayMemInfo(); mem2.displayMemInfo();

displayMemberInfo() usuli ota-klassga tegishli bo'lganligi va umumiy deb e'lon qilinganligi sababli, bu usul mem1 va mem2 tomonidan meros bo'lib , unga main() usulidan foydalanish imkonini beradi .



    1. Meros 153

Dasturni ishga tushirganingizda, siz quyidagilarni olasiz
natija:

3 ta parametrli ota-konstruktor 3 ta parametrli bola konstruktor 3 ta parametrli ota-konstruktor


3 ta parametrli bola konstruktor A'zo nomi: Jeyms
A'zo identifikatori: 1 2010 yildan beri a'zo Yillik to'lov: 460,0
A'zo nomi: Andy
A'zo identifikatori: 2 2011 yildan beri a'zo Yillik to'lov: 1200,0

Endi mem1 uchun yillik to'lovga chegirma qo'llashga harakat qilaylik . Chegirma ota-klassning shaxsiy maydonida saqlanganligi sababli , biz uni buyruq bilan o'zgartira olmaymiz


quyidagi shakl:

mem1.discount = 100;


Buning o'rniga siz setDis count() usulidan foydalanishingiz kerak. Buning uchun main() usuliga quyidagi qatorni qo'shing:


mem1.setDiscount();

Keyin chegirma qo'llanilgandan keyin yillik to'lovni qayta hisoblash uchun quyidagi buyruqlarni kiriting va ma'lumotni ko'rsating:


mem1.calculateAnnualFee(); mem1.displayMemInfo();


Dasturni qayta ishga tushiring. So'ralganda, "abcd" parolini va chegirma uchun 30 qiymatini kiriting. Asl chiqishga quyidagi qatorlar qo'shiladi:


154 8 -bob. Obyektga yo‘naltirilgan dasturlash





Iltimos, administrator parolini kiriting: abcd Iltimos, chegirmani kiriting: 30
A'zo nomi: Jeyms A'zo identifikatori: 1 2010 yildan beri a'zo Yillik to'lov: 322,0

30% chegirma qo'llanilgandan so'ng, dan yillik to'lov


322 qo'yadi .

    1. POLÿMORFIZM

Shunday qilib, biz meros qanday ishlashiga misolni ko'rib chiqdik . Keling, meros bilan chambarchas bog'liq


bo'lgan boshqa mavzuga , polimorfizm tushunchasiga o'tamiz.
Ushbu atama dasturning ob'ekt turiga qarab to'g'ri usulni tanlash qobiliyatini anglatadi.
ijro etilish bosqichida.

Polimorfizmni aniq misol bilan tushuntirish eng oson. Keling, yuqoridagi fitnes klubi misolini kengaytiraylik .


Birinchidan, oldingi main() usulidagi barcha kodlarni olib tashlang yoki izohlang va quyidagi qatorlarni kiriting:


A'zo[] clubA'zolar = yangi a'zo[6];
clubMembers[0] = new NormalMember("Jeyms", 1, 2010);
clubMembers[1] = new NormalMember("Andy", 2, 2011);
clubMembers[2] = new NormalMember("Bill", 3, 2011);
clubMembers[3] = new VIPMember("Kerol", 4, 2012);
clubMembers[4] = new VIPMember("Evelin", 5, 2012);
clubMembers[5] = yangi a'zo("Yvonne", 6, 2013);

    1. Polimorfizm 155


Bu 6 ta tashrif buyuruvchi qo'shilgan Ro'yxatdan ob'ektlari qatorini e'lon qiladi . Dastlabki uchta tashrif buyuruvchilar NormalMember obyektlari, keyingi
ikkitasi VIPMember obyektlari va oxirgisi VIPMember obyektlari.
A'zolar sinfi .
clubMembers massivi Member tipidagi massiv sifatida e'lon
qilingan bo'lsa-da , uning elementlariga NormalMember va VIPMember sinflari ob'ektlarini belgilashingiz mumkin , chunki ular Member dan olingan sinflardir. Siz NormalMember va
VIPMember obyektlari uchun alohida massivlarni e'lon qilishingiz shart emas .
Keyin kengaytirilgan for loop har bir tashrif buyuruvchi uchun yillik to'lovni hisoblash va ma'lumotni chop etish uchun ishlatiladi .

Buning uchun quyidagi ko'rinishdagi halqa yaratiladi:


uchun (A'zo m : clubMembers)
{
m.calculateAnnualFee(); m.displayMemInfo();
}

Dasturni saqlang va ishga tushiring. Siz birinchi uchta tashrif buyuruvchilar uchun yillik to'lov (NormalMember ) $460, keyingi ikkita (VIPMember) $1200 va oxirgisi $0 ekanligini ko'rasiz .


Polimorfizm shunday ishlaydi. Ishlash vaqtida dastur clubMembers ning dastlabki uchta elementi ekanligini aniqlaydi NormalMember turiga kiradi va o'sha sinfdan accountAnnualFee ()


usulini bajaring . Dastur shuningdek
keyingi ikki a'zo VIPMember tipida ekanligini aniqlaydi va shu sinfning usulini bajaradi.
156 8 -bob. Obyektga yo‘naltirilgan dasturlash

Nihoyat, dastur oxirgi a'zoning Member tipida ekanligini aniqlaydi va asosiy usulni bajaradi
sinf.

ClubMembers ning dastlabki uchta elementi NormalMember ish vaqti turiga, keyingi ikkitasi VIPMember ish vaqti turiga, oxirgi element esa Member ish vaqti turiga tegishli.


Polimorfizm shunchaki, barcha ob'ektlar a'zolar turi sifatida e'lon qilingan bo'lsa-da , dastur ishga tushirish vaqtida a'zo turiga qarab to'g'ri accountAnnualFee() usulidan foydalanish uchun etarlicha aqlli ekanligini anglatadi.





    1. REFERAT DARS VA USULLARI

Keling , Java tilidagi ikkita maxsus turdagi "ota-onalar sinflari" - abstrakt sinflar va interfeyslarni muhokama qilishga o'tamiz.
Keling, abstrakt darslardan boshlaylik.

Download 1,09 Mb.

Do'stlaringiz bilan baham:
1   ...   13   14   15   16   17   18   19   20   ...   24




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©www.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