Объект қийматларини бериш. Объектларни ворислик хусусиятидан келиб чиққан ҳолда объект туридаги ўзгарувчилар учун қиймат беришнинг қуйидаги қоидаси аниқланган. Объект ўзгарувчиларга фақат ўз туридаги ўзгарувчи қийматини бериб қолмасдан, балки шу ўзгарувчи туридан ҳосил бўлувчи турдаги ўзгарувчилар қийматларини бериш мумкин. Худди шу қоида процедура ва функциялар учун уларнинг «объект» туридаги параметрлар қийматини беришда амал қилади.
Мисол учун
Var
ObjPosVar : ObjPos;
ObjSymVar : ObjSym;
...
ObjPosVar : ObjSymVar;
ObjSymVar қийматларини ObjPosVar га ўтказиш учун юқоридаги қиймат бериш етарли. Бунда ObjPos нинг га ворислик билан ўтган майдонлари мос қиймат билан тўлдирилади. Умуман айтганда, объектлар учун қиймат бериш
Аждод ß Ворис
схема билан амалга ошади. Бу ҳолда чап томондаги ўзгарувчининг барча майдонларининг қиймат олиши кафолатланади, акс ҳолда ворисдаги «ортиқча» майдонлар қиймати аниқланмай қолиши мумкин.
Объект туридаги ўзгарувчилар динамик бўлиши мумкин, яъни улар кўрсатгич кўриниши сифатида аниқланган бўлиши мумкин.
Var
ObjPosVarPtr: ^ ObjPos;
ObjSymVarPtr : ^ ObjSym;
Бу ерда ҳам динамик объектлар билан ишлаш процедуралари ва қиймат беришнинг юқоридаги қоида амал қилади.
Назорат саволлари
Object ва Record турлари ўртасидаги фарқ нимада?
ОЙПнинг учта асосий тушунчаси нима?
Объектни аниқлашда нима учун файл туридаги компонента бўлиши мумкин эмас?
Объектда аниқланган ўзгарувчига қиймат бериш қандай амалга оширилади?
§ 3.22. ОЙП да ворислик ва полиморфизм.
ОЙПда полиморфизм. Объектларга мос турдаги қийматларни беришдаги турлар мослашуви процедура ва функцияларга параметрларни беришда ҳам сақланиб қолади. Объект туридаги формал параметрга ўз туридаги ёки шу турдан ҳосил бўлган турдаги фактик параметрларни бериш мумкин. Объектларнинг бундай мувофиқлашув хусусиятига полиморфизм дейилади. Мисол тариқасида экранга белги ёки сатрни чоп қилувчи объектларни кўрамиз.
...
{бу ерда ObjPOs,ObjSym ва ObjStr объектлар эълони бўлади}
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.
Биз олдиндан барча объектларда PRINT методини аниқлаган эдик. Полиморф объектни аниқлайдиган процедурада фақат битта ёзуви бор. Лекин ташқи кўриниши бўйича тўғри бўлса ҳам, бу мисол тўғри ишламайди. Фактик параметр тури қандай бўлишига қарамасдан фақат OBJPOS объектидаги PRINT ишлайди, чунки объектларда статик методлар ишлатилган.