Informatika va programmalash



Download 1,53 Mb.
bet63/74
Sana13.07.2022
Hajmi1,53 Mb.
#786339
1   ...   59   60   61   62   63   64   65   66   ...   74
Bog'liq
Informatika va programmalash

Statik metodlar. Metodlarning bunday ishlanishiga sabab, ularga mos keluvchi ko‘rsatgichlar kompilatsiya paytida aniqlanadi. Kompilator tomonidan statik metodlar qayta ishlovi xuddi statik o‘zgaruvchilar ustida bajariladigan kabi amalga oshiriladi.
Qandaydir iyerarxiyani hosil qiluvchi obyektlar metodlari ustidagi kompilator bajaradigan ishi quyidagilardan iborat:

  1. Metod chaqirilishida kompilator shu metodni chaqiruvchi obyekt turini aniqlaydi.

  2. Tur aniqlangandan keyin kompilator shu obyekt turi chegarasida metodni izlaydi. Metodni topgandan keyin unga chaqiruvni amalga oshiradi.

  3. Agar obyekt turi chegarasida metod topilmasa, kompilator shu turni hosil qilgan bevosita ajdod obyektdan metodni izlaydi va topilgan holda unga bog‘lanish o‘rnatadi.

  4. Agar bevosita ajdodda ham metod topilmasa, undan yuqoridagi ajdod obyektga o‘tiladi va hokazo. Hech bir obyektda metod topilmasa, xato haqida xabar beriladi.

Bu amallar bajarilishidan quyidagi muhim xossa kelib chiqadi: agar ajdod obyektlardagi metod boshqa metodlarga murojaat qilinadigan bo‘lsa, garchi avlod obyekt ham shunday metodlarga ega bo‘lsa ham aynan shu ajdod obyekt metodlari ishlaydi.


Yuqoridagi misolga nisbatan kompilator 1 va 2 amallari qo‘llaniladi va har qanday murojaatda ham ObjPos.Print metodi amal qiladi. Bu misolni to‘g‘ri ishlashi uchun Print metodi virtual bo‘lishi kerak.
Virtual metodlar. To‘la ma’noda obyektlar polimorfizmi virtual metodlar yordamida amalga oshiriladi. Obyekt turini aniqlashda metod sarlavhasidan keyin Virtual so‘zini qo‘yish bilan aniqlanadi.
Procedure (
); Virtual;
Function (
):; Virtual;
Virtual metodlar aniqlanishida quyidagi shartlar bajarilishi kerak.

  1. Ajdod obyekt turida birorta metod virtual qilib aniqlangan bo‘lsa, shu turdan hosil bo‘luvchi barcha obyektlarda ham shu nomdagi metodlar virtual bo‘lishi kerak, ya’ni virtual metod keyinchalik statik deb e’lon qilinishi mumkin emas.

  2. Agar virtual metod avlod obyektlarda qayta aniqlanadigan bo‘lsa, bu metod nomi va formal parametrlar, ularning joylashuvi o‘zgarmasligi kerak. Agar virtual metod funksiya bo‘lsa, uning qiymatini turi o‘zgarmasligi kerak.

  3. Obyekt turida obyektni initsializatsiya qiluvchi metod bo‘lishi kerak. Bu metod boshqa metodlardan e’lonida Procedure so‘zi o‘rnida Constructor so‘zini ishlatilishi bilan farq qiladi. Bu kalit so‘z virtual metodlar uchun boshlang‘ich aniqlash ishlarini amalga oshiradi. Tarkibida virtual metodga ega obyekt albatta konstruktor bo‘lishi kerak. Konstruktor virtual metodlardan oldin chaqirilishi shart, aks holda noaniq holat yuzaga keladi.

