6. Qism dastur parametrlari
Dasturlashda ko‘pincha agar qism dastur nomi boshqa qism dasturga
parametr kabi yuborilsa, uni qayta ishlash afzalroq bo‘lgan holatlar ham bo‘ladi.
Ba’zida, qism dastur qandaydir matematik funksiyani modellashtirishi lozim
bo‘lganda bu hol yuzaga keladi. Masalan, sonli integralini hisoblovchi qism dastur,
funksiya grafigi ostidagi shakl yuzini aniqlaydi va ushbu funksiyani turli nuqtalarda
hisoblashi lozim. Bunday qism dastur har qanday berilgan funksiya uchun
qo‘llanilishi lozim. Qism dasturni har bir funksiya uchun yozib o‘tirish shart
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
233
bo‘lmasligi kerak. Buning natijasida, dasturdagi matematik funksiya integralini
hisoblovchi funksiya nomi integratsiyalovchi qism dasturga parametr kabi yuboriladi.
Bu g‘oya oddiyligi va tabiiyligiga qaramay, uning to‘liq ishlashi muammo
tug‘dirishi mumkin. Agar faqat qism dastur kodini yuborish kerak bo‘lganida edi,
alohida ko‘rsatkichni yuborishning o‘zi yetarli bo‘lar edi. Ammo, bir qator murakkab
holatlar yuzaga keladi.
Birinchidan, parametr kabi yuboriluvchi qism dasturlarni chaqirishda
parametrlar tiplarini tekshirish muammosi mavjud. Pascal tilining boshlang‘ich
tavsifnomasida qism dasturlarni ularning parametrlari tiplarini qo‘shmay, ularni
parametr kabi yuborish imkoniyati berilar edi. Agar mustaqil kompilyatsiya mavjud
bo‘lsa, kompilyator parametrlar sonining to‘g‘riligini tekshirishga ham imkon
bermaydi. Mustaqil kompilyatsiya mavjud bo‘lmasa, parametrlar muvofiqligini
tekshirishning imkoni bor, ammo bu juda ko‘p qiyinchiliklar tug‘diradi va odatda,
buning umuman iloji yo‘q. FORTRAN 77 tilida ham ushbu muammo mavjud, ammo
FORTRAN 77 tilidagi tiplar muvofiqligini tekshirish hech qachon bajarilmaganligi
uchun, bu unchalik ham muammo hisoblanmaydi.
Agar qism dastur nomi ALGOL 68 tilida yoki Pascal tilining oxirgi versiyalarida
parametr kabi yuborilsa, rasmiy parametrlar tiplari qism dasturlardan qabul
qilinuvchi rasmiy parametrlar ro‘yxatiga qo‘shiladi, shuning uchun, real chaqiriqda
qism dasturga yuboriluvchi parametrlar tiplari muvofiqligini statistik holda bajarish
mumkin. Masalan, quyidagi kodni Pascal tilida ko‘rib chiqaylik:
procedure integrate (function fun (x:real):real;
lowerbd, upperbd:real;
var result:real);
…
var funval; real;
begin
…
funval := fun (lowerbd);
…
end;
integrate protsedurasidagi fun funksiyasini chaqirishda faktli parametr statik
tarzda integrate protsedurasining rasmiy parametrlari ro‘yxatidan fun funksiyasining
rasmiy parametri tipi bilan muvofiqligini tekshirish mumkin.
S va C++ tillarida funksiyalar parametrlar kabi yuborila olmaydi, ammo
funksiya ko‘rsatkichlari yuborilishi mumkin. Funksiya ko‘rsatkichi tipi uning protokoli
hisoblanadi. Protokol barcha parametrlar tiplariga ega bo‘lgani uchun, bunday
parametrlar tiplar muvofiqligiga tekshirilishi mumkin.
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
234
Modula-2 tilida protseduralar tiplari o‘zgaruvchilar kabi, ularni yuborish uchun
qo‘llaniladi. Ushbu metod jo‘natilayotgan qism dasturlar parametrlari tiplari
muvofiqligini tekshirishga imkon beradi, chunki parametrlar tiplari protsedura
tipining bir bo‘lagi hisoblanadi. FORTRAN 90 tilida qism dasturlar parametrlari tiplari
muvofiqligini tekshirishni tavsiflovchi mexanizm mavjud bo‘lib, ularning o‘zi
parametrlar kabi yuboriladi. Ada tilida qism dasturlarni parametr kabi qo‘llab
bo‘lmaydi. Buning o‘rniga, parametrlar kabi yuboriluvchi qism dasturlar ta’minlovchi
funksional imkoniyatlar Ada tilida o‘rnatilgan funksiyalar yordamida egallaniladi va
bu to‘liq tarzda 8-qismida ko‘rib chiqilgan.
Qism dasturlar nomlarini qo‘llashning yanada qiziq tarafi yuborilayotgan qism
dastur ssыlkalarning to‘g‘ri muhiti haqidagi muammolar bilan bog‘liq. Buning uchta
imkoniyati bor:
1.
Chaqirish operatori muhiti, bu yuborilayotgan qism dasturni
aktivlashtiradi (soyali bog‘lanish – shallow binding).
2.
Yuborilayotgan qism dasturni aniqlash muhiti (chuqur bog‘lanish – deep
binding).
3.
Qism dasturni faktli parametr kabi yuboruvchi chaqirish operatori
muhiti (alohida bog‘lanish − ad hoc binding).
Quyidagi keltirilgan dastur ushbu imkoniyatlarni amalga oshiradi. SUB 3
protsedurasi SUB 4 protsedurasini chaqira oladi deylik.
procedure SUB1;
var x : integer;
procedure SUB2;
begin
write (‘x=’, x);
end; {sub2}
procedure SUB3;
varx : integer;
begin x : integer;
x := 3;
SUB4(SUB2)
end; {SUB3}
procedure SUB4(SUBX);
varx : integer;
begin
x := 4;
SUBX;
end; {SUB4}
begin {SUB1}
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
235
x := 1;
SUB3
end; {SUB1}
SUB 3 qism dasturini SUB 4 orqali chaqirishda nima kelib chiqishini ko‘rib
chiqamiz. Soyali bog‘lanishda bunday bajarishning ssыlkalar muhiti SUB 4 qism
dasturi ssыlkalar muhiti bilan mos keladi, shuning uchun, x o‘zgaruvchi ssыlkasi SUB
2 muhitidagi mahalliy o‘zgaruvchi bilan muvofiq bo‘ladi.
Do'stlaringiz bilan baham: |