Avtomatika va elektrotexnologiya


var    Form1: TForm1;  implementation


Download 5.01 Kb.
Pdf ko'rish
bet20/22
Sana20.12.2017
Hajmi5.01 Kb.
#22669
1   ...   14   15   16   17   18   19   20   21   22

var 
  Form1: TForm1; 
implementation 
{$R *.DFM} 
type 
  TPStudent=^TStudent; //TStudent tipiga ko'rsatkich 
  TStudent = record 
  f_name:string[20];  // familiya 
 
l_name:string[20];  // ism 
 
next: TPStudent;    // ro'yxatning navbatdagi elementi 
  end; 
var 
  head: TPStudent;  // ro'yxat boshi 
procedure TForm1.Button1Click(Sender: TObject); 

var 
   node: TPStudent;  // ro'yxatning yangi tuguni 
   curr: TPStudent;  // ro'yxatning joriy tuguni 
   pre:  TPStudent;  // curr ga bog'liq avvalgi tugun 
begin 
   new(node); // ro'yxatning yangi elementini yaratish 
   node^.f_name:=Edit1.Text;  // familiya 
   node^.l_name:=Edit2.Text;  // ism 
   // ro'yxatga tugun qo'shish 
   // dastlab tugun uchun ro'yxatdan mos joyni topamiz 
   curr:=head; 
   pre:=NIL; 
   { Diqqat! 
    agar auyidagi shartni (node.f_name>curr^.f_name)and(curr<>NIL) shartga 
    almashtirilsa u holda birinchi tugunni qo'shish vaqtida xatolik yuz beradi. 
    chunki curr=NIL va curr.^name o'zgaruvchisi yo'q! 
    Ishlatilgan variantda xatolik yuz bermaydi, chunki, dastlab qiymati 
    FALSE bo'lgan(curr<>NIL) sharti tekshiriladi va bunday holatda 
    ikkinchi shart tekshirilmaydi.} 
   while (curr <> NIL)and(node.f_name > curr^.f_name)  do 
   begin 
     // kiritilgan qiymat joriydan katta 
     pre:= curr; 
     curr:=curr^.next; // keyingi tugunga 
   end; 
   if pre = NIL 
     then 
        begin 
          // yangi tugun ro'yxat boshida 
          node^.next:=head; 
 
  head:=node; 
        end 
     else 
        begin 
          // yangi tugun pre dan keyin, curr dan oldin 
 
  node^.next:=pre^.next; 
          pre^.next:=node; 
        end; 
   Edit1.text:=''; 
   Edit2.text:=''; 
   Edit1.SetFocus; 
end; 
procedure TForm1.Button2Click(Sender: TObject); 
var 
 curr: TPStudent;  // ro'yxatning joriy elementi 
 n:integer; // ro'yxat uzunligi (elementlar miqdori) 
 st:string; // ro'yxatning satrli berilishi 
