Збекистон миллий университети



Download 1,98 Mb.
bet46/56
Sana23.06.2022
Hajmi1,98 Mb.
#694633
TuriПрограмма
1   ...   42   43   44   45   46   47   48   49   ...   56
Bog'liq
inf va dast-oquv-qollanma

Статик методлар. Методларнинг бундай ишланишига сабаб, уларга мос келувчи кўрсатгичлар компиляция пайтида аниқланади. Компилятор томонидан статик методлар қайта ишлови худди статик ўзгарувчилар устида бажариладиган каби амалга оширилади.
Қандайдир иерархияни ҳосил қилувчи объектлар методлари устидаги компилятор бажарадиган иши қуйидагилардан иборат:

  1. Метод чақирилишида компилятор шу методни чақирувчи объект турини аниқлайди.

  2. Тур аниқлангандан кейин компилятор шу объект тури чегарасида методни излайди. Методни топгандан кейин унга чақирувни амалга оширади.

  3. Агар объект тури чегарасида метод топилмаса, компилятор шу турни ҳосил қилган бевосита аждод объектдан методни излайди ва топилган ҳолда унга боғланиш ўрнатади.

  4. Агар бевосита аждодда ҳам метод топилмаса, ундан юқоридаги аждод объектга ўтилади ва хоказо. Ҳеч бир объектда метод топилмаса, хато ҳақида хабар берилади.

Бу амаллар бажарилишидан қуйидаги муҳим хосса келиб чиқади: агар аждод объектлардаги метод бошқа методларга мурожаат қилинадиган бўлса, гарчи авлод объект ҳам шундай методларга эга бўлса ҳам айнан шу аждод объект методлари ишлайди.


Юқоридаги мисолга нисбатан компилятор 1 ва 2 амаллари қўлланилади ва ҳар қандай мурожаатда хам ObjPos.Print методи амал қилади. Бу мисолни тўғри ишлаши учун Print методи виртуал бўлиши керак.
Виртуал методлар. Тўла маънода объектлар полиморфизми виртуал методлар ёрдамида амалга оширилади. Объект турини аниқлашда метод сарлавҳасидан кейин Virtual сўзини қўйиш билан аниқланади.
Procedure <метод номи>(<параметрлар рўйхати>); Virtual;
Function <метод номи>(<параметрлар рўйхати>):<қиймат тури>; Virtual;
Виртуал методлар аниқланишида қуйидаги шартлар бажарилиши керак.

  1. Аждод объект турида бирорта метод виртуал қилиб аниқланган бўлса, шу турдан ҳосил бўлувчи барча объектларда ҳам шу номдаги методлар виртуал бўлиши керак, яъни виртуал метод кейинчалик статик деб эълон қилиниши мумкин эмас.

  2. Агар виртуал метод авлод объектларда қайта аниқланадиган бўлса, бу метод номи ва формал параметрлар, уларнинг жойлашуви ўзгармаслиги керак. Агар виртуал метод функция бўлса, унинг қийматини тури ўзгармаслиги керак.

  3. Объект турида объектни инициализация қилувчи метод бўлиши керак. Бу метод бошқа методлардан эълонида Procedure сўзи ўрнида Constructor сўзини ишлатилиши билан фарқ қилади. Бу калит сўз виртуал методлар учун бошланғич аниқлаш ишларини амалга оширади. Таркибида виртуал методга эга объект албатта конструктор бўлиши керак. Конструктор виртуал методлардан олдин чақирилиши шарт, акс ҳолда ноаниқ ҳолат юзага келади.

Ўз ичида виртуал методи бор объект туридаги ҳар бир ўзгарувчи алоҳида ўз конструктори билан инициализация қилиниши керак. Ҳар бир объект тури ўзининг “виртуал методлар жадвали”га (VMT) эга бўлади. Бу жадвалда объект тури, ҳар бир виртуал процедура ва функциялар кодларининг адреслари сақланади. Бирорта объект туридаги ўзгарувчи томонидан виртуал метод чақирилганда бу метод адреси VMT жадвалидан аниқланади.


Конструкторнинг вазифаси объект туридаги ҳар бир ўзгарувчи билан VMT жадвалини боғлашдир. Ҳар бир объект учун VMT ягона бўлади. Объектда бир нечта конструктор эълон қилинган бўлиши мумкин. Конструктор статик бўлиши керак, унинг ичидаги чақирилувчи методлар виртуал бўлиши мумкин.
Процедура ва функциялар полиморф объектни узатганда (виртуал методи бор), у ҳолда ундаги виртуал методлар адреслари мос объектлар орқали VMT жадвалига узатилади. Бу ҳол объект турини эълон қилингандаги методни бажарилишини кафолатлайди. Аниқроқ қилиб айтадиган бўлсак, агар Z объект Y объектдан виртуал методларни ворислик орқали олса ва бу методдаги бошқа методларга мурожаат бўладиган бўлса, охирги методлар Z объектидан олинади (статик методларда Y олинар эди).
Энди охирги мисолни қайтадан ёзиб чиқамиз.
Type
ObjPos  Object
Line, Col : Word;
Constructor Init (Init_Line,Init_Col : Word);
Function GetLine: Word; {Line қийматини қабул қилиш}
Function GetCol: Word; {Col қийматини қабул қилиш}
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); {полиморф объектни эълон қилиш}
Begin
Obj.Print
End;
Var
ObjSymVar : ObjSym;
ObjStrVar : ObjStr;
Begin
ObjSymVar.Init(10,10,’*’);
ObjStrVar.Init(20,20,’Полиморфлик хоссасини намоён қилиш’);
PrintObj(ObjStrVar);
PrintObj(ObjSymVar);
...
End.

Хулоса сифатида шуни қайд қилиш мумкинки, ҳозирги пайтда кенг ривожланаётган визуал программалаш тизимларининг асосида ОЙП ётади ва программалашнинг бу усули тобора кенгаймоқда.





Download 1,98 Mb.

Do'stlaringiz bilan baham:
1   ...   42   43   44   45   46   47   48   49   ...   56




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