Microsoft Word Alqoritm ilk 5 muhazire docx



Yüklə 234,89 Kb.
Pdf görüntüsü
səhifə6/10
tarix14.10.2017
ölçüsü234,89 Kb.
#4696
növüMühazirə
1   2   3   4   5   6   7   8   9   10

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; 




Yüklə 234,89 Kb.

Dostları ilə paylaş:
1   2   3   4   5   6   7   8   9   10




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©genderi.org 2024
rəhbərliyinə müraciət

    Ana səhifə