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.