O‘z ichida virtual metodi bor obyekt turidagi har bir o‘zgaruvchi alohida o‘z konstruktori bilan initsializatsiya qilinishi kerak. Har bir obyekt turi o‘zining “virtual metodlar jadvali”ga (VMT) ega bo‘ladi. Bu jadvalda obyekt turi, har bir virtual protsedura va funksiyalar kodlarining adreslari saqlanadi. Birorta obyekt turidagi o‘zgaruvchi tomonidan virtual metod chaqirilganda bu metod adresi VMT jadvalidan aniqlanadi.


Konstruktorning vazifasi obyekt turidagi har bir o‘zgaruvchi bilan VMT jadvalini bog‘lashdir. Har bir obyekt uchun VMT yagona bo‘ladi. Obyektda bir nechta konstruktor e’lon qilingan bo‘lishi mumkin. Konstruktor statik bo‘lishi kerak, uning ichidagi chaqiriluvchi metodlar virtual bo‘lishi mumkin.
Protsedura va funksiyalar polimorf obyektni uzatganda (virtual metodi bor), u holda undagi virtual metodlar adreslari mos obyektlar orqali VMT jadvaliga uzatiladi. Bu hol obyekt turini e’lon qilingandagi metodni bajarilishini kafolatlaydi. Aniqroq qilib aytadigan bo‘lsak, agar Z obyekt Y obyektdan virtual metodlarni vorislik orqali olsa va bu metoddagi boshqa metodlarga murojaat bo‘ladigan bo‘lsa, oxirgi metodlar Z obyektidan olinadi (statik metodlarda Y olinar edi).
Endi oxirgi misolni qaytadan yozib chiqamiz.

Type
ObjPos  Object


Line, Col : Word;
Constructor Init (Init_Line,Init_Col : Word);
Function GetLine: Word; {Line qiymatini qabul qilish}
Function GetCol: Word; {Col qiymatini qabul qilish}
Procedure Print;Virtual;
End;
Constructor ObjPos.Init(Init_Line, Init_Col : Word);
Begin
Line :  Init_Line;
Col : Init_Col;
End;

Function ObjPos.Get_Line : Word;


Begin
Get_Line : Line
End;
Function ObjPos.Get_Col : Word;
Begin
Get_Col :Col
End;
Procedure ObjPos.Print;
Begin
Write(#7);
End;
Type
ObjSym = Object (ObjPos)
Sym : Char;
Constructor Init (Init_Line, Init_Col : Word; Init_Sym: Char);
Procedure Print;
End;
Constructor ObjSym.Init;
Begin
ObjPos.Init(Init_Line, Init_Col);
Sym : =Init_Sym;
End;
Procedure ObjSym.Print;
Begin
Crt.GotoXY(Col,Line);
Write(Sym);
End;
Type
ObjStr = Object (ObjPos)
Substr : String;
Constructor Init (Init_Line, Init_Col : Word; Init_Str: String);
Procedure Print; Virtual;
End;
Constructor ObjStr.Init;
Begin
ObjPos.Init(Init_Line, Init_Col);
Substr : = Init_Str;
End;
Procedure ObjStr.Print;
Begin
Crt.GotoXY(Col,Line);
Write(Substr);
End;
Procedure PrintObj( Var Obj : ObjPos); {polimorf obyektni e’lon qilish}
Begin
Obj.Print
End;
Var
ObjSymVar : ObjSym;
ObjStrVar : ObjStr;
Begin
ObjSymVar.Init(10,10,’*’);
ObjStrVar.Init(20,20,’Polimorflik xossasini namoyon qilish’);
PrintObj(ObjStrVar);
PrintObj(ObjSymVar);
...
End.

Xulosa sifatida shuni qayd qilish mumkinki, hozirgi paytda keng rivojlanayotgan vizual programmalash tizimlarining asosida OYP yotadi va programmalashning bu usuli tobora kengaymoqda.



Download 1,53 Mb.

Do'stlaringiz bilan baham:
1   ...   59   60   61   62   63   64   65   66   ...   74




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