sonra gələn proseduralar istənilən proqrama açıqdır. Bu iki direktiv bir
obyekt daxilində istənilən
şəkildə növbələşə bilər. Onları istifadə etmədən proqramı belə də yazmaq olar.
type
tgraphobj=object
x,y:integer;
color:word;
constructor Init (ax,ay:integer; acolor:word);
procedure Draw(acolor:word); virtual;
procedure Show;
procedure Hide ;
procedure Moveto (dx,dy:integer);
end;
Sahələr adi dəyişənlərdən fərqlənmir. Metodlar isə Pascalın ənənəvi proseduraları da ola
bilər, xüsusi növ prosedur olan constructor və destructor da ola bilər. Konstruktorlar konkret obyekt
nümunəsi yaratmaq üçün nəzərdə tutulub. Çünki obyektlər verilənlər tipidir, yəni bir şablondur ki,
ona əsasən xeyli sayda obyekt tipli verilənlərin işçi nümunələrini yaratmaq olar. constructor
komplyatora xüsusi kod yaratmağı bidirir, bu kodlar vasitəsilə virtual metodlar cədəvli qurulur.
Əgər obyektdə heç virtual metod yoxdursa, konstruktor olmaya da bilər, lakin heç olmasa bir metod
virual təsvir olunmalıdırsa, (Məsələn, Draw Virtual) onda obyektin tərkibinə mütləq bir konxtruktor
daxil olmalıdır və ona müraciət virtualdan əvvəl gəlməlidir.
Konstruktor obyekt sahələrinin konkret qiymətlərlə doldurulmasını həyata keçirir. Qeyd
edək ki, eyni bir obyektin müxtəlif nümunələri bir-birindən ancaq sahələri ilə fərqlənir, lakin hamısı
eyni metodlar istfadə edir. bizim misalda TGraphObj obyektinin Init konstruktoru obyektin
nümunəsinin tam təsviri üçün verilənləri ax, ay, acolor müraciət parametrləri vasitəsilə alır.
Draw qrafik obyekti seçmək üçündür. O törəmələrdə müxtəlif cür reallaşacaq. Məsələn,
nöqtəni vizuallaşdırmaq üçün Putpixel-i çağırmaq, xətt üçün Line və s. çağırmaq lazımdır. Çnüki o
virtualdır.
Virtual metoda malik obyektin translyasiyası zamanı Virtual metodlar cədvəli (VMC)
yaranır. Bu cədvəldə hər virtual metoda giriş nöqtələrinin ünvanlarıdır. Başlanğıcda VMC konkret
ünvan saxlamır. Əgər biz Init konstruktoru vasitəsilə TgraphObj obyektinin bir nümunəsini yaratsaq
konstruktorun kodu lazımi valideyn Draw metodunun ünvanını VMC –də yerləşdirəcək. Növbəti
övladların konstruktorları VMC-yə öz ünvanlarını yerləşdirir və bu prosedura obyektin gecikən
əlaqələndirilməsi adlanır. Bu əlaqələndrimə nəticəsində valideyn övlad metodlarına müraciət edə
biləcək.
Obyektdə TgraphObj Virtual metodunun olması ilə obyektin 3 digər metodları asanlıqla
realizasiya olunur. Show və Hide çağırılanda Draw(acolor) və Draw(Getbkcolor) və s. ilə fiqur
rənglənir.
İndi isə obyektin hərəkətinə baxaq. Məsələn, əgər Tgraphobj-nin övladı (məs., Tline) özünü
ekranda yerləşdirmək istəyirsə, o valideynin Moveto metoduna müraciət edir. Bu üsulda obyekt
Hide ilə ekrandan silinir və Show ilə digər yerdə görsənir. Show və Hide reallaşdırmaq üçün virtual
Draw metoduna müraciət edir. Moveto çağırışı Tline obyekti çərçivəsində baş verdiyindən bu
obyektin VMC-si istifadə edilir və onun düz xətt çəkən Draw metodu çağırılır. Əgər dairə hərəkət
edəcəksə, VMC Tcircle obyektinin Draw metodunun ünvanını saxlayacaq. Obyektin bütün
xassələrini təsvir etmək üçün obyektin üsullarını açıq şəkildə yazaq. Bunu Pascalda təsvirdən sonra
yazırıq. Məsələn,
Type Tgraphobj=objetc
... ...
end;
constructor Tgraphobj.Init;
begin
x:=ax; y:=ay; color:=acolor
end;
procedure Tgraphobj.Draw;
begin
{Bu prosedur valideyn obyektdə heç
nə etmir, ona görə də TgraphObj –nin nümunələri ekranda
özlərini göstərə bilmirlər. Övladlar isə bunu edə bilmək üçün bu metodu bildirməlidirlər,
qapamalıdırlar. Bu elə polimorfizmdir}
End;
procedure Tgraphobj.Show;
begin
draw(color)
end;
procedure Tgraphobj.Hide;
begin
draw(getbkcolor)
end;
procedure Tgraphobj.Moveto;
begin
x:=x+dx;
y:=y+dx;
show
end;
İndi isə Tgraphobj obyektinin övladlarını yaradaq. I Tpoint. Onun köməyilə nöqtə
vizuallaşacaq və hərəkət edəcək. Bunun üçün bütün lazımi vasitələr TgraphObj-də var. Buna görə də
Tpoint-də ancaq Draw açıqlanacaq.
type Tpoint=object(TgraphObj)
procedure draw(acolor:word);virtual;
end;
procedure Tpoint.Draw;
begin
Putpixel(x,y,color)
end;
Qeyd eədək ki, x,y,color dəyişənləri ana obyektdə təsvir edildiyindən onları yenidən
təsvir
etmək səhvdir.
Bu yeni Tpoint obyektində TgraphObj-nin (valideynin) istənilən metodunu istifadə etmək
olar. Məsələn, Moveto-nu çağırıb obyekti yeni kordinatlara gətirmək üçün valideyn üsul olan
TgraphObj .Moveto metodu Tpoint. Draw metoduna müraciət edəcək ki, nöqtəni əvvəlcə gizlətsin,
sonra göstərsin. Belə çağırış ancaq Tpoint obyektinin Init metoduna müraciətdən sonra açıq olacaq.
(Init VMC-ni lazımi şəkildə sazladıqdan sonra). Əgər Tpoint. Draw-nu Initdən əvvəl çağırsaq onun
VMC-si düzgün ünvan saxlamayacaq və proqram asılacaq.
Xətt obyektini yaratmaq üçün son nöqtənin kordinatlarını saxlamaq üçün 2 yeni sahə daxil
etmək lazımdır. Əlavə sahələri konkret qiymətlərlə doldurmaq lazımdır, buna görə də valideyn
obyektin konstruktorunu yenidən doldurmaq lazımdır.
Type Tline=object(TgraphObj)
Dx,dy:integer; {II ucun kordinatlarının artımı}
Constructor Init(x1, y1,x2,y2:integer;acolor:Word);
Procedure Draw (acolor:word) ; Virtual;
End;
Constructor Tline.Init;
{Övlad konstruktoru çağırır ki, x,y və color-i inisiasiya etsin, sonra dx, dy sahələrini inisiasiya edir}
Begin
{övlad konstruktoru çağırırıq}
Inherited Init(x1,y1,acolor);
Dx:=x2-x1; {dx,dy sahələrini inisiasiya edək.}
Dy:=y2-y1;
End;
Procedure Draw;
Begin
SetColor(color); {rəng seçirik}
Line (x,y, x+dx,y+dy);
{xətt çəkirik}
End;
Tline.Init konstruktorunda x,y və color sahələrinin inisiasiyası üçün varis Graph.Init
konstruktoru çağırılır. Bunun üçün Inherited (varis) istifadə olunur. Eyni qayda ilə biz
TgraphObj.Init(x1,y1, acolor) də yaza bilərdik.
İndi asanlıqla Tcircle obyektini asanlıqla yarada bilərik.
type tcircle=object(tgraphobj)
r:integer;
constructor Init (ax,ay,ar:integer; acolor:word);
procedure Draw(acolor:word); virtual;
end;
constructor Tcircle.Init;
begin
inherited init(ax,ay,acolor);
r:=ar;
end;
procedure Tcircle.Draw;
begin
setcolor(acolor);
circle(x,y,r);
end;
Trect obyektini yaratmaq üçün Tline obyektindən istifadə etmək daha rahat olardı.
type trect=object(tline)
procedure Draw(acolor:word); virtual;
end;
procedure Trect.Draw;