Dote = object
a., b:integer;
procedure Init(x,y:integer);
procedure Show;
procedure Hide;
procedure Move(Da,Db:integer);
end;
{- - - - - - - - - - - - -}
Procedure Dot.Init;
Begin
a:=x; b:=y;
end;
{- - - - - - - - - - - - -}
Show;_Begin_PutPixel_(a,b,white);_end;_{-_-_-_-_-_-_-_-_-_-_-_-_-}_Procedure_Dot.Hide;_Begin'>Procedure Dot.Show;
Begin
PutPixel (a,b,white);
end;
{- - - - - - - - - - - - -}
Procedure Dot.Hide;
Begin
PutPixel (a,b,black);
end;
{- - - - - - - - - - - - -}
Procedure Dot.Move;
Begin
Hide;
a:=a+Da; b:=b+Db;
Show;
End.
Бұл мысалда объект 4 өрістен тұрады. Init әдісі объектіні инициализациялайды,яғни нүктеге бастапқы мән береді. Show және Hide әдістері экрандағы нүктені «жандырады» және «сөндіреді». Move әдісі экандағы нүктенің орнын ауыстырады.Объектілік тип жарияланғаннан кейін осы типтік айнымалылардыжасауға болады немесе НБП терминалогиясы бойынша объект экземплярын жасаймыз.Олар айнымалылар жасау бөлімінде жариияланатын статистикалық айнымалылар New стандартты процедура арқылы жасалған динамикалық айнымалылар болуы мүмкін.
Var Dot1: Dot;
Мұнда Dot типіне жататын Dot1 айнымалысы жарияланған.Объект экземпляры жасалынғаннан кейін оның өрістерінен әдістерге қатынас жасай аламыз.Объект өрісіне қандай да бір стандартты ішкі программаны қолдану үшін оның құрылымдық атауын қолдану жеткілікті – объект идентификаторы мен нүкте арқылы өріс идентификаторын көрсету.
НБП- да объект өрістерімен жұмыс істеу кезінде тек оның әдістері қолданылады.
Dot1:Init(100,100);
Dot1:Show: Dot1.Move(50,50);
Жазбаларға қолданылатын сияқты, объектілерге де with операторын қолдануға болады.
With Dot1 do begin
Init (100,100);
Show;
Move (50,50);
End.
Жоғарыда көрсетілген операторлар тізбегі бірдей.Төменде жоғарыда қарастырылған мысалдардың толық программасы көрсетілген.Бұл программа экранда нүктені бейнелейді және де бейнеленген нүктені бағдарша пернелердің көмегімен 4 бағытта жылжытуға болады.
Program object;
Uses crt; graph;
Type
Dot=object;
a,b:integer;
procedure Init(x,y:integer);
procedure Show;
procedure Hide;
procedure Move(Da,Db:integer);
{-------------------------------------}
Procedure Dot.Init;
Begin
a:=x; b:=y;
end;
{-------------------------------------}
Procedure Dot.Show;
Begin
PutPixel (a,b,white);
End;
{--------------------------------------}
Procedure Dot.Hide;
Begin
PutPixel(a,b,0);
End;
{--------------------------------------}
Procedure Dot.Move;
Begin
Hide;
a:=a+Da; b:=b+Db;
Show;
End;
Var
i,j,k,Err:integer;
a:char;
Dot1:Dot;
{-------------------------------------}
Begin
i:=detect;
InitGraph(I,j,’ ‘);
Err:=GraphResult;
If Err<>gr OK then
Writeln(Graph Error Msg(Err))
Else begin
Dot1.Init(GetMax x div 2, GetMax y div 2);
Dot1.Show;
While KeyPressed do a:=ReadKey;
Repeat
Begin
a:=ReadKey;
case ord(a) of
72:Dot1; Move(0,-5)
80:Dot1; Move(0,5)
77:Dot1; Move(5,0)
75:Dot1; Move(5,0)
End;
End;
Until a=chr(27)
End;
End.
Программада Dot объектісі жарияланды.Оның 2 өрісі, 4 әдісі бар.Ары қарай Dot1 объект экземпляры басқа айнымалылар сияқты жарияланды.Программа денесі графикалық режимгеөтуді жүзеге асыратын оператордан басталады.Содан кейін Repeat операторы белгілі пернені басуды анықтайды.Case операторы 4 нұсқаудан тұрады, олар 4 бағдарша пернелеріне сәйкес келеді.Нұсқалардың әрбіреуі нақты параметрлері бар Move әдісін шақырады, бұл әдіс нүктені қажетті бағытта 5 пиксельге жылжытады. Repeat операторы арқылы ұйымдастырылған циклдың тоқтау шарты 27 Scan кодын беретін пернесінің басылуы болып табылады.
Мұрагерлеу
Айталық, нүкте объектісінен басқа шеңбер объектісі қатысатын программа құрайық.Әрине бұл жаңа типтің сипатталуын Dot типі сияқты басынан бастауға болады.Дегенмен, бұл жаңа шеңбер – типтің Dot типімен ортақ өрістері және әдістері бар.Яғни, шеңбер не нүкте сияқты оның центрін анықтайтын a,b координатасымен сипатталады.Дегенмен,құрылатын объектіге шеңбердің радиусын беретін өріс қосу керек.Ал әдістерге келетін болсақ, жаңа Ring типіне Move әдісі қолданылады, нүктенің орнын ауыстыруы мен экранда шеңбердің ауысуы бірдей жүзеге асады.Ал Init,Show және Hide әдістерін жаңадан жасауға тура келеді.Сонымен, жаңа Ring типі Dot типінің кейбір әдістерін қайталайды.Ендеше бар типтің негізінде оған жаңа өрістер мен әдістерді қоса отырып, жаңа тип жасауға бола ма?Бұл мұрагерлеу деп аталатын объектілік типтердің қасиеттерінің арқасында жүзеге асады.Мәселе мұрагерлеу туралы болғандықтан генеологиялық терминологияға сәйкес жаңа объектіні жасауға негіз болатын бар типті ата-бабасы немесе ата-аналық тип деп атайды.Ал құрылатын объектіні ұрпағы деп атайды.Ұрпақ автоматты түрде өхінің ата-бабасының барлық өрістері мен әдістерін мұраға алады.Мұрагерлеу қасиеті НБП-да қолданылады.Оның арқасында бар объектінің негізінде көптеген жаңа объектілер құруға болады.Осы объектілерге негіздей отырып,боъектілерді көптеп кұра беруге болады және де әрбір объектінің көп ұрпағы болуы мүмкін, бірақ оның ата-бабасы біреу ғана болады.Ал енді Dot және Ring типтеріне оралайық.Ұрпақ типінң сипаттауында ата-аналық типтің атауы көрсетілуі керек.
Type
Ring=object(Dot);
Rad=integer;
End;
Ring типінің сипатталуында шеңбердің радиусын анықтайтын Rad өрісі бар.Бұл өріс dot типінде болмаған және де Ring типі өзінің ата-бабасының өрістерін мұраға алады(нүкте координаталары a,b). Егер Ring типінің сипаттамасын сәйкес әдістермен толықтырсақ,төмендегідей болады:
Ring=object(Dot);
Rad:integer;
Procedure Init(x,y,r:integer );
Procedure Show;
Procedure Hide;
End;
{------------------------}
Procedure RingInit;
Begin
a:=x; b:=y; Rad:=r;
end;
{------------------------}
Procedure RingShow;
Begin
SetColor (white);
Circle (a,b,Rad);
End;
{------------------------}
Procedure RingHide;
Begin
SetColor (black);
Circle(a,b,Rad);
End;
Осы жерден ұрпақ объектісінің әдістері ата-ана объектісінің бірдей атаулы әдістермен алмастырылатынын көруге болады.Басқа сөзбен айтқанда, егер Ring.Move әдісіне қатынас жасалса, жүйе алдымен Ring объектісінің сипаттамасында осындай атаудың бар-жоқтығын анықтайды.Егер бар болса, осы жаңа әдіс қолданылады.Егер жоқ болса,ата- бабасынан мұраға алған әдісті қолданылады.
Ескерту! «Тек әдістерді ғана қайта анықтауға болады.Ал ұрпақ объектісіндегі өріс атаулары ата- анасының объектісінлегі өріс атауларымен сәйкес келмеуі тиіс».
Ұрпақ объектісі жарияланғаннан кейін оның өрістерімен жұмыс істеу үшін оның экземплярын жасауға болады.
Var Ring1: Ring.
Достарыңызбен бөлісу: |