begin 
 n:=0; 
 st:=''; 
 curr:=head; 
 while curr <> NIL do 

    begin 
      n:=n+1; 
      st:=st+curr^.f_name+' '+curr^.l_name+#13; 
      curr:=curr^.next; 
    end; 
 if n <> 0 
    then ShowMessage('Ro`yxat:'+#13+st) 
    else ShowMessage('Ro`yxatda element yo`q.'); 
end; 
procedure TForm1.FormActivate(Sender: TObject); 
begin 
     head:=NIL; 
end; 
end. 
Tform1.Button1Click protsedurasi dinamik o‘zgaruvchi-yozuvni  yaratadi, unga muloqot 
oynasidagi  tahrirlash  maydoniga  kiritilgan  ma‘lumotlarni  o‘zlashtiradi,  tugun  uchun  mos 
keluvchi joyni qidirib topadi, va ushbu tugunni ro‘yhatga qo‘shadi. 
 
 
 
Tform1.Button2Сlick  protsedurasi  ro‘yhatni  chiqarishni  amalga  oshiradi.  Kiritilgan 
ro‘yhatni chiqarilishi ko‘rsatilgan. 
Elementni ro‟yhatdan ochirish 
Tugunni o‘chirish uchun o‘chirilayotgan tugundan oldin joylashgan tugun ko‘rsatkichiga 
o‘zgartirish kiritish kerak  
 
Obidov 
Obidov 
Ochilov 
Ochilov 
Olimov 
Olimov 
 
Ma‘lumki  tugun  dinamik  o‘zgaruvchi  hisoblanadi.  Shuning  uchun  tugunni  ro‘yhatdan 
olib  tashlagandan  so‘ng,  u  egallab  turgan  xotira  ham  bo‘shatilishi  kerak.  Dinamik  xotirani 
bo‘shatish  dispose  protsedurasini  chqarish  bilan  amalga  oshiriladi.  Bo‘shatilgan  xotiradan 

boshqa o‘zgaruvchilar foydalanishi mumkin. Agar xotira bo‘shatilmasa qandaydir vaqtda dastur 
bo‘sh xotira yetishmaganligi sababli navbatdagi dinamik o‘zgaruvchini yarata olmaydi. 
Navbatdagi  dastur  tartiblangan  ro‘yhatga  qo‘shish  va  o‘chirish  imkonini  beradi.  Dasturning 
muloqot oynasi 8.13-rasmda keltirilgan. 
 
Nazorat savollari. 
 
1.
 
Dinamik ro‘yxat deganda nimani tushuniladi? 
2.
 
Ko‘rsatkichlar deganda nima tushuniladi? 
3.
 
Dinamik o‘zgaruvchilar qanday e‘lon qilinadi? 
 
26-Mavzu. Dasturda ishlatiladigan standart va foydalanuvchi modullari. (2 soat). 
1.
 
Dasturda ishlatiladigan standart va foydalanuvchi modullari.  
2.
 
Modullarni tashkil etish va ulardan dastur loyixalarida foydalanish uslubi. 
 
 
Kopyuterlarning eng katta kamchiligi ularda amaliy programmalar kutubxonasining to‘liq 
emasligidadir.  Katta  EHMlarda  programma  tuzuvchilar  uchun  juda  katta  programmalar 
kutubxonasi  xizmat  qilar  va  ulardan  foydalanib  tuzilgan  programmalar  o‘zlarining  ishonchlilik 
darajasi  bilan  yuqori  turar  edi.  Shaxsiy  kompyuterlarning  bu  kamchiligini  yo‘qotish  uchun 
Turbo-Delphida modullar tushunchasi kiritilgan. Umuman olganda, har bir malakali programma 
tuzuvchi  o‘z  programmasini  prostedura  va  funkstiyalardan  foydalanib  tuzadi.  Lekin,  bu 
prostedura  va  funkstiyalardan  boshqa  programmalarda  foydalanish  uchun  ularning  matnlarini 
qayta ko‘chirib yozish lozim bo‘ladi. 
Turbo-Delphida  bu  masalani  echish  uchun  modullar  yaratilib,  ularni  kompilyastiya 
qilinadi va bu moduldan boshqa programmalarda bemalol foydalanilaveriladi. 
Turbo-Delphi  tilining  yaratuvchilari  quyidagi  zarur  va  foydali  modullarni  yaratib, 
dasturchilar uchun juda katta qulayliklar yaratishgan: 
1.
 
System  moduli-  standart  prostedura  va  funkstiyalarni  o‘z  ichiga  olib,  avtomatik  tarzda 
barcha programmalar uchun ochiqdir; 
2.
 
DOS moduli- MS DOS operastion sistemasi bilan ishlashni tashkil qiluvchi funkstiya va 
prosteduralardan tashkil topgan; 
3.
 
Crt  moduli  –  ekran,  klaviatura  va  IBM  rusumidagi  kompyuterlarning  tovushli  dinamigi 
bilan ishlash prosteduralarini o‘z ichiga olgan; 
4.
 
Grap hmoduli- kompyuterning grafik imkoniyatlaridan foydalanib yaratilgan funkstiya va 
prosteduralarning katta to‘plami; 
5.
 
Printer moduli- bu kichkinagina modul printer qurilmasi bilan ishlashni osonlashtiradi; 
6.
 
Overlay moduli– katta programmalarni bir nechta bo‘laklarga ajratishning kuchli vositasi 
bo‘lib, bir qancha prosteduralar va funkstiyalardan tashkil topgan. 
Foydalanuvchi modullarini yaratish 
Modullardan foydalanish uchun programma sarlavhasidan 
Program 
;  
keyin quyidagi qator yozilishi kerak: 
Uses
Agar programmada bir nechta modul ishlatilsa, ularning ismlari ketma-ket yozib qo‘yiladi: 
Uses,,...,
Turbo-Delphi  bizga  o‘zimizning  modullarimizni  yaratib  olish  imkonini  ham  beradi. 
Foydalanuvchi modullari quyidagi strukturada bo‘ladi: 
Unit
Interface 
... 
{ ochiq e‘lonlar bo‘limi - interfeys sekstiyasi} 

... 
Implementation 
... 
{ yopiq e‘lonlar bo‘limi} 
... 
Begin 
... 
{ Inistializastiya bo‘limi} 
... 
End. 
Agar modul o‘z ichida boshqa modullardan foydalansa Interface xizmatchi 
so‘zidan keyin 
Uses; yoziladi. 
Interfeysli  bo‘lim  modulning  bir  qismi  bo‘lib,  Interfaceva  Implementation  so‘zlari 
orasida  joylashadi.  Bu  bo‘limda  o‘zgarmaslar,  ma‘lumotlar  tipi,  o‘zgaruvchilar,  prostedura  va 
funkstiyalarni  aniqlash  mumkin.  Bu  kiritilganlar  mazkur  modulda  qatnashuvchi  barcha 
programmalar va modullarda bemalol ishlatilishi mumkin. Bo‘limda sanab o‘tilgan prostedura va 
funkstiyalarning  tana  qismlari  Implementationso‘zidan  keyin  aniqlanadi  (ularning  sarlavhalari 
aynan  saqlanib  qolishi  kerak).  Bu  bo‘limda  ham,  faqat  shu  bo‘lim  uchungina  "Ko‘rinadigan" 
(ishlatishi  mumkin  bo‘lgan)  e‘lonlar  bo‘limi  qatnashishi  mumkin.  Inistializastiya  sekstiyasi 
Begin va Endso‘zlari ichiga olib yoziladi. Agar Beginso‘zi tushirib qoldirilgan bo‘lsa, demak bu 
sekstiya  yo‘q  hisoblanadi.  Inistializastiya  sekstiyasida  boshqarishni  asosiy  programmaga 
uzatgungacha bajariladigan operatorlar joylashgan bo‘ladi.  
Bu operatorlar  asosan programmani  ishga tushirishga tayyorlab beradi.  Misol  sifatida X 
va Y buning sonlarining maksimumi va minimumini aniqlovchi modulni yarataylik: 
Unit Stud; 
Interface{ochiq e‘lonlar bo‘limi – interfeys sekstiyasi} 
function min(x,y:integer):integer; 
function max(x,y:integer):integer; 
Implementation{yopiq e‘lonlar bo‘limi} 
function min(x,y:integer):integer; 
Begin 
if x<=y then min:=x else min:=y; 
End; 
function max(x,y:integer):integer; 
Begin 
if x>y  then max:=x else max:=y; 
End; 
Begin 
{Inistializastiya sekstiyasi yo‘q} 
End. 
Biz  zarur  modulni  hosil  qildik,  endi  uni  kompilyastiya  qilishimiz  lozim.  Kompilyastiya 
natijasida Stud.tpuismli fayl hosil qilinishi kerak. Kompilyastiya qilinmagan modulning ismi esa 
shunga mos holda Stud.pasbo‘lishi kerak. Bu moduldan foydalanish dasturi quyidagicha bo‘lishi 
mumkin: 
Uses Stud; 
Var 
A,b,c,d:integer; 
Begin 
Write(‗A va B larni kiriting>‘); 
Readln(a,b); 
C:=max(a,b); 

Writeln(‗Max= ‗,C); 
C:=min(a,b); 
Writeln(‗Min= ‗,C); 
D:=max(a,b)+min(a,b); 
Writeln(‗Max+Minq‘,D); 
End. 
Quyida esa ekran rangini tanlash moduli misol sifatida ko‘rsatilgan: 
Unit Colors; 
Interfase 
Type 
Colortype =Array[0..15] of Byte; 
Const 
Black:byte=0; blue:byte=1; 
Green:byte=2; cyan:byte=3; 
Red:byte=4; magenta:byte=5; 
Brown:byte=6; lightgray:byte=7; 
Darkgray:byte=8; lightblue:byte=9; 
Lightgreen:byte=10; lightcyan:byte=11; 
Lightred:byte=12; lightmagenta:byte=13; 
Yellow:byte=14; white:byte=15; 
Var 
Currcolors:colortype absolute Black; 
Procedure setMonoColors; 
Procedure setColorColors; 
Implementation 
Const 
ColorColors:Colortype=(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15) ; 
MonoColors:ColorType=(0,1,7,7,7,7,7,7,7,7,7,7,7,7,15,15); 
Procedure SetMonoColors; 
Begin 
CurrColors:=MonoColors; 
End; 
Procedure SetColorColors; 
Begin 
CurrColors:=ColorColors; 
End; 
Var 
Ch:Char; 
Begin 
Write( 
Readln(ch); 
If ch in [‗M‘,‘m‘,‘M‘,‘m‘] then SetMonoColors; 
End. 
Programma ishini bajaruvchi prosteduralar 
Yuqorida  aytganimizdek,  System  modulining  prosteduralari  va  funkstiyalari  barcha 
programmalar uchun ochiq bo‘lib, ulardan keng foydalanish mumkin. System modulining ismini 
modullar  ro‘yxatida  ko‘rsatish  shart  emas.  Quyida  ushbu  modulning  ma‘lum  bir  qism 
prosteduralar va funkstiyalari bilan qisqacha tanishib chiqamiz: 
 
Programma ishini bajarish prosteduralari. 
Exit prostedurasi 
Vazifasi: aktiv ishchi blokidan chiqish, bajarilayotgan ishni yakunlash; 

Aniqlanishi: Exit. 
Halt prostedurasi 
Vazifasi: programma bajarilishini to‘xtatadi va OS ga boshqarishni qaytaradi; 
Aniqlanishi: Halt[(ExitCode:Word)]; 
bu  erda  majburiy  bo‘lmagan  (o‘rta  qavs  majburiy  emas  belgisi)  ExitCode  parametri 
programmaning  yakunlanish  kodini  beradi,  agar  bu  parametr  bo‘lmasa  bu  kod  nolga  teng 
bo‘ladi. 
RunError prostedurasi 
Vazifasi: programmaning bajarilishini to‘xtatadi va bajarilish vaqtidagi xatolarni aniqlaydi; 
Aniqlanishi: RunError[(ErrorCode:Word)]; 
bu erda ErrorCode parametrining xatolik nomeri haqidagi ma‘lumoti ekranga chop etiladi. 
Tiplarni almashtirish funkstiyalari 
Chr funkstiyasi 
Vazifasi: ASCII jadvalidagi tartib raqami berilgan butun songa mos bo‘lgan belgini aniqlaydi; 
Aniqlanishi: Chr(N:Byte):Char; 
bu erda N belgining ASCII jadvalidagi tartib raqamini ifodalovchi butun, musbat son. 
Ord funkstiyasi 
Vazifasi: sanalma tipli qiymatlar bo‘yicha uning tartib sonini aniqlash; 
Aniqlanishi: Ord(X):LongInt; 
bu erda X – sanalma tipli qiymat. 
Round funkstiyasi 
Vazifasi: haqiqiy tipli qiymatni yaxlitlab, katta butun, son hosil qiladi; 
Aniqlanishi: Round(X:Real):LongInt; 
Trunc funkstiyasi 
Vazifasi: haqiqiy tipli qiymatning kasr qismini tashlab yuborib, butun son hosil 
qiladi; 
Aniqlanishi: Trunc(X:Real):LongInt; 
Arifmetik funkstiyalar. 
bu  funkstiyalarning  yozilishi  va  ulardan  foydalanish  qoidalari  oldingi  o‘zlashtirish  operatori 
mavzusida to‘liq berib o‘tilganligi uchun, ularga to‘xtalib o‘tirmaymiz. 
 
Sanalma tip funkstiyalari va prosteduralari 
Dec prostedurasi 
Vazifasi: o‘zgaruvchi qiymatini kamaytiradi
Aniqlanishi: Dec(Var X[;n]:LongInt); 
bu  erda  yozilishi  majburiy  bo‘lmagan  ―n‖  o‘zgaruvchi  argumentning  qiymatini  qanchaga 
kamaytirish  lozimligini  ko‘rsatadi.  Bu  o‘zgaruvchi  yozilmasa  argument  qiymati  bir  soniga 
kamayadi. 
Inc prostedurasi 
Vazifasi: o‘zgaruvchi qiymatini orttiradi; 
Aniqlanishi: Inc(Var X[;n]: Integer); 
bu erda Dec prostedurasiga teskari ish bajariladi. 
Odd funkstiyasi 
Vazifasi: argumentning toq yoki juft sonligini tekshiradi; 
Aniqlanishi: Odd( X:LongInt):Boolean; 
bu erda natijaviy qiymat rost (True) bo‘lsa son toq, aks holda son juft. 
Pred prostedurasi 
Vazifasi: argumetni oldingi qiymatini aniqlash; 
Aniqlanishi: Pred(X); 
Succ prostedurasi 
Vazifasi: argumetni keyingi qiymatini aniqlash; 
Aniqlanishi:Succ(X); 

 
Nazariy savollar. 
1. Dasturlar kutubxonasini so‘zining ma‘nosi nima? 
2. System moduli qanday vazifani bajaradi? 
3. DOS modulining imkoniyatlarini baholang; 
4. Graph moduli haqida umumiy ma‘lumotlar bering; 
5. Printer moduli qanday qurilma bilan ishlashni ta‘minlaydi? 
6. Overlay moduli programmalar ustida qanday ishlar bajaradi? 
7. Crt modulining imkoniyatlarini sanab bering; 
8. Modullar programmaga qanday bog‘lanadi? 
9. Foydalanuvchi moduli deganda nimani tushunasiz? 
 
32,33-Mavzu. Obyektga yo‟naltirilgan dasturlash.Inkapsulyatsiya. Vorislik. 
Polimorfizm. Dinamik obyektlar. Konstruktorlar.(4 soat). 
1.  Ob‗yektga yo‗naltirilgan dasturlash. 
2.  Inkapsulyatsiya.  
3.  Vorislik.  
4.  Polimorfizm. 
5.  Dinamik ob‗yektlar.  
6.  Konstruktorlar. 
 
OYD  asosida  bitta  struktura  (tuzilishda)  da  ma‘lumotlarni  va  ular  ustida  bajariladigan 
amallarni birlashtirish g‗oyasi yotadi. 
OYD uchta asosiy tushunchaga tayanadi: inkapsulyatsiya, vorislik va polimorfizm. 
Inkapsulatsiya  –  ma‘lumotlar  va  shu  ma‘lumotlar  bilan  ishlaydigan  protsedura  va 
funksiyalar  aralashmasini  hosil  qilishdir.  Natijada  ma‘lumotlarning  yangi  turi–obyekt  hosil 
bo‗ladi. 
Vorislik–aniqlangan  obyektlardan  foydalangan  holda  ulardan  kelib  chiquvchi  obyektlar 
iyerarxiyasini  hosil  qilish.  Har  bir  «voris»  o‗z  «ajdodi»  dagi  ma‘lumotlar  tavsifi  va  ulrni  qayta 
ishlovchi usullar (metodlar) ni o‗zlashtiradi. 
Polimorfizm–vorislik  iyerarxiyasidagi  barcha  obyektlarga  bir  vaqtda  qo‗llanadigan,  bir 
xil nomdagi amallarni (protsedura va funksiyalar) aniqlash imkoniyatidir. Bunda har bir obyekt 
bu amalni o‗z ustida bajarilishida o‗ziga xosliklarini buyurtma berishi mumkin. 
OYD  murakkab  programmalarni  yozishni  soddalashtiradi  va  bu  jarayonga  ixchamlik 
xususiyatini  beradi.  OYD  ning  asosiy  afzalligi  shundaki  programma  qo‗llash  sohasini 
o‗zgartirishga  dastruni  o‗zgartirmasdan,  faqat  obyektlar  iyerarxiyasiga  yangi  o‗zgartirishlar 
(satxlar qo‗shish) orqali erishish mumkin. 
Obyektlarni aniqlash. Obyekt-tarkibida o‗zaro bog‗langan har xil turdagi o‗zgaruvchilar 
(ma‘lumotlar  maydoni)  va  ularni  qayta  ishlaydigan  protsedura  va  funksiyalardan  (metodlar) 
tashkil topgan tuzilmadir. Obyekt  turini aniqlash  uchun ―Object‖ maxsus so‗z aniqlangan va u 
quyidagicha e‘lon qilinadi. 
Type 
        

 Object 
                               
                               
                               End
bilan aniqlangan har bir o‗zgaruvchi shu tur nusxasi (namunasi) deyiladi. 
Misol. Belgi va matn ma‘lumotlar bilan ishlaydigan obyekt. 
 
Type 
 ObjPos 

 Object 
       Line, Col : Word; 

       Procedure Init (Init_Line,Init_Col : Word); 
       Function GetLine: Word;                        {Line qiymatini qabul qilish} 
     Function GetCol: Word;                           {Col qiymatini qabul qilish} 
      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_Col : Word; 
Begin 
 Get_Col :

 Col 
End; 
 
Procedure ObjPos.Print; 
Begin 
 Write(#7); 
End; 
... 
Var 
 ObjPos_Var : ObjPos;       {obyekt nusxasini e‘lon qilish} 
... 
Begin 
... 
ObjPos_Var.Init(5,15);      {obyekt uchun boshlang‗ich qiymatlar berish} 
... 
End; 
Obyektni  e‘lon  qilishda  metodlarning    sarlavxalarigina  yoziladi.  Protsedura  va 
funksiyalar  e‘loni  programma  e‘lon  qismining  boshqa  bo‗lagida  bo‗lishi  mumkin.  Obyekt 
maydonlariga murojaat yozuv (Record) maydonlariga murojaat bilan bir xil («.» –nuqta va With 
operatori orqali). Lekin obyekt ma‘lumotlariga quyidagicha murojaat ijobiy baholanmaydi. 
ObjPos_Var.Line :

5; 
ObjPos_Var.Col :

15; 
Umuman,  OYDda  obyekt  ma‘lumotlariga  murojaat  faqat  metodlar  orqali  amalga 
oshiriladi. 
Obyektlarni e‘lon qilishda ma‘lum bir talablar bajarilishi kerak: 

 
obyekt  turi  asosiy  daturning  (modullarining)  Type  bo‗limida  e‘lon  qilinishi  mumkin. 
Qism-programmalarda lokal obyektlarni e‘lon qilish mumkin emas; 

 
obyekt turini aniqlashda ma‘lumotlar maydoni metodlar maydonidan oldin kelishi kerak; 

 
obyekt  komponentasi  sifatida  fayl  kelishi  mumkin  emas,  va  aksincha,  fayl  ―obyekt‖ 
turidagi komponentaga ega bo‗lishi mumkin emas. 
ObjPos obyekti orqali matn ekranidagi birorta belgi holati aniqlanadi. Endi belgini o‗zini 
aniqlovchi va uning ustida ma‘lum bir ish bajaruvchi ObjSym obyektini aniqlaylik. 
 
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;  
                   Procedure Print
           End; 
Procedure ObjSym.Init(Init_Line, Init_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; 
Agar  bu  obyektning  aniqlanishiga  e‘tibor  beradigan  bo‗lsak,  unda  ObjPos  obyektidagi 
ma‘lumotlar va Get_line, Get_Col funksiyalaridan foydalanilgan. Sym  va Print komponentalari 
yangidan qo‗shilgan va Init protsedurasi qaytadan yozilgan. Ko‗rinib turibdiki, ObjSym obyekti 
ObjPos  obyekti  xususiyatlarini  vorislik  qilib  olgan.  Umuman  aytganda,  OYDda  vorislik–bu 
obyektlarning oddiy tuzilishdan murakkab tuzilishga tomon obyekt xususiyatlarini olib o‗tishi va 
rivojlanishidir.  
Vorislikni aniqlanishi.  
 
Type 


Object( ) 
             
             
                             End; 
Uses Crt; 
       { bu yerda ObjPos obyekt e‘loni bo‗lishi kerak} 
Type 
  ObjSym qObject (ObjPos) 
                Sym : Char; 
    Procedure Init (Init_Line, Init_Col : Word; Init_Sym: Char); 
    Procedure Print; 
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; 
Bu  misoldan  ko‗rinib  turibdiki,  Init  protsedurasi  Line,  Col  va  ObjPos.Init 
komponentalarini vorislik bo‗yicha ishlatmoqda. 
Obyektlarni  aniqlashni  xuddi  shu  yo‗sinda  davom  ettirib  belgini,  uning  ranglar  atributi 
bilan birga aniqlovchi obyekni aniqlashimiz mumkin. Bunda yangi obyekt ObjSym vorisi bo‗lib, 
unga kerakli maydonlar va atiribut bilan ishlovchi metodni ko‗shish kerak bo‗ladi. Hosil bo‗lgan 
obyekt ObjPosga nisbatan uchinchi bosqich vorisi bo‗ladi. 
ObjPosga nisbatan vorislik bosqichi ObjSym bilan bir bosqichda bo‗lgan obyektlarni ham 
yaratish mumkin. Misol uchun ekranga satr chiqaradigan obyekt yaratmoqchi bo‗lsak, u ObjPos 
vorisi bo‗ladi. 
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; 
  
Vorislikda hosil bo‗luvchi yangi turlarda ajdod obyektlardagi identifikatorlarni qaytadan 
e‘lon  qilish  mumkin  emas.  Lekin  bu  cheklanish  metodlarga  taalluqli  emas,  ya‘ni  har  bir  voris 
obyekt yuqoridagi aniqlangan metodlarni, yangidan e‘lon qilishi mumkin (o‗ziga xoslikdan kelib 
chiqqan holda). Bunga misol sifatida Print metodini ko‗rsatishimiz mumkin. Bu hollarda har bir 
obyekt  uchun  o‗z  metodi  (Print)  ishlaydi.  Vorislikda  ham  obyektlar  iyerarxiyasidagi  oxirgi 
aniqlangan metod ishlaydi. 
Download 5.01 Kb.

Do'stlaringiz bilan baham:
1   ...   14   15   16   17   18   19   20   21   22




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