А. А. Медатов, М. К. Абдувохидов, О. А. Маматқулов


Объектга йўналтирилган программалаш(ОЙП)


Download 0.79 Mb.
bet55/57
Sana20.12.2022
Hajmi0.79 Mb.
#1035125
1   ...   49   50   51   52   53   54   55   56   57
Bog'liq
Turbo Pascal услубий кулланма янги

Объектга йўналтирилган программалаш(ОЙП)


Режа:
1. Инкапсуляция.
2. Ворислик.
3. Полиморфизм.
ОЙП асосида битта структура(тузилишда)да берилганларни ва улар устида бажариладиган амалларни бирлаштириш ғояси ётади. ОЙП учта асосий тушунчага таянади: инкапсуляция, ворислик ва полиморфизм.
1. Инкапсуляция - берилганлар ва шу берилганлар билан ишлайдиган процедура ва функциялар аралашмасини хосил қилишдир. Натижада берилганлар янги тури - объект хосил бўлади.
2. Ворислик - аниқланган объектлардан фойдаланган ҳолда улардан келиб чиқувчи объектлар иерархиясини хосил қилиш. Ҳар бир ворис ўз аждодидаги берилганлар тавсифи ва уларни қайта ишловчи усуллар (методлар) ўзлаштиради.
3. Полиморфизм- ворислик иерархиясидаги барча объектларга бир вақтда кўлланадиган, бир хил номдаги амалларни (процедура ва функциялар) аниқлаш имкониятдир. Бунда ҳар бир объект бу амални ўз устида бажарилишида ўзига хосликларини буюртма бериши мумкин.
ОЙП мураккаб программаларни ёзишни соддалаштиради ва бу жараёнга ихчамлик хусусиятини беради. ОЙПнинг асосий афзаллиги шундаки, программа қўллаш сохасини ўзгартиришга программани ўзгартирмасдан фақат объектлар иерархиясига янги ўзгартиришлар (сатхлар қўшиш) орқали эришиш мумкин.
Объект - таркибида ўзаро боғланган ҳар хил турдаги ўзгарувчилар(берилмалар майдони) ва уларни қайта ишлайдиган процедура ва функциялардан(методлар) ташкил топган тузилмадир.
Объект турини аниқлаш учун "Object" махсус сўз аниқланган ва у қуйидагича эълон қилинади:
Type
<объект номи>=Object
<Берилганлар майдони>;
<Методлар сарлавхалари>;
End;
<Объект номи> билан аниқланган ҳар бир ўзгарувчи шу тур нусхаси дейилади.
Мисол. Белги ва маълумотлар билан ишлайдиган объект.
ObjPos=Object
Line,Col:Word;
Procedure Init(Init_Line,Init_Col:Word);
Function GetLine:Word;{Line қийматини қабул қилиш}
Function GetCol:Word; {Col қийматини қабул қилиш}
Procedure Print;
End;
Procedure 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 Gol: Word;
Bigin
Get Gol:=Gol
End;
Procedure ObjPos.Print;
Bigin
Write (#7);
End;
...
Var
ObjPos Var:ObjPos; (объект нусхасини эълон қилиш)
...
Begin
...
ObjPos Var.Init(5,15);(объект учун бошланғич қийматлар бериш)
...
End;

Обеъктни эълон қилишда методларнинг сарлавхалари ёзилади. Процедура ва функциялар эълони програма эълон қисмининг бошқа бўлагида бўлиши мумкин. Объект майдонларига мурожат ёзув (Record) майдонларига мурожат билан бир хил ("."- нукта ва With оператори орқали). Лекин объект берилганларга қуйидагича мурожаат ижобий баҳоланмайди:


Obj Pos Var.Line:=5; ObjPos Var.Col:=15;
Умуман ОЙП да объект берилганларига мурожаат фақат методлар орқали амалга оширилади.
Объектларни эълон қилишда маълум бир талаблар бажарилиши керак:
-Объект тури асосий дастурнинг (модулларнинг) Type бўлимида эълон қилиниши мумкин эмас: Кисм программаларида локал (махаллий) объектларни эълон қилиш мумкин эмас:
-Объект турини аниқлашда берилганлар майдонни методлар майдонидан олдин келиш керак:
- Объект компонентаси сифатида файл келиши мумкин эмас, ва аксинча файл "объект" туридаги компонентага эга бўлиш мумкин эмас.
ObjPos объект орқали матн экрандаги бирорта белги ҳолати аниқланади. Энди белгини ўзини аниқловчи ва унинг устида маълум бир иш бажарувчи ObjSym объектни аниқлайлик.
Uses Crt;
Type
ObjSym=Object
Line,Col:Word;
Sym:Char;
Procedure Init (Init Line,Init Col:Word;Init
Sym:Char);
Function GetLine:Word;
Function GetCol:Word;
Prroceddure Print
End;
Procedure ObjSym.Init (Init line Col:Word);
Begin
Line:=Init Line; Col:=Init Col; Sym:=Init Sym;
End;
Function ObjSym.Get Line:Word;
Begin
Get Line:=Line
End;
Function ObjSym.Get Col:Word;
Begin
Get Col:=Col
End;
Procedure ObjSym.print;
Begin
Crt.GotoXY(Col,Line); Write(Sym);
End;

Агар бу объектни аниқланишига эътибор берадиган бўлсак унда ObjPos объектидаги берилганлар ва Get_line, Get_col функцияларидан фойдаланилган. Sym вап Print компоненталари янгидан қўшилган ва Init процедураси қайтадан ёзилган. Кўриниб турибдики, ObjSym объекти ObjPos объекти хусусиятларини ворислик қилиб олган. Умуман айтганда, ОЙПда ворислик - бу объектларнинг оддий тузилишдан мураккаб тузилишга томон объект хусусиятларини олиб ўтиши ва ривожланишидир.


Ворисликни аниқланиши
Type
<Ворис объект номи>=Object(<Аждод объект номи>)
<Ворис объект берилганлар майдони>
<Ворис объект методлари>
End;
Uses Crt;
{бу ерда ObjPos объект эълони бўлиши керак}
Type
ObjSym=Object(ObjPos)
Sym:Char;
Procedure Init(Init_Line,Init_Col:Word;Init_Sym:Char)
Procdure Print;
End;
Procedure ObjSym.Init;
Begin
ObjPos.Init(Init_Line,Init_Col);
Sym:=Init_Sym;
End;
Procedure ObjSym.Print;
Begin
Crt.GotoXY(Col,Line);
Write(Sym);
End;
Бу мисолдан кўриниб турибдики, Init процедураси Line, Col ва ObjPos.Init компоненталарини ворислик бўйича ишлатмокда. Объектларни аниқлашни худди шу йўсинда давом эттириб белгини, унинг ранглар атрибути билан бирга аниқловчи объектни аниқлашимиз мумкин. Бунда янги объект ObjSym вориси бўлиб, унга керакли майдонлар ва атрибут билан ишловчи методни қўшиш керак бўлади. Хосил бўлган объект ObjPos га нисбатан учинчи босқич вориси бўлади.
ObjPosга нисбатан ворислик босқичи ObjSym билан бир босқичда бўлган объектларни ҳам яратиш мумкин. Мисол учун экранга сатр чиқарадиган объект яратмокчи бўлсак, у ObjPos вориси бўлади:
Type
ObjStr=Object(ObjPos)
Substr:String;
Procedure Init(Init_Line,Init_Col:Word;Init_Str:String);
Procedure Print;
End;
Procedure ObjStr.Init;
Begin
ObjPos.Init(Init_Line,Init_Col);
Substr:=Init_Str;
End;
Procedure ObjStr.Print;
Begin
Crt.GotoXY(Col,Line);
Write(Substr);
End;
Ворисликда хосил бўлувчи янги турларда аждод объектлардаги идентификаторларни қайтадан эълон қилиш мумкин эмас. Лекин бу чекланиш методларга тааллуқли эмас, яъни ҳар бир ворис объект юқоридаги аниқланган методларни янгидан эълон қилиши мумкин (ўзига хосликдан келиб чиққан ҳолда). Бунга мисол сифатида Print методини кўрсатишимиз мумкин. Бу ҳолларда ҳар бир объект учун ўз методи (Print) ишлайди. Ворисликда ҳам объектлар иерархиясидаги охирги аниқланган метод ишлайди.


Мустахкамлаш учун саволлар:
1. Object ва Record турлари ўртасидаги фарқ нимада?
2. ОЙПнинг учта асосий тушунчаси нима?


Таянч тушунчалар: ОЙП, инкапсуляция, ворислик, полиморфизм

Download 0.79 Mb.

Do'stlaringiz bilan baham:
1   ...   49   50   51   52   53   54   55   56   57




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