Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
237
foydalanish mumkin. Bunday usul qism dasturlar funksionalligini ta’minlashda zarur
bo‘lib, ular parametrlar kabi yuboriladi.
Quyida keltirilgan misol uchta o‘rnatilgan parametrga ega protsedurani
tasavvur qilishga imkon beradi. Bu esa qism dasturga parametr sifatida o‘rnatilgan
massivni qabul qilish imkoniyatini beradi. Protsedura
almashinuv sortirovkasi
algoritmini amalga oshiradi va har qanday massiv bilan ishlashi mumkin. Ushbu
massiv elementlari ro‘yxatli tip indeksi diapazonini qo‘llagan holda raqamli tipga ega:
generic
type INDEX_TYPE is (<>);
type ELEMENT_TYPE is private;
type VECTOR is array (INTEGER_TYPE range <>) of ELEMENT_TYPE;
procedure GENERIC_SORT (LIST : in out VECTOR);
procedure GENERIC_SORT (LIST : in out VECTOR) is TEMP : ELEMENT_TYPE;
begin
for TOP in LIST’FIRTS..INDEX_TYPE’PRED(LIST’LAST) loop
for BOTTOM in INDEX_TYPE’SUCC(TOP)..LIST’LAST loop
if LIST (TOP) > LIST (BOTTOM) then
TEMP := LIST(TOP);
LIST := LIST (BOTTOM);
LIST (BOTTOM) := TEMP;
end if;
end loop; -- for BOTTOM …
Ushbu o‘rnatilgan protseduraning ba’zi bo‘laklari g‘alati ko‘rinishi mumkin, bu
siz Ada tili bilan tanish bo‘lmasangizgina yuzaga keladi. Ammo, ushbu holatda
sintaksisning barcha detallarini tushunish shart emas. Massiv tiplari va uning
elementlari ushbu protseduraning ikkita o‘rnatilgan
parametri orqali ishga
tushiriladi, bunda indeks o‘zgarishining har qanday diapazoni va tipi qo‘llanilishi
mumkin.
O‘rnatilgan sortirovka, protsedura shablonidan boshqa narsa emas.
Kompilyator ushbu protsedura uchun hech qanday kodni generatsiyalamaydi. Va bu
qandaydir aniq tip uchun protsedura nusxasi yaratilmagunigacha dastur ishlashiga
halal bermaydi. Protsedura nusxasi operator yordamida yaratilib,
u quyidagi
ko‘rinishda bo‘lishi mumkin:
procedure INTEGER_SORT is new GENERIC_SORT (
INDEX_TYPE => INTEGER;
ELEMENT_TYPE => INTEGER;
VECTOR => INT_ARRAY);
Dasturlash tillari va axborot-kommunikatsiya texnologiyalari 1-semestr
238
Ushbu operatorga javob tarzida kompilyator INTEGER_SORT nomi bilan
GENERIC_SORT protsedurasi versiyasini yaratib, u INTEGER tipi indeksili INTEGER tipi
elementlariga ega bo‘lgan INT_ARRAY tipi massivini sortirovkalaydi.
GENERIC_SORT protsedurasida > operatori sortirovkalanayotgan massiv
elementlari uchun aniqlangan. GENERIC_SORT protsedurasining universalligini
oshirish mumkin. Bunda unga o‘rnatilgan parametrli
taqqoslash funksiyasi
o‘rnatiladi.
Ada tilida qism dasturlarni boshqa qism dasturlarning parametrlari kabi
yuborish yo‘lga qo‘yilmaydi. Ushbu imkoniyatga ega bo‘lish uchun, Ada tilida
o‘rnatilgan rasmiy qism dasturlar qo‘llaniladi. Pascal dasturlash tilida qism dasturlar
parametrlar kabi yuborilishi mumkin, shuning uchun aniq chaqiruvda yuborilayotgan
qism dasturdan qism dastur natijasini chiqarish uchun foydalanish mumkin. Ada
tilida xuddi shunday natijaga turli mavjud qism dasturlar bilan foydalanuvchiga
o‘rnatilgan qism dasturning cheklangan sonda nusxa yaratish
imkoniyatini berish
orqali hal qilinadi. Masalan, 8.6. bo‘limda yozilgan integrate protsedurasini Ada tilida
quyidagi ko‘rinishda yozish mumkin:
generic
with function FUN (X: FLOAT) return FLOAT;
procedure INTEGRATE (LOWERBD : in FLOAT;
UPPERBD : in FLOAT;
RESULT : out FLOAT) is
FUNVAL : FLOAT;
begin
…
FUNVAL:= FUN (LOWERBD);
…
end;
Foydalanuvchi tomonidan FUN1 funksiyasini integratsiyalash uchun ushbu
protsedura nusxasini yaratishda quyidagi operatorni qo‘llash mumkin:
procedure INTEGRATE_FUN is new INTEGRATE (FUN=>FUN1);
Endi INTEGER_FUN1 protsedurasi FUN1 funksiyasini integratsiyalashga
qaratilgan.