Uploaded by jamshidtoreev0206

Dasturlash Strukturalari Dasturlashni asosiy modellari

advertisement
Dasturlash Strukturalari
Dasturlashni asosiy modellari:
Imperativ dasturlash
Strukturaviy dasturlash
Funksional dasturlash
Mantiqiy dasturlash
Obyekt- mo’ljallangan dasturlash
Sinflarga asoslangan dasturlash
Prototiplarga asoslangan dasturlash
Subyekt- mo’ljallangan
Dasturlash yondashuvlari va qabullari:
Strukturaviy dasturlash
Jarayon dasturlashi
Deklarativ dasturlash
Aplikativ dasturlaash
Umumlashgan dasturlash
Isbotlanuvchi dasturlash
Tug’iluvchi dasturlash
Aspekt-mo’ljalli dasturlash
Agent-mo’ljalli dasturlash
Rekursiya
Avtomat dasturlash
Hodisaviy-mo’ljal dasturlash
Komponent-mo’ljalli dasturlash
Adabiy dasturlash
Dasturlash paradigmalari:
Agent-mo’ljallangan
Komponent mo’ljallangan
Konkatenativ
Deklarativ
Cheklovlar bilan
Funksional
Berilganlar to’plami
Jadval- mo’ljallangan
Reaktiv
Mantiqiy
Hodisa-mo’ljallangan
Servis- mo’ljallangan
Потоком данных
Kombinatorli
Imperativ
Jarayonli
Predmet-mo’ljallangan
Metadasturlash
Dasturlash jarayoni avtomazizatsiyasi
Umulashgan dasturlash
Reflekiv-mo’ljallash
Iteratsion
Parallel
Strukturaviy
Modulli
Rekursiv
Obyekt-mo’ljalli
Avtomat
Ma’suliyat bo’linishi:
Aspekt-mo’ljalli
Subyekt-mo’ljalli
Prototip-mo’ljalli
Dasturlash paradigmasi bitta dasturlash tili bilan aniqlanmaydi. Deyarli barcha
dasturlash tillari u yoki bu o’lchovda turli paradigmalarni qo’llaydi. Ba’zilarini
keltiramiz.
Dasturlash paradigmasi — bu kompyuter dasturlarini yozish uslubini
aniqlovchi fikr yoki tushunchalar tizimi, shuningdek dasturchinig fikr yuritish
obrazi.
Paradigma “dasturchi yozishi kerak bo’lgan dasturlash uslubi” kabi aniqlanadi.
Bryus Shrayver (Bruce Shriver) paradigmani “muammo yechimiga model va
yondashuv” kabi aniqlaydi, Linda Friedman — “dasturlash muammosi yechimiga
yondashuv” kabi aniqlaydi. Pamela Zave paradigmani “kompyuter sistemalari
haqida fikrlash usuli” kabi aniqlashni beradi.
Modullar va modulli dasturlash
Real murakkab dasturlash ta’minoti o’zida monolit dasturlarni emas. Balki
dasturlash tizimlarini namoyon qiladi. Dasturlash tizimi- bu gi’shtlardan—tizim
komponentlaridan quriluvchi konstruksiyadir. Bunday komponentlarni qurish
metodikasi har xi bo’lishi mumkin. Shu kabi metodlardan biri, modul dasturlash
deb nomlangan yondashuvga asoslangan.
Modullardan quriladigan dasturlash tizimida—modul sistemada—har bir
modul umumiy konstruksiyaning g’ishtchasi sifatida, formal bo’lmagan holda
o’zining belgilanishi bilan, formal holda esa o’zining interfeysi bilan
xarakterlanadi. Modul belgisini qoida bo’yicha, modul tizim uchun modul bo’lib
realizatsiya qilinadigan funksiyalarni formal bo’lmagan holda, tabiiy tillarida
yoziladi псевдоестественном. Modul interfeysi modul bo’lib realizatsiya
qilinadigan va bu moduldan tashqari modul tizimni boshqa modullarida ham
qo’llaniladigan obyektlar spetsifikatsiyasida izga tushadi. Modul eksporti bu—
umumiy modul tizim uchun modul berilganlari namoyish bo’luvchidir, import esamodulni modul tizimlarni boshqa modullaridan talab qilinayotgan narsasidir.
Modul eksportida eksportirlanadigan obyektlar kiritiladi. (turlar, o’zgarmaslar,
o’zgaruvchi va dasturostilar).
Dasturiy tizim uzoq vaqt va xodimlar kollektivi bilan yaratilishi mumkin,
shuning uchun modul shunday tizimni komponentasi kabi qayta ishlashni erkinligi
va nazorati talabini qoniqtirishi kerak. modulni interfeysi va belgilari
fiksirlangandan so’ng, uning realizatsiyasi boshqa modullar realizatsiyasiga halaqit
qilmasligi kerak. modul xatoligi ham boshqa modullar xatoligi bilan shartlanmagan
bo’lishi kerak—xatolik vaqtida, modul o’zini belgisini to’g’ri realizatsiya
qilayotganiga va o’zining obyektlarini interfeys bilan mos ravishda
eksportlayotganiga ishonch hosil qilish kerak, importga kelsak, u holda xatolik
vaqtida importlanayotgan obyektlar xossalar interfeysida fiksirlanganlarni
qoniqtiruvchi oddiy psevdoaylana yaratish mumkin. Modul modul sistemaning
qurilayotgan elementi sifatida, uni turli hil modul tizimlarda foydalana olish
mumkin bo’lishi kerak, faqatgina uni belgisi va interfeysi ushbu modul tizimda uni
qo’llanilishiga mos bo’lsa bas. Eksportlanayotgan obyekt realizatsiya uchun kerak
bo’lgan lokal obyektlarga ham ega bo’lishi mumkinligidan—ular boshqa
modullardan yashirin va ularda qo’llanila olmaydi.
Foydalanuvchi modullarini yozish va ularning obyektlarini dasturlarda qo’llash
quyidagi sabablarga ko’ra effektiv dasturlashni usullaridan biri hisoblanadi.
Birinchidan, modulda ba’zi “predmetli” sohani bazaviy tushunchalarini olib
o’tuvchisi hisoblangan obyektlar aniqlanadi, va shu modul bu predmetli sohaga
kontekst beradi. Shuning uchun bu saohada ishlab chiqishni turli algoritmlarini
bajaruvchi dasturlar, tayyorlardan va muhimi bazaviy obyektlarni bir xil
aniqlanishlaridan foydalanishlari mumkin. Demak, masalan Так, например, в
системном модуле Graph tizimli modulida, bir qancha o'nlab elementar grafik
amallarni realizatsiya qiluvchi grafik funksiyalar va jarayonlar va bir qancha
o’nlab xatolarni, rang va chiziq ko’rinishi va hk kodini bildiruvchi o’zgarmaslar
aniqlandi.
Ikkinchidan, modullar ham, dasturlarda qatnashuvchilar ham bog’liq bo’lmagan
ravishda kompilyatsiya qilinadi. (modul u dasturda qo’llanilishidan avval
kompilyatsiya qilingan bo’lishi kerak). ushbu kompiliyatsiya yordamida katta
dasturlar sezilarli qisqaradi, muhimi ularni ko’p marta kompiliyatsiya qilishda
xatoliklarda.
Modulning uchinchi asosiy xossasi, ular eksportlayotgan obyektlarni
realizatsiyasi va namoyishini berkitadi va “inkapsulyatsiya” qiladi, shunday ekan
ularning modulda bo’lishi mumkin bo’lgan o’zgarishi, foydalanuvchi dasturini
hech qanday qayta ishlanishini talab qilmaydi.
Barcha modullar, ular tomonidan aniqlanadigan o’zgarmaslar, o’zgaruvchilar,
turlar va dasturostilar uchun ularni belgilarini tushunish va esda saqlashni
yengillashtiradigan mnemonik nomlarni qo’llaydi.
Modul ba’zi tizimlarda bir qancha qismlardan tashkil topadi:
- modul mavzusi;
- interfeys qism;
- realizatsiya qilingan qismlar;
- initsializatsiyanlangan qism.
Bu qismlarni har biri yopiq dasturiy fragment hisoblanadi, modulda yuqorida
ko’rsatilgan tartibda faqat bir marta takrorlanadi. Quyida modulni strukturasi
sxemasi, tarkibi va har bir qism belgilariga qarashli kommentariyalari berilgan.
Unit <имя модуля>;{ modul mavzusi}
Interface {modulli interfeys seksiyasi }
Uses < eksportlanayotgan obyektlar spetsifikatsiyasida qo’llaniladigan modullar
nomlari>;
Implementation
Uses <modullar nomi>;
< keyingi modulni eksportlanadigan funksiya va jarayonlar yozilishida
qo’llanadigan modulning lokal obyektlari yozilishi (o’zgarmas, tur, o’zgaruchilar,
funksiyalar va jarayonlar), >
<interfeys seksiyalarida ko’rsatilgan eksportlanadigan funksiya va jarayonlar
yozilishi(ularning realizatsiyasi)>
begin {initsializatsiya seksiyasi}
<modulni chaqirishda qo’llanadigan operatorlar>
end
modulni qo’llanilishiga bir qancha tipik namunalar keltiramiz:
1. modul, ba’zi predmet sohani tushunchasini xarakterlaydigan,
ba’zi
nomlangan yozilgan obyektlar to’plami kabi qo’llanilishi mumkin. Bunday modul
shu soha nilan bog’langan barcha masalalarda qo’llanadi va kerakli tushunchalar
tizimini unifitsirlaydi. Planimetriya masalarini yechib, modul yordamida asosiy
geometrik shakllarni namoyishini unifitsirlash mumkin:
unit Geomfig;
interface
type point =record x, y: real end;
segment = record a, b : point end;
triangle =record a, b, c: point end;
circum = record centre : point; rad:real end
{boshqa shakllarni yozilishi}
const pi = 3.1415926; twopi = 2  pi;
implementation
end
bu yerda modul vazifasi, kerakli tabiatni berilganlari namoyishi bilan
bog’langan turlarni yozilishi ekanligi va balki o’zgarmaslarni umumiy ishlari
uchun kerakli bo’lganligidan realizatsiya bo’limi yo’q. Aniq dasturda (yoki
modulda) yuqorida ko’rsatilgan tur o’zgaruvchilarini kiritish mumkin, dastur
boshida ko’rsatish yoki modul interfeysida uses Geomfig kondtruksiyasida.
2. Modul o’zgartirish sohasiga bog’liq va dasturosti paketini aniqlash uchun
qo’llanilishi mumkin va umumiy realizatsion metodlar bilan ham mumkin. Demak,
masalan, hisoblanuvchi vazifalar qatori uchun, Sustem moduli namoyish qiluvchi
matematik funksiyalar yetali bo’lmasligi ham mumkin, va biz Mathfundeb
nomlangan moduli yordamida bizni qiziqtirgan qo’shimcha funksiyar to’plamini
yaratishimiz mumkin.
unit Mathfun;
interface
function tg (x:real);
function arcSin (x:real):real;
function arcCos (x:real);
function arcTg (x:real):real;
{boshqa matematik funksiyalarni bo’lishi mumkin bo’lgan spetsifikatsiyasi}
Inplementation
{spetsifikatsiya qilingan funksiyalar yozilishi}
end.
Modul bilan eksportlanadigan Spetsifirlangan funksiyalar yozilishidan tashqari,
realizatsiya bo’limi, bir yoki bir qancha spetsifirlangan funksiyalar realizatsiyasi
uchun kerakli bo’lgan ba’zi lokal yordamchi funksiyalar yozilishidan ham tashkil
topishi mumkin. Masalan, polinom va massiv belgisini hisoblash funksiyalari, turli
spetsifirlangan funksiyalar uchun polinom koeffisentlari belgisi. Albatta, barcha
bunday lokal obyektlar eksportlanmaydi, va ularning qo’llanilishi modul
tashqarisida mumkin emas.
3. modul real kompyuterga nisbatan qo’shimcha funksiyalarni bajaruvchi,
virtual kompyuter yaratish uchun qo’llanilishi mumkin. amallar to’plamini
realizatsiya qiluvchi oldingi punktdagi modulni til mashinasini rivoji deb hisoblash
mumkin. lekin ba’zi hollarda spetsializatsiyalangan jarayonni—va uni amallarini,
va uni registrlarini to’liq imitatsiyasiga ega bo’lish kerak. ratsional sonlar ustida
amallarni realizatsiya qiluvchi virtual kompyuterni misol qilib ko’ramiz.
unit RacionalEngine;
interface
Const length = N - 1;
type index = 0...length;
speceint=array [index] of byte;
Rac=record sign (minus, plus);
Numerat, denominat : specint end;
var RR:Rac;RZ,RB:Boolean;
{RR, RZ va RB – bizning virtual protsessor registrlari, RR – har bir
arifmetik amallar natijasi qoladigan registr (shunday nomlanadigan
summator), RB – ratsional sonlarni ifodalovchi chegeraga chiqarish belgisi
(true chiqishda), RZ – nolga bo’lish belgisi (bunday holda true)}
procedure AddR (a, b: Rac; var c:Rac);
procedure SubR (a, b:Rac; var c:Rac);
procedure MultR (a, b:Rac; var c:Rac);
procedure DivR (a, b:Rac; var c:Rac);
{ ratsional sonlarni qo’shish, ayirish, bo’lish va ko’paytirish jarayonlari
spetsifikatsiyasi--- a va b amal argumenntlari, c- natija. Argumentlardan biri
RR registr natijasi hisoblanganda, bu amallarni modifikatsiyasi bo’lishi
mumkin.}
function EqualR (a, b:Rac): Boolean;
function LessR (a, b:Rac): Boolean;
function MoreR (a, b:Rac): Boolean;
{ratsional sonlar munosabati funksiya spetsifikatsiyasi—tenglik, kam,
ko’p }
implementation
procedure Reduction (var m:Rac);
{keyinchalik m ratsional sonini qisqartiruvchi lokal funksiya, agar uni
soni va o’zgaruvchisi umumiy bo’luvchiga ega—bu jarayon barcha
arifmetik amallar uchun kerakli, shuningdek ular uchun iloji boricha
o’zgaruvchi va hisoblovchi belgisi keraksiz tarzda ortmasligi kerak. }
{boshqa lokal dasturlarni mumkin bo’lgan yozilishi}
{yuqorida spetsifirlangan dasturosti-amallar yozilishi}
var i : index; R:specint;
begin RZ:=false; RB:=false;
for i:=0 to lenght do R[i] : = 0; RR.numerat : = R; RR.denominat : =
R;
RR.denominat [leght] : = 1;
RR.sign : = plus;
end;
4. modullar inkapsulirlangan turlar vazifasi sifatida qo’llanilishi mumkin—bu
modullarni qo’llashni eng asosiy metodlaridan biridir (bu haqida avval 9 bobda
gapirilgan).vazifa yechimiga mumkin bo’lgan yondashuvlardan biri— bu
“berilganlardan dasturlash” prinsipiga amal qilish. Qo’pol qilib aytganda, bu
prinsip vazifa yechimini algoritmik qismi bilan shug’ullanishdan oldin, biz ishlab
chiqishimiz kerak bo’lgan va ega bo’lishni hohlagan berilganlarni tabiatini analiz
qilamiz. Bunday berilganlarni har bir tabiati uchun unga mos, amallar to’plamini
aniqlaymiz va inkapsulirlangan tur modulini kelajakdagi interfeysini tuzamiz.
(albatta bunda amallar xossalarini formal bo’lmagan holda aniqlaymiz). Ish olib
boriladigan berilganlar turi munosabatida aniqlab, yechimni algoritmik qismiga
kirish mumkin.
5. yetarlicha murakkab masala yoki masalalar to’plami uchun bo’lajal tizimni
modul strukturasini loyihasi hisoblanuvchi modul analizi bor bo’lishi kerak.
bunday holda modul murakkab masalaning ba’zi masala osti yoki sinf uchun
umumiy masala masala ostisi yechimiga mos tushadi. Bunda modullar orasidagi
dinamik aloqalar, dastur osti parametrlari bilan tasvirlanishlari shart emas, ular
o’zgaruvchilarni eksportlanadigan modullar bilan tasvirlanadi.
Modul analiz natijasi har bir modulning belgisi fiksatsiyasi va uning
interfeysi hisoblanadi.
Bunda modullarni qo’llashni yuqorida Результатом
модульного анализа является фиксация назначения каждого модуля и его
интерфейса. Modulni o’zi (to’g’rirog’i, ular tomonidan yechilayotgan) o’z vaqtida
murakkab bo’lishi mumkin va uning realizatsiyasida qo’shimcha modul analizi-Turbo-Paskal modul tizimini ierarxik qurish vositasi mavjud bo’lishi mumkin:
uses konstruksiyasi yordamida har bir modul boshqa modullar obyektlarini
importlashi mumkin.
Eslatib o’tamiz, modullar importlash munosabati chizmasida, istalmagan,
sikl paydo bo’ldi, ya’ni A modul yana A modul uchraydigan (ba’zi bosqichlarda)
modullarni importlaydigan holat. Turbo-Paskalda ba’zi chegaralarida bu mumkin,
lekin biz bu bilan to’xtab qolmaymiz.
Iterativ qayta ishlash. Iterativ qayta ishlashni birinchi prototipi (iterative
delivery) tizimni yakunlangan yadrosini avvaldan kiritishi kerak. shunday qilib,
unda avvaldan funksionallikni katta qismi jamlangan bo’ladi. Navbatdagi
iteratsiyalar foydalanuvchiga foydalanuvchi interfeysi bilan aniqlashda yordam
berish kerak.
Qiymatsiz funksional qo’shilishi yo’lga qo’yiladi, odatda yadro tizimiga
tegmasdan.
Tez ishlash ikkita tekshirilgan metodlari orasidagi farqni yana bir bor ta’kidlab
o’tamiz. Iterativ qayta ishlash yadro tizimini yaratish bilan boshlanadi va
keyinchalik uni detalizatsiya qiladi. Bundan farqli o’laroq, evolyutsion prototipi
foydalanuvchi interfeysini boshlang’ich qayta ishlashga va uning asosiga
funksionallikni qo’shishga mo’ljallangan.
Bosqichli qayta ishlash. Bоsqichli ishlash (staged delivery) oldingi ikkita
yondashuvlarni kamchiligini yechishga mo’ljallangan—loyiha yakunlash vaqtini
aniqlab bo’lmasligi. Qayta ishlashni boshlab biz, yaratilayotgan dasturiy mahsulot
o’zida nima namoyish qilishini biz yetarlicha bilamiz. Bosqichli masalaning
asosiy vazifasi – buyurtmachiga ishlovchi tizimni iloji boricha tezroq yetkazishdir.
Keyin, buyurtmachi yangi funksionallik qo’shishi mumkin va tizimni navbatdagi
versiyasiga ega bo’lishi mumkin. Lekin bosqich yakunlanishida olinuvchi
versiyalardan har biri ishlovchi hisoblanadi.
Eslatib o’tish kerakki, ushbu yondashuv uni foydalanuvchiga yuborishdan oldin
har bir bosqichi oxirida navbatdagi tizimni asta va jiddiy test o’tkazishni talab
qiladi.
Download