Uploaded by Doha

PARADIGMA YN

advertisement






o
o

o
o

o
o

o
o

o
o

o
o

o
o
o
o
o

o
o
o

o
o

o
o

o
o

o
o
1. “Dasturlash uslublari va paradigmalar” fanining predmeti va vazifalari
Dasturlash fan, san’at va texnologiya sifatida dasturlarni yaratish va qo‘llash jarayonlarini o‘rganadi va ijodiy rivojlantiradi, dasturlarni qurish vositalari va usullarini belgilaydi, ularning xilma-xilligi
amaliyot va tajribalarda shakllanadi va dasturlash tili shaklida belgilanadi. Tez kengayib borayotgan dasturlash tillari to‘plamini tasniflashning murakkabligi “dasturlash paradigmasi” tushunchasini
qo‘llashga olib keladi Ba’zi dasturlash paradigmasini qo‘llabquvvatlaydigan dasturlash tili, dasturlash tizimida mavjud bo‘lgan apparat imkoniyatlaridan operatsion semantikani abstraktsiyalash
darajasida amalga oshirilganda dasturlash paradigmasi xususiyatini katta darajada meros qilib oladi. Ushbu yondashuv bilan paradigmalarning uchta darajaga ajratiladi:
- past darajadagi dasturlash tillari;
- yuqori darajadagi dasturlash tillarida dasturlash;
- yuqori darajadagi tillar asosida dasturlarni tayyorlash.
Pradigma - (yunoncha so’zdan olingan namuna , model ) ilmiy jamoatchilik tomonidan qabul qilingan va birgalikda foydalaniladigan va uning ko’pchilik a’zolarini birlashtirgan fundamental ilmiy
qarashlar , tushunchalar va atamalar
to'plamidir.Dasturlash paradigmasi bu kod yaratish printsiplari va texnikasi to’plamidir. Dasturlash paradigmasi
* dastur kodini tuzilishini tushunish
* kod sifatini baholash tajribasi
* to’g’ri rivojlanish yondashuvini tanlash tajribasi uchun kerak
Dasturlash asosiy modellari :
Imperativ dasturlash
Deklarativ dasturlash
Tarkibiy dasturlash
Funktsional dasturlash
Mantiqiy dasturlash
Obyektga yo’naltirilgan dasturlash
2.Dasturlash paradigmalarining asosiy tushunchalari
Dasturlash paradigmalari, dastur yozish uchun amal qilingan asosiy usullarni ifodalaydi. Har bir paradigmada, dastur tuzilishini, shakl va yaratilish usullarini ifodalovchi asosiy tushunchalar mavjud.
Quyidagi, dasturlash paradigmalari bilan bog'liq asosiy tushunchalardan ba'zilari:
Imperative (Buyruq) Paradigma:
Nima: Dastur buyruqlar va o'tishlar to'plamini o'z ichiga oladi.
Misol: C, C++, Java, Python.
Declarative (Ma'lumotli) Paradigma:
Nima: Dastur nima qilish kerakligini bayon qiladi, lekin qanday qilib bajarmasini o'zi bilmaydi.
Misol: SQL.
Functional (Funksional) Paradigma:
Nima: Funktsiyalarni birinchi obyekt sifatida qo'llaydi. Obyektlar va mablag'lar orqali ishlashdan qutqaradi.
Misol: Haskell, Lisp, Scala.
Object-Oriented (Obyektoriy) Paradigma:
Nima: Obyektga yo'naltirilgan dasturlash, obyektlar orqali ma'lumotlar va funksiyalarni birlashtiradi.
Misol: Java, C++, Python.
Procedural (Dastur) Paradigma:
Nima: Dastur, bitta buyruq va o'tishlar ketma-ketligi sifatida tavsiflanadi.
Misol: C, Pascal.
Event-Driven (Hodisaga Yo'naltirilgan) Paradigma:
Nima: Hodisalar bo'yicha tuzilgan dasturlar. Foydalanuvchi amaliyotlariga bog'liq ravishda ishlaydi.
Misol: JavaScript, GUI dasturlar.
Logic (Mantiq) Paradigma:
Nima: Mantiqiy ifodalarga asoslangan dasturlash turi. Formal mantiqiy ifodalarni ishlatadi.
Misol: Prolog.
Bu paradigmalarning har birining o'ziga xos afzalliklari va chegaralari mavjud. Dasturlashda kerak bo'lgan amal, maslahat, va e'tibor keltiriladigan vaziyatlar mos keladigan dasturlash paradigmasini
tanlashda muhimdir.
Dasturlash tilining darajalari : sentaksis , semantika , pragmatik bo’ladi.
3.Dasturlash paradigmalarini qo’llab quvatlash
Dasturlash paradigmalarini qo'llab quvatlash, dasturchilarga murakkab va samarali dasturlar yaratishda yordam beradi. Har bir paradigmaga xos ravishda, dastur tuzilishi, o'zgartirishlarni olish, yangi
funksiyalarni qo'shish va kodni boshqarish uchun maxsus vositalarni qo'llash mumkin. Quyidagi, dasturlash paradigmalarini qo'llab quvatlash uchun ba'zi umumiy tavsiyalar:
OOP (Object-Oriented) dasturlash uchun:
Obyektlar va Klasslar: Obyektlarni to'g'ridan-to'g'ri bayon etish, ularning xususiyatlarini va metodlarini belgilash.
Vorislik: Klasslar orasida malumot o'tishni osonlashtiruvchi vorislik tizimlarini qo'llash.
Polimorfizm: Metodlarni turli obyektlar uchun qo'llash, kodni kengaytirish va yangi funksiyalarni qo'shish imkoniyatini yaratish.
Functional dasturlash uchun:
Tiklanishsiz Funksiya: Qo'shish, o'zgartirish, olish, funksiyalar uchun tiklanishsiz funksiyalarni qo'llash.
Muhitni O'zgartirishsiz Qo'llash: Muhit o'zgartirishsiz, o'zgarishsiz funksiyalar va obyektlar bilan ishlash.
Rekursiya: Rekursiv funksiyalarni yaratish va ularga qo'llab quvatlash.
Declarative dasturlash uchun:
SQL So'roqlar: SQL-ni qo'llash orqali ma'lumotlar bazasidan ma'lumotlarni so'ramoq va olish.
Deklarativ Til Qo'llash: Dasturni o'zi uchun maqsadlarni aytish, boshqa funksiyalarga yordam bermasdan.
Hodisaga Yo'naltirilgan dasturlash uchun:
Hodisalar va Tapaqishlar: GUI (Grafik Interfeys) dasturlar uchun hodisalar va tapaqishlarni qo'llash.
Qo'shimcha Qo'llashlar: Hodisa bo'yicha qo'shimcha qo'llashlar bilan tuzilgan dasturlar yaratish.
Procedural dasturlash uchun:
Funksiyalashuv: O'zgaruvchilarni va funksiyalarni yaxshi foydalanish, dastur kodini tuzilgan holda yozish.
Modullarlik: Kodni modullarga bo'lib bo'lish, har bir modulni o'zini bir qismi sifatida o'rnating.
Logic (Mantiqiy) dasturlash uchun:
Faktni Bajarish: Faktni bajargan holda mantiqiy ifodalarni yozish.
Tasavvur Qilish: Yaratilgan tasavvurlarni mantiqiy ifodalarga aylantirish va dastur ishini bajarmasdan oldin qanday qilib tasavvur qilish.
Dasturlash paradigmalari orasida mos keluvchi qo'llanma va yondashuvlar, ilg'or dasturchi uchun samarali dastur tuzishda yordam bera oladi.
4. Quyi darajali dasturlash tillari .
Dasturlash tillari – bu insonga komyuterga buyruq berishga yordam beradigan ishora tizimlari. Har qanday dasturlash tili quyidagilarni o’z ichiga oladi :
alifbo – buyruqlarni uzatish uchun ishlatiladigan belgilar;
sintaksis – so’rovlarni yozish qoidalari;
semantika – buyruqlarni semantik ma’nosi
Quyi darajali dasturlash tillari yuqori darajali dasturlash tilllaridan oldin paydo bo’lgan. Birinchi komyuterlar ikkilik tilda dasturlashtirilgan - “1” va “0” kombinatsiyasi:
Quyi darajadagi tillarda o’rnatilgan funksiyalar mavjud emas. Ular ma’lum bir protsessor bilan bog’lanadi , shuning uchun bir komyuterdagi kodni boshqa komyuterda ishlatib bo’lmaydi . Har bir
protsessor ishlab chiqaruvchisi o’z ko’rsatmalariga ega.
Eng keng tarqalgan past darajali tillar – bu mashina kodi va montaj tili.
Quyi
darajali
dasturlash yordamida kompyuterning
apparat
funksiyalariga "to'g'ridan-to'g'ri" kirish mumkin:
⦁ protsessorga
⦁ Tezkor xotiraga; • yadroga; va boshq.
Quyi darajali dasturlash tillari yuqori darajadagi dasturlash tillari kabi keng tarqalmagan, lekin ular kompyuter texnologiyalarining asosi hisoblanadi, hamda quyi darajali dasturlash tillaridan foydalanib
yoziladi:
⦁ Operatsion tizimlar;
⦁ yadro proshivkasi;



⦁ periferik qurilmalar uchun drayverlar va boshq.
Quyi darajadagi tillar kompyuter qurilmalarida sodir bo'ladigan jarayonlarni boshqaradi. Shuning uchun ular asosan qurilma ustidan qattiq nazorat zarur bo'lgan dasturlash sohalarida qo'llaniladi,
masalan:
⦁ harbiy soha;
⦁ tibbiy dasturlar;
⦁ muhandislik;
⦁ kosmik sfera va boshq.
Ammo ular faqat ushbu sohalarda qo'llaniladi deb o'ylamaslik kerak. Quyi darajadagi til har bir kompyuterda mavjud, chunki u drayverlarni, yadrolarni va operatsion tizimlarni yozish uchun ishlatilgan.
Bunda quyi darajali tillarga misol qilib :
Assembler
Fortran
Algol
•
•
•
•
5) Yuqori darajali dasturlash tillari.
Yuqori darajadagi dasturlash tillari murakkab dasturlash vazifalarini bajarishni osonlashtiradi va dasturiy ta’minotni moslashtirishni soddalashtiradi.
Yuqori darajadagi dasturlash tillari; C#; C++; Python; Java; JavaScript; PHP; Cyclone; Ada; Swift;
Yuqori darajali dasturlash tillarida loyihaning Frontend va Backend qismlarni yozishimiz mumkin. Har biri sintaksisi va bajaradigan ishiga qarab turli yo‘lanishlarda qo`llaniladi.
Xotiraga qo'yiladigan talablar;
Yuqori darajadagi dasturlash tillarida yozilgan dasturlar katta hajm egallaydi
Foydalanish qulayligi;
inglizcha iboralardan tashkil topgan yuqori darajadagi tillarni tushunish osonroq.
Shuningdek, yuqori darajadagi dasturlash tillarining afzalliklari quyidagi faktlarni o’z ichiga oladi:
Alfavit mashina alifbosidan sezilarli darajada kengroqdir. U 256 ta belgidan iborat va har qanday dizaynni tasvirlash imkonini beradi;
operatorlar va kalit so’zlar uchun ma’noli tabiiy til so’zlari ishlatiladi;
ishlab chiqilgan boshqaruv operatorlari va ma’lumotlar tuzilmalarini tavsiflash vositalari uchun katta imkoniyatlar;

Python tiliga misol.
C++ tiliga misol.
6) Imperativ protsedurali dasturlash. Imperativ dasturlash tamoyillari. Imperativ dasturlash turlar.
Imperativ protsessual dasturlash - bu dasturlash paradigmasi bo'lib, unda asosiy e'tibor muayyan maqsadga qanday erishishni batafsil va bosqichma-bosqich tasvirlashga qaratilgan. Imperativ
dasturlashda dastur ma'lumotlar ustida ishlaydigan bir yoki bir nechta protseduralardan (funktsiyalar yoki pastki dasturlar deb ham ataladi) tuziladi. Protseduralar o'zgaruvchilarni o'zgartirish orqali
dastur holatini o'zgartiradigan bayonotlar ketma-ketligidan iborat. Bu paradigma topshiriq bayonlari, tsikllar va shartli tarmoqlanishlardan foydalanish bilan tavsiflanadi. Imperativ dasturlash
paradigmasi holatni o’zgartirish orqali bosqichma-bosqich vazifa bajaradi. Maqsadga qanday erishish mumkinligiga e’tibor qaratiladi. Imperativ dasturlash paradigmasi bir nechta bosqichlardan iborat
bo'lib, ularning barchasi bajarilgandan so'ng, natija saqlanadi. Imperativ dasturlash - bu kompyuter tomonidan bajarilishi kerak bo'lgan buyruqlar yoki ko'rsatmalarning aniq ketma-ketligini aniqlashga
qaratilgan paradigma. Imperativ dasturlash paraigmasini quyidagi xususiyatlar bilan tavsiflanadi:
• Manba kodi buyruqlardan (ko'rsatmalardan) qurilgan;
• Ko’rsatmalar ketma-ketlikda bajariladi;
• Joriy ko’rsatmalarni bajarish orqali olingan ma’lumotlar keyingi ko’rsatmalar orqali xotiradan o’qilishi mumkin;
• Ko'rsatmalarni bajarish orqali olingan ma’lumotlar xotiraga yozilishi mumkin.
Imperativ dasturlash tillariga misollar: Java; C++; Paskal; Python; Ruby; Fortran; PHP
Bu yerda imperativ dasturlashning asosiy tamoyillaridan ba'zilari:
Holat o‘zgarishlari, O'zgaruvchilar va topshiriqlar, Boshqaruv tuzilmalari, Protsessual abstraktsiya, Ketma-ket bajarilish, O'zgaruvchanlik.
7) Standart imperativ protsedurali dasturlash.
Standart imperativ protsessual dasturlash (IPD) axborotni qayta ishlash jarayonini xotira holatidagi mahalliy o‘zgarishlarning chekli ketma-ketligi (imperativ protsessual uslub) sifatida
ko‘rib chiqadi. IPDma’lumotlar turlarini boshqarish va kompilyatsiya paytida dasturlarni optimallashtirishning statik usullarini hisobga olgan holda “dastur” va “ma’lumotlar” tushunchalarini aniq
ajratish bilan tavsiflanadi. Standart dasturni talqin qilishning umumiy mexanizmini qiymatlari o‘zgarishi mumkin bo‘lgan o‘zgaruvchilar va ta’riflari o‘zgarmagan teglar va protseduralar uchun alohida
nomlar jadvali bo‘lgan avtomat sifatida ko‘rib chiqish tabiiydir.
1. Protseduralar/funksiyalar: Protsessual dasturlashning asosi ma'lum bir vazifani bajarish uchun chaqirilishi va bajarilishi mumkin bo'lgan kod bloklari deb ataladigan protseduralar yoki
funktsiyalardan foydalanish hisoblanadi. Ushbu protseduralar kiritish parametrlarini olishi va natijalarni qaytarishi mumkin.
2. O'zgaruvchilar va topshiriqlar: Protsessual dasturlash ma'lumotlarni saqlash va boshqarish uchun o'zgaruvchilardan foydalanishga tayanadi. Ushbu o'zgaruvchilarning qiymatlari dasturni bajarish
jarayonida tayinlash bayonotlari yordamida o'zgartirilishi mumkin.
3. Ketma-ket bajarilish: Dasturlar ketma-ket, bir vaqtning o'zida bir ko'rinishda, yozilish tartibiga rioya qilib bajariladi. Ushbu ketma-ket bajarilish jarayoni protsessual dasturlash paradigmasi uchun
zarurdir.
4. Boshqaruv tuzilmalari: Protsessual dasturlash tillari muayyan shartlar asosida bajarilish oqimini boshqarish uchun tsikllar (for, while) va shartli bayonotlar (if-else) kabi boshqaruv tuzilmalarini
taqdim etadi.
5. Imperativ bayonotlar: kiritish/chiqarish operatsiyalari va dastur holatiga bevosita ta'sir qiluvchi boshqa harakatlar.
6. Modullilik: Paradigma modullik tushunchasini targ'ib qiladi, bu yerda kod alohida protseduralar yoki funktsiyalarga ajratiladi, bu esa qayta foydalanish va texnik xizmat ko'rsatishni osonlashtiradi.
Standart imperativ protsessual dasturlashni qo'llab-quvvatlaydigan tillarning keng tarqalgan misollariga C, Paskal va BASIC kiradi.
Umuman olganda, standart imperativ protsessual dasturlash algoritmlarni amalga oshirish va hisoblash muammolarini hal qilishda aniq va to'g'ridan-to'g'ri yondashuvni ta'minlovchi dasturiy
ta'minotni ishlab chiqishda asosiy paradigma bo'lib qolmoqda.
8) Strukturaviy dasturlash . Spetsifikatsiya.
1. Strukturaviy dasturlash:
Strukturaviy dasturlash, nomidan ko'rinib turibdiki, OOP ning kashshofi sifatida qabul qilinadigan va odatda yaxshi tuzilgan va ajratilgan modullardan iborat bo'lgan texnikadir. Ushbu dasturlashda
foydalanuvchi o'zining foydalanuvchi tomonidan belgilangan funktsiyalarini yaratishi mumkin, shuningdek, ushbu metodologiya dasturchilarga dasturlar mantig'iga rioya qilishlariga imkon berish
uchun shartsiz uzatish bilan bog'liq muammolarni hal qilishga harakat qiladi. Bundan tashqari, dizayn va mantiqiy tuzilish bosqichida ko'proq intizom talab qiladi.
Misol: Paskal, ALGOL, C, Modula-2 va boshqalar.
Strukturaviy dasturlash - bu funksional uslubning imperativ protsessual dasturlashga proyeksiyasi desak mubolag‘a bo‘lmaydi. Imperativ dasturlarni funktsional dasturlarga qisqartirish texnikasi dastur
sxemasini funktsional shakllarga belgilash yoki qayta yozish qoidalarini aniqlashdan iborat. Bu yerda odatda dasturlash spetsifikatsiyasiga kiritilgan asosiy komponentlar:
1. Funktsional talablar: Ushbu bo'lim dasturiy ta'minot amalga oshirishi kutilayotgan o'ziga xos funktsiyalarni tavsiflaydi. U turli sharoitlarda tizimning kirishlari, natijalari va xatti-harakatlari haqida
tafsilotlarni o'z ichiga oladi.
2. Funktsional bo'lmagan talablar: Bular dasturiy ta'minotning ishlashini baholash uchun foydalaniladigan mezonlarni, masalan, unumdorlik, foydalanish qulayligi, xavfsizlik va kengayish qobiliyatini
belgilaydi.
3. Ma'lumotlarga qo'yiladigan talablar: Ushbu bo'lim tizim boshqaradigan, saqlaydigan yoki o'zaro aloqada bo'ladigan ma'lumotlarni, jumladan, tuzilishi, formati va saqlash mexanizmlarini belgilaydi.
4. Interfeys talablari: Bular dasturiy ta'minot tizimi foydalanadigan interfeyslarni, jumladan, foydalanuvchi interfeyslari, tashqi tizim interfeyslari va aloqa protokollarini tavsiflaydi.
5. Dizayn cheklovlari: ishlab chiqish jarayonida rioya qilinishi kerak bo'lgan har qanday cheklovlar yoki cheklovlar, masalan, texnologiya tanlovi, platformaga bog'liqlik yoki tartibga solish talablari.
6. Taxminlar va bog'liqliklar: Ushbu bo'lim spetsifikatsiya davomida qilingan har qanday taxminlarni sanab o'tadi va dasturiy ta'minot bog'liq bo'lgan har qanday tashqi omillar yoki tizimlarni aniqlaydi.
7. Sifat atributlari: Bu dasturiy ta'minot javob berishi kerak bo'lgan ishonchlilik, barqarorlik, sinovdan o'tish mumkinligi va boshqa sifat ko'rsatkichlarini o'z ichiga olishi mumkin.
8. Foydalanish holatlari yoki stsenariylari: dasturiy ta'minot qo'llaniladigan bir nechta o'ziga xos stsenariylarning batafsil tavsifi, ko'pincha tizimning harakatini tasvirlash va aniqlashtirish uchun
diagrammalar va hikoya tavsiflaridan foydalanadi.
Dasturlash spetsifikatsiyalari dasturiy ta'minotni ishlab chiqish yaxshi aniqlangan, tashkil etilgan va manfaatdor tomonlarning talablari bilan mos kelishini ta'minlash uchun juda muhimdir. Ular
dasturchilar, testerlar va boshqa loyiha a'zolari uchun ma'lumot nuqtasi bo'lib xizmat qiladi, dasturiy ta'minotni amalga oshirish, sinovdan o'tkazish va tekshirishga rahbarlik qiladi.
9) Funksional dasturlash. Yuqori tartibli finksiyalar. Toza funksiyalar. Rekursiya
Funktsional dasturlash ma’lumotlarni qayta ishlash jarayonini universal funktsiyalar yordamida ularning xaritalashlari tarkibi sifatida ko‘rib chiqadi. Ushbu yondashuvdagi dastur
ma’lumotlar turlaridan boshqa narsa emas. Funktsional dasturlash axborot jarayonlarini tashkil etish uchun mustaqil ishlab chiqilgan vositalar va usullarning sintaktik xilma-xilligini engishga muvaffaq
bo‘ldi. Bu dasturlashtiriladigan jarayonlarni tashkil qilishda ishtirok etadigan semantik quyi tizimlarning namoyon bo‘lishi va ortogonallashuviga e’tibor qaratish tufayli mumkin bo‘ldi. Yagona
ma’lumotlar tuzilmalari va funktsional ob’ektlar to‘plamlari tasvirini ishlab chiqish bir xil darajada muhimdir. Bularning barchasi funktsional dasturlash tillarini heterojen tuzilmalarni konjugatsiya qilish
vositasi sifatida ko‘rib chiqishga imkon beradi. Ularga asoslanib, siz mashinadan mustaqil uslubda ifodalanishi mumkin bo‘lgan har qanday integral konstruktsiyalarni amalga oshirishingiz mumkin.
Funktsional dasturlash tillari moslashuvchan ro‘yxatlar va mavhum atomlardan foydalanadi. JFP dasturlarni bajarish jarayonida qiymatlar turlarini to‘liq nazorat qilishga qaratilgan bo‘lib,
dinamik tahlil va hisob- kitoblarni kechiktirish bilan nazorat qilish, xotiradan qayta foydalanishni avtomatlashtirish - “axlat yig‘ish”.
Funktsional dasturlash usullari formulalarni ifodalash va o‘zgartirish uchun rasmiy matematik tilga asoslanadi, shuning uchun funktsional dasturlash asoslarining aniq, etarlicha to‘liq
tavsifini berish va modellashtirilgan turli xil dasturlash paradigmalarini qo‘llab-quvvatlash va ishlab chiqish uchun dasturlash tizimini belgilash mumkin. faoliyatni tashkil qilishda funktsional yondashuvdan
foydalanish.
Funktsional dasturlashning qurilishi o‘zining mantiqiy xulosasini spetsifikatsiyalar, ma’lumotlar turlari, vizual diagrammalar, formulalar va boshqalarga asoslangan dasturlarni sintaktik
boshqariladigan loyihalash uchun qulay bo‘lgan yuqori tartibli funktsiyalarni aniqlash darajasida oladi.
Yuqori tartibli funksiya - Dasturlashda boshqa funksiyalarni argument sifatida qabul qiladigan yoki natijada boshqa funksiyani qaytaradigan funksiyadir. Asosiy g'oya shundaki, funktsiyalar boshqa
ma'lumotlar ob'ektlari bilan bir xil maqomga ega. Yuqori tartibli funksiyalardan foydalanish, ular bajaradigan hisob-kitoblarning murakkabligini hisobga olgan holda, mavhum va ixcham bo'lgan
dasturlarda qo’llaniladi.
Yuqori tartibli funksiyalar boshqa funktsiyalarni boshqaradigan funktsiyalar hisoblanadi. Ularning argumentlari anonim va sof funktsiyalar hisoblanadi shuningdek, asosiy funksiyani bajargandan so'ng,
natija sifatida qaytarilishi mumkin.
Toza funksiya (savolda sof funksiya deb yozilgan bo’lishi kerak edi) - Faqat o'z kontekstini boshqaradigan va butun dasturning global kontekstiga (holatiga) ta'sir qilmaydigan kod blok hisoblanadi.
# Hech narsani o'zgartirmaydigan va bir xil argument berilgan sof funksiya har doim bir xil natijani qaytaradi:
def inc(x):
return x + 1
>>> inc(10)
11
>>> inc(10)
11
>> > inc(10)
11
Rekursiya deb shundаy kоnstruktsiyagа аytilаdiki, funktsiya o‘zini o‘zi chаqirаdi. To‘g‘ri vа nisbiy rekursiya аjrаtilаdi. Funktsiya to‘g‘ri rekursiv deyilаdi, аgаr tаnаsidа o‘zigа murоjааt bo‘lsа.
Funktsiya bоshqа funktsiyani chаqirsа vа bu funktsiya o‘z nаvbаtidа birinchi funktsiyani chаqirsа, bundаy funktsiya nisbiy rekursiv deyilаdi.
Rekursiyani qo‘llаshgа klаssik misоllаr – dаrаjаggа оshirish vа sоn fаktоriаlini hisoblаsh. Bu misоllаr rekursiyani tushuntirish qulаy bo‘lgаni uchun klаssik hisoblаnаdi, lekin ulаr iterаtsiоn usullаrgа
ko‘rа аfzаllikkа egа emаs.
10) Mantiqiy dasturlash. Mantiqiy dasturlash tillari. Predikatlar. Deklorativ dasturlash.
Mantiqiy dasturlash ma’lumotlarni qayta ishlashni muvaffaqiyatli natija beradigan ta’riflarning ixtiyoriy tarkibini (tenglamalar, predikatlar shakllari) tanlashga qisqartiradi. Aynan formulalarni
qayta ishlash asos bo‘ladi - hisoblash formula bo‘yicha operatsiya sifatida qaraladi. Agar u bajarilmasa, ta’riflarning boshqa variantlari qidiriladi. MD tillarida namunalar bilan mos keladigan variantlarni
to‘g‘ridan-to‘g‘ri sanab o‘tish va tanlov muvaffaqiyatsiz bo‘lgan taqdirda orqaga qaytishni tashkil qilish mumkin deb hisoblanadi. Variantlarni sanab o‘tish chuqurlikdagi grafikni kesib o‘tishga
o‘xshaydi. Aniq umidsiz qidiruvni istisno qilish uchun ro‘yxatga olishni nazorat qilish vositalari mavjud.
Deterministik bo‘lmagan jarayonlarni bajarish uchun izohli avtomat diagnostik vaziyatga tushganda davomiy hisob-kitoblar tsikli sifatida ifodalanishi mumkin. Davomi funktsional ob’ekt
ta’riflari to‘plamidan boshqa variantni tanlashdan iborat (orqaga qaytish). Agar formulaning qiymatini hisoblash imkonini beruvchi variantlar to‘plamini tanlash imkoni bo‘lmasa, hisoblash
muvaffaqiyatsiz deb hisoblanadi.
Deklorativ dasturlash tillari. Prolog - bu sun'iy intellekt va hisoblash tilshunosligi muammolari bilan bog‘liq bo‘lgan eng mashhur umumiy maqsadli mantiqiy dasturlash tili. U birinchi tartibli
mantiqqa asoslanadi va an'anaviy dasturlash tillaridan farqli o‘laroq, deklarativlik va determinizmga ustunlik beradi. Mantiqiy dastur faktlar va qoidalar sifatida ifodalangan munosabatlar nuqtai
nazaridan ifodalanadi. Prolog tili teoremani isbotlashni avtomatlashtirish va ekspert tizimlarini, shu jumladan tabiiy tillar uchun lingvistik protsessorlarni ishlab chiqish uchun ishlatilgan. Mantiqiy
dasturning bajarilishi munosabatlar tizimi bo‘yicha so‘rovga javob sifatida tushuniladi. Aloqalar va so‘rovlar atamalar va bandlardan tuzilgan.
Prolog dasturlash tili 1972 yilda A. Kolmerauer tomonidan taklif qilingan. (Alen Kolmerauer), tilning protsessual talqini Robert Kovalski tomonidan amalga oshirilgan va 1973 yilda
tasvirlangan, 1974 yilda nashr etilgan. Tilning amaliyligi 1977 yilda Devid Uorren tomonidan kompilyator yaratilishi bilan keskin oshdi va belgilarni qayta ishlash tezligini Lisp tezligiga yaqinlashtirdi.
Predikat tushunchasi. Mantiq algebrasida mulohazalar faqatgina chin yokiyolg‘on qiymat qabul qilishi nuqtai nazaridan qaralib, mulohazalarning strukturasiga ham, hattoki, mazmuniga
ham e’tibor berilmaydi. Ammo fanda va amaliyotda mulohazalarning strukturasi va mazmunidan kelib chiqadigan xulosalardan (natijalardan) foydalaniladi. Masalan, «Har qanday romb
parallelogrammdir;ABCD– romb; demak, ABCD– parallelogramm». Asos (shart) va xulosa mulohazalar mantiqining elementar mulohazalari bo‘ladi va ularni bu mantiq nuqtai nazaridan bo‘linmas, bir
butun deb va ularning ichki strukturasini hisobga olmasdan qaraladi. Shunday qilib, mantiq algebrasi mantiqning muhim qismi bo‘lishiga qaramasdan, ko‘pgina fikrlarni tahlil qilishga qodir (yetarli)
emas. Shuning uchun ham mulohazalar mantiqini kengaytirish masalasi vujudga keldi, ya’ni elementar mulohazalarning ichki strukturasini ham tadqiq eta oladigan mantiqiy sistemani yaratish
muammosi paydo bo‘ldi. Bunday sistema mulohazalar mantiqini o‘zining bir qismi sifatida butunlay o‘z ichiga oladigan predikatlar mantiqidir.
1- t a ’ r i f . M to‘plamda aniqlangan va ( 0 , 1) to‘plamdan qiymat qabul P(x) funksiya bir joyli (bir o‘rinli) predikat deb ataladi.M to‘plamni P(x) predikatning aniqlanish sohasi deb aytamiz.P(x)
predikat chin qiymat qabul qiluvchi hamma x=M elementlar to‘plamiga P(x)predikatning chinlik to‘plami deb ataladi, ya’ni P(x) predikatning chinlik to‘plami 1p= (x:x=M ,P ( x )=1) to‘plamdir.
2- t a ’ r i f . Agar M to‘plamda aniqlangan P(x) predikat uchun I p=M(Ip=Ø) bo‘lsa, u aynan chin (aynan yolg‘on) predikat deb ataladi.Endi ko‘p joyli predikat tushunchasini o‘rganamiz. Ko‘p joyli
predikat predmetlar orasidagi munosabatni aniqlaydi.«Kichik» munosabati ikki predmet orasidagi binar munosabatni ifodalaydi . «x
3- t a ’ r i f . M=M1x M2 to‘plamda aniqlangan va (1,0) to‘plamdan qiymat oluvchi ikki argumentli P(x,y) funksiya ikki joyli predikat deb ataladi.
Predikatlar ustida mantiqiy amallar. Predikatlar ham mulohazalar singari faqatgina chin yoki yolg‘on (1 yoki 0) qiymat qabul qilganliklari tufayli ular ustida mulohazalar mantiqidagi hamma mantiqiy
amallarni bajarish mumkin.Bir joyli predikatlar misolida mulohazalar mantiqidagi mantiqiy amallarning predikatlarga tatbiq etilishini ko‘raylik.
4- t a ’ r i f . Berilgan M to‘plamda aniqlangan P(x) va Q(x) predikatlarning kon’yunksiyasi deb, faqat va faqat x=M qiymatlarda aniqlangan hamda P(x) va Q(x)lar bir vaqtda chin qiymat qabul
qilgandagina chin qiymat qabul qilib, qo lgan barcha hollarda yolg‘on qiymat qabul qiluvchi yangi predikatga aytiladi va u P(x)^Q (x) kabi belgilanadi.
5- t a ’ r i f . Berilgan M to‘plamda aniqlangan P(x) va Q(x) predikatlarning diz’yunksiyasi deb, faqat va faqatgina x=M qiymatlarda aniqlangan hamda P(x) va Q(x) predikatlar yolg‘on qiymat qabul
qilganda yolg‘on qiymat qabul qilib, qolgan barcha hollarda chin qiymat qabul qiluvchi yangi predikatga aytiladi va u P(x) v Q(x) kabi belgilanadi.P(x)vQ(x) predikatning chinlik sohasi IpUIQ to‘plamdan
iborat bo‘ladi.
6- t a ’ r i f . Agar hamma x=M qiymatlarda P(x) predikat chin qiymat qabul qilganda yolg‘on qiymat va x=M ning barcha qiymatlarida P(x) predikat yolg‘on qiymat qabul qilganda chin qiymat qabul
qiluvchi predikatga P(x) predikatning inkori deb ataladi va u Ṗ(x) kabi belgilanadi.Bu ta’rifdan Ip=M\Ip=CIp kelib chiqadi.
7- t a ’ r i f . Faqat va faqatgina x=M lar uchun bir vaqtda P(x) chin qiymat va Q(x) yolg‘on qiymat qabul qilganda yolg‘on qiymat qabul qilib, qolgan hamma hollarda chin qiymat qabul qiladigan
P(x)→Q(x) predikat P(x) va Q(x) predikatlarning implikasiyasi deb ataladi.
Har bir tayinlangan x=M uchun P(x)→Q(x)=Ṗ(x)vQ(x) teng kuchlilik to‘g‘ri bo‘lganligidan IP→Q=IṖUIQ=CIPUIQ o‘rinlidir.
13. Ob'ektga yo'naltirilgan dasturlash. Sinflar, ob'ektlar.
(OOP) - bu ma'lumotlar va ushbu ma'lumotlarni manipulyatsiya qiluvchi usullarni o'z ichiga olgan ob'ektlar tushunchasiga asoslangan d asturlash uslubi; OOP kodlarni bir-biri Ob'ektga yo'naltirilgan dasturlash
bilan o'zaro ta'sir qiluvchi ob'ektlarga tartibga solish orqali masshtablash va texnik xizmat ko'rsatish oson bo'lgan dasturl arni yaratish imkonini beradi. Hozirgi kunga OOP - bu eng mashhur rivojlanish paradigm
hisoblanadi. Ob'ektga yo'naltirilgan dasturlash, dasturlash muhitida eng katta ta'sir ko'rsatdi. Ob'ektga yo'naltirilgan dasturlash 1960-yillarning oxirida Simula dasturlash tilining paydo bo'lishi bilan paydo
bo'lgan. Yillar davomida Smalltalk ob'ektga yo'naltirilgan dasturlash paradigmasini takomillashtirgan. Python, Java, C va C# tillari bugungi kunda eng mashhur ob'ektga yo'naltirilgan tillar qatoriga kiradi.
OOP 4 ta asosiy qurilish bloklarini o'z ichiga oladi:

sinflar

atributlar

usullar

ob'ektlar.
1. Sinflar ob'ektlarni tasvirlash uchun shablonlarni taklif qiladi. Sinflar asosan ob'ektlarni yaratish uchun sxema bo'lib xizmat qiladi. Sinf ichida dasturchilar tegishli ob'ektlar tomonidan havola
qilinadigan o'zgaruvchilar va usullarni belgilashlari kerak. Avtomobil misolida sinf avtomobil ob'ektining xususiyatlarini ifodalaydi, avtomobilning funksionalligini qamrab oladi va birinchi navbatda
avtomobilni sinf sifatida e'lon qiladi.
2.Ob'ektlar
Ob'ektlar sinflar bilan birga mavjud. Aslini olganda, bu dasturchi aniqlay oladigan aniq tuzilishga ega bo'lgan ma'lumotlar maydonlari. Ob'ekt chaqirilgandan so'ng, dastur misol yaratadi. Ob'ektga
murojat qilish uchun mashinaning o'ziga xos rangi va turi kabi sinfga tegishli ma'lumotlarni taqdim etish kerak bo'ladi.
avtomobil = Avtomobil ('qizil', 'Sedan')
Yuqoridagi kod noyob avtomobil ob'ektining ma'lum bir nusxasini rasmiy ravishda o'rnatadi.
Haydash usuli qanday ishlashini ko'rishingiz mumkin.
car.drive()
•
•
•
•
14.OOP ning asosiy tamoyillari:
Abstraktsiya-Biror narsadan (ob'ekt yoki usuldan) foydalanayotganda, uning qanday ishlashini bilish shart emas. Masalan, qahva mashinasini olaylik, uning ichida ancha murakkab mexanizm mavjud.
Biroq, undan bizga kerak bo'lgan narsa - bug'langan krujka tasviri bo'lgan tugmani bosib, xushbo'y espressoning bir qismini olishdir.
Inkapsulyatsiya - abstraktsiyani yaratish usullaridan biri. Har bir ob'ekt ma'lumotlar to'plamidan (o'zgaruvchilar, usullar) iborat.
Meros olish - Sinflardan tashqari, ob'ektga yo'naltirilgan dasturlash tillari ham kichik sinflarga ega. Ular ota-klassning barcha atributlarini o'z ichiga oladi, lekin boshqa atributlarni ham o'z ichiga olishi
mumkin.
Polimorfizm- irsiyat natijasidir. Ushbu kontseptsiyani to'liq tushunish uchun ba'zi dasturlash bilimlari kerak, shuning uchun biz bu erda asoslarga yopishib olamiz. Polimorfizm dasturchilarga bir xil
nomli, ammo turli ob'ektlarda usullardan foydalanishga imkon beradi.
15. Ob'ektga yo'naltirilgan dasturlashning funksional modeli.
Ma’lumot mavjud emas !
16. Ko'p paradigmali dasturlash tillari.
O‘ta yuqori darajadagi tillar (YDT) asosida dasturlarni tayyorlash ayniqsa muhim va murakkab vazifalarning dasturlashtirilgan yechimlarining uzoq umr ko‘rishiga qaratilgan. Hayotiy tsiklning
kengayishi, ilgari amalga oshirilgan yoki kelajakda rejalashtirilgan ruxsat etilgan qo‘shni komponentlarning to‘liq joylariga nisbatan ma’lum bir erkinlik darajasi bilan umumlashtirilgan echimlarni
taqdim etish orqali erishiladi, bu Java uchun xosdir. YDTsemantikasi tomonidan ruxsat etilgan jarayonlar oilasini amalga oshirish torayishi quyidagi pragmatik sabablarga ko‘ra YDTmaqsadlariga yoki
uning tushunchalariga zid keladi:





dasturlashtiriladigan yechimlarni yuqori darajada abstraktsiyalash;
oldindan aytib bo‘lmaydigan tashqi omillarga bog‘liq bo‘lgan vazifalar hal qilinadi;
hisob-kitoblarning asosiy vositalari va/yoki algoritmlari parallellikdan foydalanadi;
hisoblash tezligi va ishlashi uchun tegishli pragmatik talablar;
dinamik ravishda qayta sozlanadigan ko‘p protsessor-komplekslar.
Odatda, yangi YDT yaratuvchilari manba material sifatida bir yoki bir nechta asosiy YDT dan foydalanadilar va ularda ixtirochilik vositalari va usullarini quradilar. Tegishli muammolarni qoniqarli hal
qilish paradigmalari asosiy Javalardan meros bo‘lib qolgan. Bunday hollarda Java ning paradigma xarakteristikasi asosiy Javaga nisbatan shakllantirilishi mumkin, til konstruksiyalarining tashqi sintaktik
o‘xshashligi yashirsa ham har xil semantika.
17. Parallel dasturlash. Paralel dasturlarni yaratish yondashuvi.
Parallel dasturlash
1 ) bu dasturning bajarilishini tezlashtirish uchun vazifalarni bir vaqtning o'zida bajariladigan ko'plab kichik qismlarga bo'lish usuli. Muvaffaqiyat siri ko'p yadroli protsessorlardan samarali
foydalanishdir.
2 ) bu muammoni turli xil hisoblash qurilmalarida bir vaqtning o'zida bajarilishi mumkin bo'lgan ko'plab kichikroq va mustaqil kichik vazifalarga bo'lish jarayoni. Bu bajarilish vaqtini tezlashtiradi va
dastur ish faoliyatini yaxshilaydi.
Parallel dasturlarni yaratish yondashuvlari
•
Ko‘p bosqichli dasturlash: Bu yondashuv parallel ravishda ishlaydigan va vazifalarni bajaradigan bir nechta bajarilish linyasidan foydalanadi. Bu bir nechta protsessor yadrolari
yordamida dastur ish faoliyatini oshirish imkonini beradi.
•
Tarqalgan dasturlash: Ushbu yondashuvda vazifalar tarmoqda ishlaydigan bir nechta kompyuterlar o‘rtasida taqsimlanadi. Bu sizga kattaroq muammolarni hal qilish va hisob-kitoblarni
tezlashtirish imkonini beradi.
•
Asinxron dasturlash: Ushbu yondashuv bilan bajarilish linyalari vazifa tugashini kutmasdan bloklanmaydi, balki boshqa vazifalar ustida ishlashni davom ettiradi. Bu resurslardan
foydalanish samaradorligini oshirish va kutish vaqtini qisqartirish imkonini beradi.
•
•
1.



•
Funktsional dasturlash: Ushbu yondashuv tegishli bo‘lmagan va tashqi o‘zgaruvchilarni o‘zgartirmaydigan funktsiyalardan foydalanadi. Bu dasturlarni yanada ishonchli va bashorat
qilish imkoniyatini ortiradi.
•
GPU dasturlash: Bu yondashuv vazifalarni bajarish uchun GPU'lardan foydalanadi. Bu grafik va tasvirni qayta ishlash operatsiyalarini tezlashtirish imkonini beradi.
18. Parallel dasturlashni yaratish yondashuvi.
•
Ko‘p bosqichli dasturlash: Bu yondashuv parallel ravishda ishlaydigan va vazifalarni bajaradigan bir nechta bajarilish linyasidan foydalanadi. Bu bir nechta protsessor yadrolari
yordamida dastur ish faoliyatini oshirish imkonini beradi.
•
Tarqalgan dasturlash: Ushbu yondashuvda vazifalar tarmoqda ishlaydigan bir nechta kompyuterlar o‘rtasida taqsimlanadi. Bu sizga kattaroq muammolarni hal qilish va hisob-kitoblarni
tezlashtirish imkonini beradi.
•
Asinxron dasturlash: Ushbu yondashuv bilan bajarilish linyalari vazifa tugashini kutmasdan bloklanmaydi, balki boshqa vazifalar ustida ishlashni davom ettiradi. Bu resurslardan
foydalanish samaradorligini oshirish va kutish vaqtini qisqartirish imkonini beradi.
•
Funktsional dasturlash: Ushbu yondashuv tegishli bo‘lmagan va tashqi o‘zgaruvchilarni o‘zgartirmaydigan funktsiyalardan foydalanadi. Bu dasturlarni yanada ishonchli va bashorat
qilish imkoniyatini ortiradi.
•
GPU dasturlash: Bu yondashuv vazifalarni bajarish uchun GPU'lardan foydalanadi. Bu grafik va tasvirni qayta ishlash operatsiyalarini tezlashtirish imkonini beradi.
Nega parallel dasturlash kerak ?
 Murakkab dasturlash hisob-kitoblar, simulyatsiyalar yoki katta hajmdagi ma'lumotlarni qayta ishlash kabi murakkab vazifalarni bajarish uchun ketadigan vaqtni qisqartirishi mumkin.
 Masshtablilik. Parallel dasturlash tufayli siz katta hajmdagi ma'lumotlar bilan ishlash uchun hisoblash resurslaridan va miqyosli dasturlardan samarali foydalanishingiz mumkin.
 Hosildorlikni oshirish. Parallel dasturlar bir vaqtning o'zida bir nechta vazifalarni bajarishi mumkin, bu esa tizimning umumiy ishlashini yaxshilaydi.
19. Parallel dasturlash tilllari.
Parallel dasturlash uchun dasturlash tillari va kutubxonalar
Parallel dasturlash uchun eng mashhur tillardan ba’zilari C++, Java, Python va Go.
Parallel dastur ishlab chiqishni osonlashtiradigan kutubxonalar qatoriga OpenMP, MPI, CUDA va OpenCL kiradi. Ushbu vositalarning har biri o‘ziga xos xususiyatlarga, afzalliklarga va kamchiliklarga ega
va tanlov loyihaning o‘ziga xos ehtiyojlariga bog‘liq. Masalan, OpenMP ko‘p protsessorli tizimlarda parallel dasturlashni osonlashtiradi, CUDA va OpenCL esa GPUlar bilan foydalanish uchun
optimallashtirilgan.
Men dasturlashda python tilidan foydalanganim sababli, shu tilda misollar keltiraman.
Python tilida parallel dasturlashni o'rganish uchun, multiprocessing va concurrent.futures kabi modullarni ishlatish mumkin. Bu modullar orqali, kompyuterda bir nechta vazifalarni parallel ravishda
bajarish mumkin.
Quyidagi misolni ko'rib chiqamiz. Ushbu misol, concurrent.futures modulini ishlatish orqali bir nechta sonni darajasini hisoblashni ilustratsiya qiladi.
# code
import concurrent.futures
import math
def daraja_hisobla(x):
print(f"{x} ning darajasi: {math.pow(x, 2)}")
if __name__ == "__main__":
sonlar = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
# O'zgaruvchilar turlariga qarab ish boshlashing
with concurrent.futures.ThreadPoolExecutor() as executor:
# submit metodi orqali har bir son uchun daraja_hisobla funksiyasini chaqirish
# va natijalarni future_qatorida qaytaradi
futures = [executor.submit(daraja_hisobla, son) for son in sonlar]
# as_completed metodi orqali natijalar bo'ylanish tartibida olish
for future in concurrent.futures.as_completed(futures):
# Natija olish
result = future.result()
print(result)
20. Parallel algoritmlar. Amaliy dasturlash tizimlari.
Parralel algoritmlar.
Parallel algoritmlarni amalga oshirish uchun parallel jarayonlarni tashkil etishda duch keladigan echimlarning umumiy ko‘rinishi ko‘p protsessorli arxitektura va tizimlarning xilma-xilligi haqida bir oz
tasavvur beradi:
- ko‘p protsessorlar bo‘lishi mumkin va ular turli xil buyruq tizimlariga ega bo‘lishi mumkin;
- protsessorlar avtonom tarzda ishlashi yoki umumiy ishni bajarish uchun birgalikda ishlashi mumkin;
- alohida protsessorlar foydali ishlamasdan ishlamay qolishi mumkin;
- protsessorlar o‘z lokal xotirasiga ega va umumiy xotirada ishlashi mumkin;
- qo‘shni protsessorlar o‘ta tezkor ma’lumotlar almashinuvi uchun moslashtirilishi mumkin;
- protsessorlar o‘rtasida harakatlarning taqsimlanishi dastur tomonidan belgilanishi yoki hisob-kitoblarning ma’lum bir modelini qo‘llabquvvatlaydigan nazoratchi tomonidan amalga oshirilishi
mumkin.
Quyidagi misollar parallel algoritmlashning ba'zi turlarini ko'rsatadi:
MapReduce:
Misol: Ma'lum bir ma'lumot jadvali ichidagi barcha elementlarni qo'shish.
Parallel algoritmi: Elementlarning yig'indisi (reduce operatsiyasi) parallel ravishda bajariladi. Har bir qurilma bir qismi bilan shug'ullanadi.
Python misoli:
#code
from functools import reduce
from multiprocessing import Pool
def qoshish(x):
return sum(x)
if __name__ == "__main__":
malumotlar = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
with Pool() as pool:
natija = reduce(lambda x, y: x + y, pool.map(qoshish, malumotlar))
print(natija)
2 Pipeline parallelism:



Misol: Tarmoqlangan qurilmalarda uchraydigan bir nechta vazifalarni bajarish.
Parallel algoritmi: Har bir vazifa o'zgartirilgan ma'lumotlarni olib, keyingi vazifaga uzatadi. Bunda, bir vaqtda ishlayotgan vazifa shu vaqtda ishlayotgan ikkinchi vazifaga o'zaro bog'liq emas.
Python misoli:
#code
import concurrent.futures
def vazifa1(malumot):
return malumot * 2
def vazifa2(malumot):
return malumot + 1
if __name__ == "__main__":
ma'lumot = 5
with concurrent.futures.ThreadPoolExecutor() as executor:
future1 = executor.submit(vazifa1, malumot)
future2 = executor.submit(vazifa2, future1.result())
natija = future2.result()
print(natija)
Bu misollar, parallel algoritmlarni amaliy ko'rish uchun mo'ljallangandir. Real dasturlashda parallel ishlashdan foydalanish uchun, kompyuter arxitekturasi, vazifalarning jins va xususiyatlariga qarab
eng optimal parallel algoritmini tanlanadi.
Amaliy dasturlash tizimlari.
Amaliy dasturlash tizimlarida parallel ishlashni ilustratsiya qilish uchun quyidagi misolni ko'rishimiz mumkin. Ushbu misol, bir matnning har bir belgisini qanday kodlarini aniqlash va hisoblashda
parallel ishlashni ko'rsatadi. Biz bitta matnni qanday ishlab chiqish mumkinligini parallel ravishda tekshirib ko'ramiz.
#code
import concurrent.futures
def belgi_hisobla(belgi):
# Har bir belgini kodini aniqlash va uni sona qo'shish
kod = ord(belgi)
return f"{belgi}: {kod + 1}"
if __name__ == "__main__":
matn = "Salom, Dunyo!"
with concurrent.futures.ThreadPoolExecutor() as executor:
# Matndagi har bir belgini parallel ravishda tekshirib ko'rish
natijalar = list(executor.map(belgi_hisobla, matn))
for natija in natijalar:
print(natija)
Bu dasturda, matndagi har bir belgini parallel ravishda tekshirib, belgining kodini va uni birga sonini hisoblaydi. concurrent.futures.ThreadPoolExecutor() orqali parallel ishlovchi xizmat qilinadi.
executor.map() metodi, har bir belgi uchun belgi_hisobla funksiyasini chaqirib, natijalarni olishga imkon beradi.
Bu misol orqali, parallel ishlashni o'rganish, optimallashtirish va amaliy dasturlarda qanday qo'llab-quvvatlashini ko'rish mumkin.
21-mavzu: Dasturlash tillarida parallelik modellari.
Dasturlash tillarida paralellikni amalga oshirish uchun bir nechta modellar mavjud. Bu modellar bilan dasturchilar kompyuter resurslarini to'g'ri va samarali bir xil vaqtda ishlatishlari mumkin.
Dasturlash tillarida paralellik modellari, ayni damda birdan ko'p amalni bajarish imkonini beradigan modellar. Bu modellar yordamida bir necha amalni bir vaqtda bajarish, masalan, ma'lumotlarni
qayta ishlash, fayllarni yuklash va boshqa amallarni bajarish imkonini beradi.
Python: Python tilida parallel dasturlashni amalga oshirish uchun "threading" va "multiprocessing" modullari mavjud. "Threading" moduli bilan, bir nechta vazifa bir vaqtning o‘zida parallel ishlay
oladi, lekin Python GIL (Global Interpreter Lock) o'zgarmagan holda foydalanish imkoniyati chegaralanadi. "Multiprocessing" moduli bilan esa, har bir dasturning o'ziga tegishli bo'lishi mumkin.
import threading
def print_numbers():
for i in range(1, 6):
print(i)
def print_letters():
for letter in ['a', 'b', 'c', 'd', 'e']:
print(letter)
t1 = threading.Thread(target=print_numbers)
t2 = threading.Thread(target=print_letters)
t1.start()
t2.start()
t1.join()
t2.join()
print("Amallar tugadi")
C++: C++ tilida, parallel dasturlash "std::thread" kutubxonasidan va "std::async" funktsiyasidan foydalanilarak amalga oshiriladi. Shuningdek, C++ 11 framwork orqali parallel dasturlashni yozish
imkoniyatiga ega.
Bu o'zbek tilidagi dasturlash modellari haqida umumanroq ma'lumotlar. Har bir dasturlash tili o'zining modellari, kengaytmasi va imkoniyatlariga ega. Bu esa dasturchilarga vazifalarni samarali
bajarishda yordam beradi.
22-mavzu: Transiformatsion semantika.Abstrakt kompleks.Xotira.
Transformation semantikasi - dasturlashda o'zgarishlarni ifodalash uchun ishlatiladigan bir necha ma'noni ifodalaydi. Masalan, bir ma'lumot turi (masalan, sonlar yoki matnlar)ni boshqa bir turga
o'tkazish. Bunda, ma'lumotlarni o'zgartirish va ulardan yangi ma'lumotlarni yaratish yoki ulardan boshqa ma'lumotlarni olish mumkin bo'ladi.
Transformation semantikasi, dasturlashda ma'lumotlarni o'zgartirish va ulardan yangi ma'lumotlarni yaratishni ifodalaydi va dasturlashda obyekt va datalar bilan ishlashda o'zgarishlarni ifodalaydi.
dasturlar yozilgan holda dasturda ishlash holatiga binoan bo'ladi. Bu semantikani o'zgartirish, dastur ma'nolari va ish jarayonlari bo'yicha tushunchalarni o'zgartirishni ta'minlaydi va boshqaradi.
Transformation semantikasi orqali dastur tashqi kuchlar bilan muloqotni o'rganish, ma'lumotlarni bazalardan to'plash va qaytarish, haqiqiy vaqt bilan ishlash kabi ko'rinishlarni amalga oshirish
mumkin. Dasturlashda abstrakt kompleks - odatda murakkab algoritmlar va ma'lumotlar tuzilmalarini loyihalashga ishora qiladi. Ushbu atama ko'pincha dastur asosidagi murakkab tuzilishga murojaat
qilish uchun ishlatiladi. Abstrakt kompleks ma'lumotlar tuzilmalari va algoritmlarining abstrakt dizaynini ifodalaydi va odatda dasturning ishlashiga, ma'lumotlarni qayta ishlash vaqtiga va xotiradan
foydalanishga ta'sir qiluvchi elementlarni o'z ichiga oladi. Ushbu kontseptsiya dasturlash tillarida, ma'lumotlar bazalarida va dasturiy ta'minotni ishlab chiqishning boshqa sohalarida keng
qo'llaniladi.Abstrakt kompleks, abstraktlardan iborat ma'lum bir obyektning ma'lumotini ko'rsatuvchi ma'lumotlar turi hisoblanadi. Abstrakt komplekslar, dasturlashda sodda va sondirilgan
ma'lumotlarni tuzishda ishlatiladi. Misol uchun, bir xonadonning manzili (ko'cha, uy, kvartira raqamlari) abstrakt kompleks sifatida ko'rsatilishi mumkin
Xotira - dasturlashda sodda va murakkab ma'lumotlarni saqlab qolish va ularga darhol ega bo'lish imkonini beradi. Xotira dasturlashda ma'lumotlar saqlanuvchi bo'lak sifatida ishlatiladi. Har bir
o'zgaruvchi, bitta xatoga yozilgan ma'lumotlar birikmasidir. Xotiralab saqlanadigan ma'lumotlar, dastur ishga tushganda saqlanishi kerak bo'lgan, o'zgaradigan ma'lumotlardir. O'zgaruvchilarni saqlash
uchun kerak bo'lgan xotira maydoni, ularni qo'llab-quvvatlash, va ma'lumotlarni qaytarish va saqlash bilan bog'liq amal qiladi.
23-Mavzu: Dasturlash texnologiyalari.
Dasturiy ta’minotining ishlab chiqish jarayonida foydalaniladigan usullar va vositalar yig‘indisi - dasturlash texnologiyalari deb ataladi.
Ushbu texnologiyalar kompyuter dasturlari va tizimlarini yaratish, boshqarish va rivojlantirish uchun ishlatiladi. Dasturlash texnologiyalari kompyuter tillari va vositalaridan foydalangan holda dasturiy
ta'minotni ishlab chiqishni o'z ichiga oladi.Dasturlash texnologiyalari turli xil dasturiy vositalarni ham o'z ichiga oladi. Ushbu vositalar kodlash, disk raskadrovka, versiyalarni boshqarish,
avtomatlashtirilgan testlar va kompilyatsiya kabi operatsiyalarni soddalashtirish va dasturiy ta'minotni ishlab chiqish jarayonlarini yanada samarali qilish uchun ishlatiladi. Natijada, dasturlash
texnologiyalari-bu dasturiy ta'minotni ishlab chiqish jarayonlarida ishlatiladigan kompyuter dasturlash tillari, metodologiyalari va vositalarini o'z ichiga olgan keng maydon. Ushbu texnologiyalar
dasturiy ta'minot loyihalarini muvaffaqiyatli yakunlashda muhim rol o'ynaydi va jarayonni optimallashtirishga yordam beradi.
Dasturlash uslublari va paradigmalari, dasturlash texnologiyalari bilan birga ishlaydi va ularda yaratilgan dasturlarni samarali va qulay yaratish imkoniyatlarini ta'minlaydi. Dasturlash texnologiyalari,
dasturlash tillari va paradigmalari bilan birga dasturchilarga turli xil vazifalarni osonlashtirishlari uchun qulayliklar yaratish mumkin.Quyidagi dasturlash uslublari va paradigmalari bilan bog'liq
dasturlash texnologiyalari mavjud:
1. Obyektga yo'naltirilgan dasturlash (OOP)
2. Funksional dasturlash.
3. Protsedural dasturlash.
4. Metaprogrammatsiya.
5. sinxron dasturlash.
6. Daqiq va katta ma'lumotlar ishlash.
24-Mavzu: Dastur kodini tahlil qilish.







1.
2.




1.



2.


3.


4.


Dastur kodini tahlil qilish, kodni tushunish, uning qanday ishladigini tushuntirish va muammolarni aniqlash uchun juda muhim jarayonlardan biridir. Kodni tahlil qilish maqsadida dastur kodini
qisqartirish, uning asosiy qismalarini aniqlash, hisoblash jarayonlariga ko'ra muammolar (bugs) va optimallashtirish uchun yechimlar topishni o'z ichiga oladi.
Dastur kodini tahlil qilish uchun bir nechta usullar mavjud. Bu usullar yordamida dastur kodini izlash, o'qish, tahlil qilish va muammolarni aniqlash mumkin. Quyidagi usullar dastur kodini tahlil qilishda
yordam berishi mumkin:
Kodni o'qish: Birinchi navbatda, dastur kodini yanada tushunarliroq ko'rish uchun uni o'qish kerak.
Muammolarni topish: Kodni tahlil qilish keyin, kod ichidagi muammolar (bugs) va xato joylarini aniqlash imkoniyatiga ega bo'lasiz.
Qisqa-ishonuvchi nusxalarni yaratish: Dastur kodini tahlil qilishning yaxshi usuli o'zgaruvchilarni, funksiyalarni va modullarni qisqa va ishonchli nusxalarini yaratishdir.
Kodni hisoblash va optimallashtirish: Kodni hisoblash odatda amalga oshiriladigan jarayon. Bu, kodning ishlayotganini tushuntirish, kodni tez ishlatish va samarali bo'lish uchun mumkin bo'lgan
imkoniyatlarga ega bo'lgan qadamdir.
Monitoring va testing: Kodingizni yozish tavsiya etilgan paytda kodni test qiling.
Statik analiz: Dastur kodini o'qib, tahlil qilish uchun mahsus vositalardan foydalanish mumkin.
Dinamik analiz: Bu usul orqali dasturni amalga oshirish va dastur ishlash jarayonida yuxorlashlarni va xatolarni aniqlash mumkin.
Kodni tahlil qilish jarayonida sinovga tayanishingiz va tajribalaringizni oshirishingiz ham juda muhim. Ular sizning atrofingizdagi xato joylarini (bugs) topishga va ularni tuzatishga yordam beradi. Kodni
tahlil va tuzatish umuman olmoqda bo'lgan maqsadingizni log'onga chiqaradi va dastur kodini samarali yaratish uchun muhimdir.
25. Protsedurali dasturlash.
Protsedurali dasturlash imperativ dasturlashga kiradi.
Ushbu paradigma asosiy mashina modeli nuqtai nazaridan protseduraga urg'u beradi. Protsessual va imperativ yondashuv o'rtasida farq yo'q. U kodni qayta ishlatish qobiliyatiga ega va foydalanish
mumkinligi bilan farq qiladi.
Protsessual dasturlash - bu dasturlarni ishlab chiqish uchun kodning bosqichma-bosqich protsedurasidan foydalanadigan dasturlash modeli. Dasturlar bajariladigan buyruqlar ketma-ketligi degan
fikrga asoslanadi.
Protsessual dasturlash paradigmalariga misollar: FORTRAN, ALGOL, COBOL, BASIC, Pascal va C.
Quyidagi misol yuqoridan pastga dizayniga amal qiladi.
def calculate_rectangle_area(length, width):
area = length * width
return area
def display_result(length, width, area):
print(f"Rectangle with length {length} and width {width} has an area of {area} square units.")
def main():
length = float(input("Enter the length of the rectangle: "))
width = float(input("Enter the width of the rectangle: "))
area = calculate_rectangle_area(length, width)
display_result(length, width, area)
main()
26. Funksional dasturlash(iteratsiya)
Dasturlashda iteratsiya - bu aniq natijaga erishilgunga qadar ko'rsatmalar yoki kodlarning takrorlanishi. Bu ko'pincha "loop" deb ataladi.
Funktsional dasturlashda iteratsiya "for each item in a given list, perform some function" deb ta'riflanadi. Bu nima qilish kerakligini emas, balki qanday qilish kerakligini tasvirlash usuli.
Iterativ jarayonlar ketma-ket holatlarni tashkil etuvchi ketma-ket bosqichlar bilan tavsiflanadi. Har bir bosqichda holat o'zgaruvchilari o'zlari va ba'zi qoidalar asosida yangilanadi.
Iteratsiya ko'pincha for yoki while tsikli kabi boshqaruv oqimi konstruksiyalari yordamida amalga oshiriladi.
Iteratsiyaning 2 xil turi mavjud:
Aniq iteratsiya: Takrorlashlar soni oldindan aniq ko'rsatilgan.
Noma'lum iteratsiya: kod bloki ba'zi shartlar bajarilmaguncha ishlaydi.
Dasturlashda iterativ operatsiyalarga misollar:
Long division
The Fibonacci numbers
Prime numbers
The culculator game
Misol uchun Fibonachi raqamlari misolini ko’rib chiqaylik:
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=’ ’)
a, b = b, a+b
fib(100)
Bu misolda 100 gacha bo’lgan fibonachi sonlarini qaytaradi.
28. Malumotlar tuzilmasi.
Ma'lumotlar tuzilmasi - bu operatsiyalarni samarali bajarish uchun ma'lumotlarni tashkil qilish va saqlash usuli. Turli xil ma'lumotlar tuzilmalari har xil turdagi ilovalar va operatsiyalar uchun
mo'ljallangan.
Ma'lumotlar tuzilmalarining ba'zi keng tarqalgan turlari:
Arrays:
Indeks yoki key orqali aniqlanadigan elementlar jamlanmasi.
Elementlar ketma-ket xotira maydonlariga joylashtiriladi.
Arraylar o’z indekslari yordamida elementlarga doimiy kirishni taminlaydi.
Linked lists:
Chiziqli malumotlar tuzilmasi va bunda elementlar node larda saqlanadi, har bir node keyingi node ga yo’naltirilgan bo’ladi.
Linked list elementlarni samarali qo’shish va o’chirish imkoniyatlarini taminlaydi.
Stacks:
2 ta asosiy operatsiyani bajaradigan elementlarning jamlanmasi. Push(boshiga element qo’shadi), Pop(boshidan element o’chiradi).
Last In, First Out(LIFO) prinsipliga amal qiladi.
Queue:
2 ta asosiy operatsiyani bajaradigan elementlarning jamlanmasi.
enqueue(oxiriga element qo’shadi) va dequeue(Boshidan element o’chiradi)
First In, First Out(FIFO) prinsipliga amale qiladi.
Malumotlar tuzilmasini tanlash, dasturning malum bir talablariga bog’liq. Misol uchun, bajarilishi kerak bo’lgan operatsiya turlari va ushbu operatsiyalarning samaradorligiga.
Har bir malumotlar tuzilmasining o’ziga xos afzalliklari va kamchiliklari mavjud. Shular orasidan to’g’risini tanlash samarali algoritmni loyihalash uchun muhimdir.
29.Tuzilmali dasturlash
Dastur yagona tuzilma sifatida tuzilgan dasturlash yondashuvi sifatida belgilanishi mumkin. Bu shuni anglatadiki, kod ko'rsatmalarni ketma-ket ko'rsatma bilan bajaradi. U GOTO va boshqalar kabi har
qanday bayonot yordamida bir buyruqdan boshqasiga o'tish imkoniyatini qo'llab-quvvatlamaydi. Shuning uchun bu yondashuvdagi ko'rsatmalar ketma-ket va tuzilgan tarzda bajariladi. Strukturaviy
dasturlash yondashuvini qo'llab-quvvatlaydigan tillar:
C ; C++; Java; C#… va boshqalar
Tuzilmali dasturlash yondashuvining afzalliklari:
O'qish va tushunish osonroq
Foydalanish uchun qulay
Saqlash osonroq
Mashinaga asoslangan bo'lish o'rniga asosan muammoga asoslangan
Rivojlanish osonroq, chunki u kamroq kuch va vaqt talab qiladi
Nosozliklarni tuzatish osonroq
Mashinadan mustaqil, asosan.
Tuzilmali dasturlash usulining kamchiliklari:
Mashinadan mustaqil bo'lganligi sababli, mashina kodiga aylantirish uchun vaqt kerak bo'ladi.
O'zgartirilgan mashina kodi montaj tili bilan bir xil emas.
Dastur ma'lumotlar turlari kabi o'zgaruvchan omillarga bog'liq. Shuning uchun uni yo'lda zarurat bilan yangilash kerak.
Odatda bu yondashuvning rivojlanishi tilga bog'liq bo'lgani uchun ko'proq vaqt talab etadi. Assembler tili bo'lsa, ishlab chiqish kamroq vaqt talab etadi, chunki u mashinaga o'rnatiladi.
Quyidagi bir necha tuzilmalar misollarini ko'rsataman:
Ro'yxat (List): Ma'lumotlar ro'yxati. Misol: Python-da list, C++-da std::vector.
Qator (Queue): Ma'lumotlarni o'rin-o'riniga qabul qilib, birinchi kelgan ma'lumot birinchi chiqadi. Misol: Python-da queue.Queue, Java-da Queue.
Stek (Stack): Ma'lumotlarni o'zaro qabul qilib, birinchi kelgan ma'lumot birinchi chiqadi. Misol: Python-da list (stekning funksiyalari bilan), C++-da std::stack.
Bog’langan Ro'yxat (Linked List): Ma'lumotlarning to'plamasi, har bir ma'lumot o'zidan keyingi ma'lumotni ko'rsatadi. Misol: Python-da va C++-da o'zgaruvchilar orqali (Node lar orqali) yaratilgan
linked list.
Hash Ro'yxati (Hash Table): Ma'lumotlarni boshqarish uchun boshqaruv (hash) funksiyalari orqali yaratilgan ro'yxat. Misol: Python-da dict, Java-da HashMap.
Derevo (Tree): Hierarchik tuzilgan ma'lumotlarni saqlash uchun ishlatiladi. Misol: Java-da TreeMap, Python-da binary tree implementatsiyalari.
30.Vektorli dasturlash (vektorlar bilan ishlash)
Vektorlar. Vektor bu bir xil toifadagi elementlarning tartibli ketma ketligi bo’lib, massivdan farqi uning o’lchami dastur bajarilishi davomida o’zgarishi mumkin,yani vektor bu dinamik massiv
hisoblanadi.
Vektorlarni turlicha initsializatsiyalash usullari mavjud:
vector vec0; // bo’sh vektor
const int size = 8;
const int value = 1024;
vector vec1(size);//8 ta elementga ega, elementlar qiymatlari 0 ga teng
vectorvec2(size,value);//8 ta elementga ega, elementlar qiymatlari 1024 ga teng
inta[4] = { 0, 1, 1, 2 };
vector vec3(a,a+4);//4 ta elementga ega, elementlar qiymatlari a massivinikiga teng
vector vec4(vec2);//vec2 ning nusxasi
Vektorlarning massivga nisbatan qulayligi haqida quyidagilarni bayon qilmoqchimiz:
Vektorlar bilan ishlash uchun standart kutubxona funksiyalari mavjud bo’lib, ular yordamida turli amallarni siklsiz, bir qator kod yordamida bajarish mumkin. Ulardan ayrimlarini ke ltirib o’tamiz:














test.at(i) - test[i] kabi yozuv bilan bir xil, faqat bunda agar i-element mavjud bo’lmasa, dastur hatolik ko’rsatmaydi;
test.asign(n,m)–vektorga n ta elementni m qiymat bilan yozadi;
test.asign(start,end)–boshqa vektorning boshi va oxirini ko’rsatuvchi iteratorlar startdan end gacha bo’lgan elementlarni ushbu vektorga kiritadi;
test.front()–1-elementga murojaat;
test.back() –oxirgi elementga murojaat;
test.begin()–vektor 1-elementi iteratori;
test.end()–vektor oxiri iteratori(oxirgi elementidan keying adresni ko’rsatadi);
test.clear()–vektorni tozalash;
test.erase(i)yokitest.erase(start,end)–i-iterator elementini yoki start va end oralig’idagi elementlarni o’chiradi;
test.size()–vektordagi elementlar sonini aniqlaydi;
test.swap(test2) - test va test2 vektorlar elementlarini almashtiradi;
test.insert(a,b) - test vektoriga iterator ko’rsatayotgan a elementdan oldin b elementni kiritadi, bunda iterator kiritilgan elementni ko’rsatadi;
test.insert(a,n,b)– b elementdan n ta kiritadi;
test.insert(a,start,end) - start va end iteratorlari oralig’idagi elementlarni a dan oldin kiritadi.
31.Vektorli dasturlash(iteratorlar bilan ishlash)
begin() va end() iteratorlari mos ravishdaxotirada vektorning birinchi elementini va oxirgi elementidan keyingi adresni ko‘rsatadi.Shu o‘rinda iterator nimaligiga aniqlik kiritsak. Iterator bi birorta
o‘zgaruvchiga ko‘rsatkich hisoblanadi. Iterator bizga kerak qiymatlarni qayerdaligini biladi va uning qiymatini bizga chiqarib beradi. Itaratorlar asosan konteynerlar bilan ishlashda qo‘llaniladi. Iterator
yaratish uchun quyidagini yozish kerak:
iterator_nomi::iterator nomi;
Masalan:vector ::iterator begin=vec.begin();
string::iterator end,cur;
Satrlar ham konteyner hisoblanadi. Endi iterator ko‘rsatayotgan element quyidagicha olinadi.
cout<<*cur<<endl;
Bu erda tushunarliki, * belgisi cur iteratorni emas, u ko‘rsatayotgan qiymatni ko‘rsatadi.
cur++; // keying elementga o‘tish
cur+=10; // <=>cur=cur+10 10 ta elementdan keyinga o‘tish
Vektor elementlarinni iterator bilan ekranga chiqarishni ko‘ramiz:
vector test;
string buffer = "";
//elementlarni kiritilsh
do {
getline(cin, buffer);
if (buffer.size() > 0) test.push_back(buffer);
} while (buffer != "");
vector::iterator cur;
for (cur=test.begin();cur<test.end();cur++)
cout<<*cur<<endl;
misol: #include <iostream>
#include <vector>
using namespace std;
int main() { vector<int> numbers = {1, 4, 2, 8, 5};
for (auto it = numbers.begin(); it != numbers.end(); ++it) { cout << *it << " "; }
cout << std::endl;
sort(numbers.begin(), numbers.end());
for (int num : numbers) {cout << num << " "; }
std::cout << std::endl;}
32. S. Obʼyektga yo‘naltirilgan dasturlash paradigmasi(sinflar va obyektlar bilan ishlash)
J. Ob'ektga yo'naltirilgan dasturlash (qisqacha. OOP) dasturni o'zaro ta'sir qiluvchi ob'ektlar to'plami sifatida ifodalashga asoslangan dasturlash metodologiyasi bo'lib, ularning har biri ma'lum bir
sinfning namunasi bo'lib, sinflar meros ierarxiyasini tashkil qiladi. Hozirgi kunga OOP - bu eng mashhur rivojlanish paradigm hisoblanadi. Ob'ektga yo'naltirilgan dasturlash, dasturlash muhitida eng
katta ta'sir ko'rsatdi. Ob'ektga yo'naltirilgan dasturlash 1960-yillarning oxirida Simula dasturlash tilining paydo bo'lishi bilan paydo bo'lgan. Yillar davomida Smalltalk ob'ektga yo'naltirilgan dasturlash
paradigmasini takomillashtirgan. Python, Java, C va C# tillari bugungi kunda eng mashhur ob'ektga yo'naltirilgan tillar qatoriga kiradi. OOP 4 ta asosiy qurilish bloklarini o'z ichiga oladi: 1. sinflar 2.
Atributlat. 3. Usullar 4. Obyektlar. 1. Sinflar ob'ektlarni tasvirlash uchun shablonlarni taklif qiladi. Sinflar asosan ob'ektlarni yaratish uchun sxema bo'lib xizmat qiladi. Sinf ichida dasturchilar tegishli
ob'ektlar tomonidan havola qilinadigan o'zgaruvchilar va usullarni belgilashlari kerak. Avtomobil misolida sinf avtomobil ob'ektining xususiyatlarini ifodalaydi, avtomobilning funksionalligini qamrab
•
•
•
oladi va birinchi navbatda avtomobilni sinf sifatida e'lon qiladi. Ob'ektlar. Ob'ektlar sinflar bilan birga mavjud. Aslini olganda, bu dasturchi aniqlay oladigan aniq tuzilishga ega bo'lgan ma'lumotlar
maydonlari. Ob'ekt chaqirilgandan so'ng, dastur misol yaratadi. Ob'ektga murojat qilish uchun mashinaning o'ziga xos rangi va turi kabi sinfga tegishli ma'lumotlarni taqdim etish kerak bo'ladi.
avtomobil = Avtomobil ('qizil', 'Sedan')
Yuqoridagi kod noyob avtomobil ob'ektining ma'lum bir nusxasini rasmiy ravishda o'rnatadi.
Haydash usuli qanday ishlashini ko'rishingiz mumkin.
car.drive()




33) Ob’ektga yo’naltirilgan dasturlash(merosxo’rlik, inkapsulyatsiya)
Ob'ektga yo'naltirilgan dasturlash-bu bir-biriga xabar yuboradigan ob'ektlarni aniqlash atrofida aylanadigan dasturlash paradigmasi. Ushbu ob'ektlar o'zlarining ommaviy va ichki interfeyslarini ham
o'z ichiga oladi. Ob'ektga yo'naltirilgan dizaynni muvaffaqiyatli amalga oshirish uchun ob'ektga yo'naltirilgan dizaynning 4 ustuni deb nomlanuvchi 4 ta asosiy ustunni diqqat bilan va intuitiv ravishda
ko'rib chiqish kerak:
Abstaction
Inheritance
Encapsulation
Polymorphism
Inheritance(Meros olish):
Barcha dasturlash tillari uchun meros olish turlari.
Dasturlash tiliga qarab, merosning turli xil turlari mavjud. Biroq, Ruby sinflar o'rtasida faqat bitta merosga ruxsat beradi va kichik sinflarni yaratishda “mixin” deb ataladigan narsalardan
foydalanadi.
“Ruby” da bitta meros olishga misol:



Yuqoridagi kodda Dog klassi Animal sinfining xatti-harakatlarini meros qilib oladi va Dog-dan o'rnatilgan har qanday ob'ekt Animal-dan funksiyalarni chaqirishi mumkin. Bunday holda, Dog
sinfidan olingan ob'ektlar uchun Animal-dan konstruktor usuli chaqiriladi.
Ruby-dagi meros bir nechta sinflardan umumiy xatti-harakatlarni ajratib olishga va ularni bitta super sinfga o'tkazishga yordam beradi. Meros, shuningdek, mavhumlik deb hisoblanadi,
chunki biz takrorlanadigan kodni olib tashlaymiz va uni umumlashtirilgan blokga joylashtiramiz, bu dasturni nima qilayotgani va muayyan xatti-harakatlar ortidagi maqsadlarga nisbatan tushunarli
qiladi.
Encapsulation(Inkapsulyatsiya)
Inkapsulyatsiyaga yana bir yondashuv - bu "bog'lash". Inkapsulyatsiya turli sinflar, usullar va o'zgaruvchilarni oladi va ularni havolalar uchun bir butunga birlashtiradi.
Bunday birlashma boshqa mavhumlik qatlamini qo'shib, dasturchining bilim yukini kamaytirishga yordam beradi. Inkapsulyatsiya, shuningdek, dasturchilar holatlar va xatti-harakatlarni
tasodifan o'zgartirmasliklari uchun holatlar va xatti-harakatlarni to'g'ridan-to'g'ri kirishdan yashirishi mumkin. Inkapsulyatsiya ko'plab Ruby bo'shliqlarida uchraydi, bu erda ba'zi misollar:
O'zgaruvchilar
Funksiyalar
Sinflar
O'zgaruvchilar private va protected kalit so'zlar bilan qamrab olinishi mumkin . Private kalit so'z ma'lumotlarni umumiy usul interfeysidan yashiradi va ularni sinf tashqarisidan to'g'ridan-to'g'ri kirish
mumkin emas. Quyida private kalit so'z bilan inkapsulyatsiya misoli keltirilgan:
Yuqoridagi kodda usullarni o'z ichiga olgan bitta modul yaratiladi: dog klassi. Sinf aniqlangandan so'ng, uning umumiy interfeysini aniqlash kerak. 2-qatordagi Initialize konstruktor usuli va 6-8qatordagi to_s misol usuli dog sinfining umumiy interfeysining bir qismidir. Initialize va to_s sinflari sinfdan tashqarida mavjud. Biroq, 12-qator uchun belgilangan getter usulining nomi Private kalit
so'zi bilan qiziquvchan ko'zlardan yashiringan. Bu blok ichidagi keraksiz ommaviy ma'lumotlarga kirishni cheklaydigan inkapsulyatsiyaning yakuniy bosqichidir.


OutsideDog doirasidan Getter usuli nomini chaqirganda, NoMethodError xatosi paydo bo'ladi, chunki bu doirada mavjud usul yo'q. Bundan tashqari, name misoli o'zgaruvchisi sinfdan tashqarida
yashiringan, shuning uchun it nomiga kirishning yagona usuli to_s usuli hisoblanadi.
Protected kalit so'z bilan inkapsulyatsiya private-ga o'xshaydi, faqat public kalit so'z uning ostida aniqlangan holatlar va xatti-harakatlar o'rtasida sinflararo o'zaro ta'sirga imkon beradi. Bu sizga ikkita
sinf ma'lumot almashishi kerak bo'lganda foydalidir, lekin siz ushbu ma'lumotlarning biron bir sinfning umumiy interfeyslarida bo'lishini xohlamaysiz.
Inkapsulyatsiya Ruby-ning ko'plab asosiy dasturchilarida uchraydi. Masalan,,
Sinflar: usullarni qamrab oladi.
Funksiyalar: mantiqni qamrab oladi.
Ob'ektlar: holat va xatti-harakatlarni qamrab oladi.
34) Ob’ektga yo’naltirilgan dasturlash(polimorfizm va uning turlari)
OOP (ob'ektga yo'naltirilgan dasturlash) ning to'rtta asosiy tushunchasi meros, abstraktsiya, polimorfizm va inkapsulyatsiyadir. OOPga yangi kelgan kishi uchun dastlab OOPning so'nggi uchta asosiy
tushunchasini tushunish qiyin bo'lishi mumkin (chunki merosni tushunish juda oddiy).
Polimorfizm-bu ob'ektning ko'plab shakllarni olish qobiliyati.
Bir nechta ISA testidan o'tishi mumkin bo'lgan har qanday Java ob'ekti polimorfik deb hisoblanadi. Bu shuni anglatadiki, bolalar sinfining har qanday ob'ekti ota-ona ierarxiyasida har qanday sinf
shaklini olishi mumkin va albatta, o'zi. Bu shuni anglatadiki, bolalar sinfi ob'ekti ota-ona ierarxiyasidagi har qanday sinf havolasiga va albatta o'ziga tayinlanishi mumkin.
Masalan, talaba sinfi shaxs sinfiga bog'liq.
Student student = new Student()
Person person = new Student()
Ko'pincha polimorfizm OOPda ota-ona sinfiga havola bolalar sinfi ob'ektiga murojaat qilish uchun ishlatilganda qo'llaniladi. Aslida, bu erda biz dinamik polimorfizm haqida gapiramiz (men buni
keyinroq tasvirlab beraman).
Polimorfizmning 2 turi mavjud, ular odatda tilga olinadi.
Dinamik polimorfizm
Statik polimorfizm
Dinamik polimorfizm
Shuningdek, u ish vaqti polimorfizmi, dinamik bog'lanish, ish vaqti bilan bog'lanish, kech bog'lanish va usulni bekor qilish deb ataladi. Bu erda turli sinflarda ko'plab shakllar mavjud.
Bu odatda"polimorfizm" deb ataladigan narsa. Buni juda oddiy tushuntirib beray Aytaylik, sinflar ierarxiyasidagi sinflarda (ota-ona-bola munosabatlari) bir xil usul imzosi bo'lgan usullar mavjud, ammo bu usullar turli shakllarga ega (bu usulni bekor qilish deb nomlanadi). Keyin
ob'ektga sinf havolasi berilganda va ob'ekt usuli chaqirilganda, ob'ekt sinfi usuli bajariladi. Havola sinfi usuli emas (agar havola ota-ona sinfi bo'lsa). Ob'ektni yaratish ish vaqtida sodir bo'lganligi
sababli, bajarilishi kerak bo'lgan usul shakli (ob'ektdagi usul) faqat ish vaqtida aniqlanishi mumkin.
Misol(Java tilida):
class Person {
public void teach(){
System.out.println("Person can teach");
}
}
class Teacher extends Person {
public void teach() {
System.out.println("Teacher can teach in a school");
}
}
public class TestTeacher {
public static void main(String args[]) {
Person person = new Person(); //Person reference and object
Person another_person = new Teacher(); //Person reference, Teacher object
Teacher teacher = new Teacher(); //Teacher reference and obj. person.teach();//output: Person can teach // Here you can see Teacher object's method is executed even// -though the Person reference was used
another_person.teach();//output: Teacher can teach in a school teacher.teach();//output: Teacher can teach in a school
}
}
Statik polimorfizm
Bundan tashqari, kompilyatsiya vaqtining polimorfizmi, statik bog'lanish, kompilyatsiya vaqtining bog'lanishi, erta bog'lanish va usullarning haddan tashqari yuklanishi deb ataladi. Bu erda bitta sinfda
ko'plab shakllar mavjud. Bu aslida usullarning haddan tashqari yuklanishi. Usullarning haddan tashqari yuklanishi - bu bir xil usul nomiga ega, ammo turli xil argumentlarga ega bo'lgan bir nechta
usullarning mavjudligi (qaytish turi bir xil bo'lishi mumkin yoki bo'lmasligi mumkin). Bu erda, usullarni chaqirganda, kompilyator qo'ng'iroq paytida berilgan parametrlarga qarab qaysi usulni
chaqirishni tanlaydi. Bu kompilyatsiya vaqtida sodir bo'ladi.
Misol(Java tilida):
class Calculator {
void add(int a, int b) {
System.out.println(a+b);
}
void add(int a, int b, int c) {
System.out.println(a+b+c);
}
}public class Demo {
public static void main(String args[]) {
Calculator calculator = new Calculator(); // method with 2 parameters is called
calculator.add(10, 20); //output: 30 // method with 3 parameters is called
calculator.add(10, 20, 30); //output: 60
}
}
35) Ob’ektga yo’naltirilgan dasturlash(oqimlar bilan ishlash)
Ob'ektga yo'naltirilgan dasturlashda (OOP) oqimlar bilan ishlash parallellikka erishish va samaradorlikni oshirish uchun bir vaqtning o'zida kodni bajarishni o'z ichiga oladi. Oqimlar-bu bir vaqtning
o'zida bir nechta vazifalarni bajarishga imkon beradigan dasturda parallel ravishda bajarilishi mumkin bo'lgan engil jarayonlar. OOP oqimlari bilan ishlash bilan bog'liq ba'zi asosiy tushunchalar:
Oqimlar bilan ishlash asoslari: Oqim yaratish: OOP-da oqimlar dasturlash tiliga qarab Thread sinfini kengaytirish yoki Runnable interfeysini amalga oshirish orqali yaratilishi mumkin. Masalan, Java-da
siz thread sinfini kengaytirishingiz va run usulini bekor qilishingiz yoki Runnable interfeysini amalga oshirishingiz va Run usulini amalga oshirishingiz mumkin.
// Extending Thread class
class MyThread extends Thread {
public void run() {
// Thread logic here }}
// Implementing Runnable interface
class MyRunnable implements Runnable {
public void run() {
// Thread logic here }}
Oqim boshlanishi: oqimlar start usulini chaqirish orqali boshlanadi. Ushbu usul yangi ish oqimida run usulini chaqiradi.
Sinxronizatsiya:
OOP-da sinxronizatsiya bir vaqtning o'zida bir nechta oqimlarning umumiy manbalarga kirishida juda muhimdir. Bu ma'lumotlarning buzilishi oldini oladi.
Kodning muhim qismlariga kirishni boshqarish uchun sinxronlashtirilgan usullar yoki bloklardan foydalanish kerak.
class SharedResource { private int counter = 0;
public synchronized void increment() { // Thread-safe increment
counter++; }}
Oqim xavfsizligi: Sinflarni bir vaqtning o'zida bir nechta oqimlar kirishi mumkin bo'lsa, ular oqimga xavfsiz bo'lishi uchun loyihalashtirish kerak.Ma'lumotlarning nomuvofiqligini oldini olish uchun
sinxronizatsiya, atom operatsiyalari yoki boshqa oqimga chidamli dizaynlardan foydalanish kerak. Oqimlarning aloqasi: Oqimlar ko'pincha o'zaro ta'sirlashishi yoki muvofiqlashtirilishi kerak. Bunga
Java-da wait, notify va notifyAll kabi usullar yordamida erishish mumkin.
class SharedResource {private boolean flag = false;
public synchronized void waitForFlag() throws InterruptedException {
while (!flag) { wait(); // Release the lock and wait }}
public synchronized void setFlag() { flag = true;
notifyAll(); // Notify waiting threads }}
Oqim hovuzlari: Oqim havzalaridan foydalanish oqimlarning hayot aylanishini yanada samarali boshqarish imkonini beradi. Oqim hovuzlari mavjud oqimlarni qayta ishlatadi, bu esa oqimlarni yaratish
va yo'q qilish uchun qo'shimcha xarajatlarni kamaytiradi.
Istisnolarni qayta ishlash:Ko'p tishli dasturlarda istisnolarni to'g'ri qayta ishlash juda muhimdir. Bitta ipdagi xom istisnolar butun dasturning barqarorligiga ta'sir qilishi mumkin.
Puffinlar va poyga shartlari: Resurslarning bir-biridan ozod bo'lishini kutib, ikki yoki undan ortiq oqim to'sib qo'yilgan o'lik holatlarga ehtiyot bo'ling.
Dasturning xatti-harakati voqealarning nisbiy vaqtiga bog'liq bo'lgan poyga vaziyatlaridan ehtiyotkorlik bilan qochish kerak.
Parallel oqimlar bilan ishlash uchun yordamchi dasturlar:
Ko'pgina dasturlash tillari va kutubxonalari oqimlarni osonlashtiradigan parallellik va ramka yordam dasturlarini taqdim etadi. Masalan, Java-da Java to'plami.util.concurrent ExecutorService, Future va
turli concurrent to'plamlari kabi yuqori darajadagi dizaynlarni taklif etadi.
36) Ob’ektga yo’naltirilgan dasturlash(istisnolar bilan ishlash)
Istisnolarni qayta ishlash ob'ektga yo'naltirilgan dasturlashning (OOP) muhim jihati bo'lib, ishlab chiquvchilarga o'z kodlarida kutilmagan xatolar va istisno stsenariylarni engishga imkon
beradi. Istisnolarni qayta ishlashning samarali mexanizmlarini amalga oshirish orqali dasturchilar o'z ilovalarining ishonchliligi va barqarorligini oshirishi mumkin. Ushbu maqola Java va Python-da
asosiy tushunchalar va amaliy misollarni o'z ichiga olgan OOP istisnolarini qayta ishlashni batafsil ko'rib chiqadi.
Istisnolar nima?Istisnolar-bu dasturni bajarish paytida yuz berishi mumkin bo'lgan kutilmagan hodisalar.OOP-da istisnolar ko'pincha ob'ektlar sifatida taqdim etiladi va xato yoki
favqulodda vaziyat yuzaga kelganda tashlanishi mumkin.
Try-Catch –Finally Bloklar:Istisnolarni qayta ishlash odatda "try", "catch" va "finally"bloklardan foydalanishni o'z ichiga oladi."try" blokida istisnoga olib kelishi mumkin bo'lgan kod mavjud."Catch" bloki
ushlanadigan istisno turini belgilaydi va istisnoni qayta ishlash uchun kodni o'z ichiga oladi."finally" blokda istisno sodir bo'lganmi yoki yo'qmi, bajarilishi kerak bo'lgan kod mavjud.Istisno ierarxiyasi:
OOPdagi istisnolar ierarxiya shaklida tashkil etilgan bo'lib, unda aniqroq istisnolar umumiylardan meros bo'lib o'tadi.
Bunday ierarxiya ishlab chiquvchilarga o'ziga xos istisnolarni qo'lga kiritishga va shu bilan birga umumiyroq istisnolarni qayta ishlashga imkon beradi.
Practical Examples in Java:
Example 1: Arithmetic Exception
public class ArithmeticExceptionExample {
public static void main(String[] args) {
try {
int result = 10 / 0; // Division by zero
} catch (ArithmeticException e) {
System.out.println("An arithmetic exception occurred: " + e.getMessage()); } }}
37- Parallel dasturlash.
Parallel dasturlash - bu muammoni tezroq hal qilish uchun bir nechta vazifalar yoki jarayonlarni bir vaqtning o'zida bajarishni o'z ichiga olgan dasturlash paradigmasi. Maqsad murakkab hisoblashni bir
vaqtning o'zida bajarilishi mumkin bo'lgan kichikroq, boshqariladigan qismlarga bo'lishdir. Bu ish faoliyatini yaxshilashga olib kelishi mumkin, chunki bir nechta protsessorlar yoki yadrolar birgalikda
muammoni bitta protsessorga qaraganda kamroq vaqt ichida hal qilish uchun ishlaydi.
Parallel dasturlashning asosiy tushunchalari va jihatlari:
Parallellik: tezroq natijalarga erishish uchun bir nechta vazifalarni bir vaqtning o'zida bajarishni o'z ichiga oladi. Bu, birinchi navbatda, hisoblashni tezlashtirish bilan bog'liq. Bir vaqtning o'zida bir
nechta vazifalarni bajarishni o'z ichiga oladi. Bu ko'proq bir nechta vazifalarni boshqarish va ularning o'zaro ta'siri bilan bog'liq.
Parallelizm turlari:
Vazifalarning parallelligi: dasturni mustaqil ravishda bajarilishi mumkin bo'lgan kichikroq vazifalarga bo'linishni o'z ichiga oladi. Keyin har bir vazifa boshqa protsessor yoki yadroga tayinlanadi.
Ma'lumotlar parallelligi: ma'lumotlarni kichikroq bo'laklarga bo'lish va bir vaqtning o'zida ushbu qismlarga ishlov berishni o'z ichiga oladi. Bunga ko'pincha parallel halqalardan foydalanish orqali
erishiladi.
Parallel hisoblash modellari:
Umumiy xotira parallelligi: Bir nechta protsessorlar umumiy manzil maydonini baham ko'radi, bu ularga umumiy o'zgaruvchilar va ma'lumotlar tuzilmalariga bevosita kirish imkonini beradi.
Taqsimlangan xotira parallelligi: Har bir protsessor o'zining shaxsiy xotirasiga ega va protsessorlar o'rtasidagi aloqa xabarlarni uzatish orqali amalga oshiriladi.
Parallel dasturlash paradigmalari:
Ko'p ish zarralari: dasturni iplarga bo'linishni o'z ichiga oladi, bunda har bir ip mustaqil bajarilish ketma-ketligini ifodalaydi. Mavzular bir xil xotira maydonini bo'lishib, bir xil jarayon ichida bir vaqtning
o'zida ishlashi mumkin.
Xabarni uzatish: aniq xabar uzatish orqali alohida jarayonlar o'rtasidagi aloqani o'z ichiga oladi. Jarayonlar klasterdagi turli protsessorlar yoki tugunlarda ishlashi mumkin.
Parallel dasturlash tillari:
OpenMP: C, C++ va Fortran tillarida umumiy xotira parallel dasturlash uchun kompilyator direktivalari va kutubxona tartiblari toʻplami.
MPI (Message Passing Interface): Ko'pincha taqsimlangan xotira parallel dasturlashda foydalaniladigan xabarlarni o'tkazish kutubxonalari uchun standart.
CUDA (Compute Unified Device Architecture): NVIDIA tomonidan GPUlar uchun ishlab chiqilgan parallel hisoblash platformasi va dasturlash modeli.
Parallel dasturlashdagi qiyinchiliklar:
Bir vaqtning o'zida bir nechta mavzular yoki jarayonlar umumiy ma'lumotlarga kirishda va ulardan kamida bittasi ma'lumotlarni o'zgartirganda.
O'chirishlar: Ikki yoki undan ortiq jarayon davom eta olmaganida yuzaga keladi, chunki har biri ikkinchisi resursni chiqarishni kutmoqda.
Yukni muvozanatlash: samaradorlikni oshirish uchun ish yukining barcha protsessorlar o'rtasida teng taqsimlanishini ta'minlas h.
Parallel apparat arxitekturasi:
Simmetrik ko'p ishlov berish (SMP): Bir nechta protsessorlar umumiy xotiraga ega va bitta avtobusga ulangan.
Klaster hisoblash: Bir nechta mustaqil kompyuterlar (tugunlar) muammoni hal qilish uchun tarmoqda birgalikda ishlaydi.
GPU tezlashuvi: Parallel hisob-kitoblarni amalga oshirish uchun grafik ishlov berish birliklaridan (GPU) foydalanish, ayniqsa mashinani o'rganish kabi vazifalarda.
Asboblar va kutubxonalar (Tools and Libraries):
Intel Threading Building Blocks (TBB), OpenACC va boshqalar kabi turli xil vositalar va kutubxonalar parallel dasturlashda yordam beradi.
Samarali parallel dasturlash asosiy apparat arxitekturasini chuqur tushunishni, parallel vazifalarni sinchkovlik bilan sinxronlashtirishni va ma'lumotlarga bog'liqlik va aloqani samarali boshqarish
qobiliyatini talab qiladi.
38-Dasturlash texnologiyalari.
"Dasturlash texnologiyalari" atamasi juda kengdir, chunki u dasturiy ta'minotni ishlab chiqish sohasida qo'llaniladigan turli xil vositalar, dasturlash tillari, frameworklar va metodologiyalarni o'z ichiga
olishi mumkin. Ular quyidagilardan iborat:
Dasturlash tillari:
Python: O'qish va ko'p qirraliligi bilan mashhur bo'lgan Python veb-ishlab chiqish, ma'lumotlar fanlari, sun'iy intellekt va avtomatlashtirishda keng qo'llaniladi.
JavaScript: Front-end veb-ishlab chiqish uchun muhim, JavaScript server tomonida (Node.js) va interaktiv veb-ilovalarni yaratish uchun ham ishlatiladi.
Java: korporativ darajadagi ilovalarda, mobil ishlab chiqishda (Android) va keng ko'lamli tizimlarda qo'llaniladigan ko'p qirrali, ob'ektga yo'naltirilgan til.
C++ va C#: Odatda tizim darajasida dasturlash (C++), oʻyinlarni ishlab chiqish (C++) va Windows ilovalarini ishlab chiqish (C#) uchun ishlatiladi.
Ruby: Ko'pincha veb-ishlab chiqishda, ayniqsa Ruby on Rails ramkasida qo'llaniladi.
Veb sayt ishlab chiqish frameworklar:
Django (Python): Kuchli va kengaytiriladigan veb-ilovalarni yaratish uchun yuqori darajadagi veb-ramka.
Ruby on Rails (Ruby): Model-View-Controller (MVC) naqshiga amal qiluvchi veb-ilovalar tizimi.
Express.js (JavaScript): API va veb-ilovalarni yaratish uchun minimal va moslashuvchan Node.js veb-ilovalar tizimi.
Spring (Java): Java dasturini ishlab chiqish uchun keng qamrovli asos, korporativ ilovalarda keng qo'llaniladi.
Versiya nazorati:
Git: Dasturiy ta'minotni ishlab chiqish jarayonida manba kodidagi o'zgarishlarni kuzatish uchun foydalaniladigan taqsimlangan versiya boshqaruv tizimi. GitHub va GitLab kabi platformalar Git
omborlari uchun xosting xizmatlarini taqdim etadi.
Konteynerlashtirish va orkestratsiya:
Docker: Ilovalar va ularning bog'liqliklari uchun engil, portativ konteynerlarni yaratish va joylashtirish imkonini beradi.
Kubernetes: konteynerlashtirilgan ilovalarni joylashtirish, masshtablash va boshqarishni avtomatlashtirish uchun ochiq manbali konteyner orkestrlash platformasi.
Ma'lumotlar bazasini boshqarish tizimlari (Database Management Systems):
MySQL, PostgreSQL, SQLite: Ochiq manbali relyatsion ma'lumotlar bazasini boshqarish tizimlari.
MongoDB: Hujjatga yo'naltirilgan ma'lumotlar modelidan foydalanadigan NoSQL ma'lumotlar bazasi.
Microsoft SQL Server, Oracle ma'lumotlar bazasi: korporativ darajadagi relyatsion ma'lumotlar bazasini boshqarish tizimlari.
Cloud hisoblash:
Amazon Web Services (AWS), Microsoft Azure, Google Cloud Platform (GCP): Infratuzilma, platforma va dasturiy ta'minotni xizmat sifatida (IaaS, PaaS, SaaS) yechimlarni taklif qiluvchi yirik bulutli
xizmat provayderlari.
Mobil ilovalarni ishlab chiqish:
Android (Java/Kotlin): Android Studio - bu Android ilovalarini ishlab chiqish uchun rasmiy IDE.
iOS (Swift, Objective-C): Xcode iOS ilovalarini ishlab chiqish uchun rasmiy IDE hisoblanadi.
Front-end ishlab chiqish:
React, Angular, Vue.js: Interaktiv foydalanuvchi interfeyslarini yaratish uchun mashhur JavaScript kutubxonalari va ramkalar.
SASS/LESS: CSS-ni o'zgaruvchilar va ichki qoidalar kabi xususiyatlar bilan kengaytiruvchi preprotsessorlar.
Backend ishlab chiqish:
Node.js: server tomonida ishlab chiqish uchun JavaScript ish vaqti.
Flask (Python), Express (JavaScript): Veb-ilovalar va API yaratish uchun engil ramkalar.
Sun'iy intellekt va Machine Learning:
TensorFlow, PyTorch: Mashinani o'rganish modellarini yaratish va o'rgatish uchun ramkalar.
Scikit-Learn, Keras: Mashinani o'rganish va neyron tarmoqlar uchun kutubxonalar.
Uzluksiz integratsiya/uzluksiz joylashtirish (Continuous Integration/Continuous Deployment CI/CD):
Jenkins, Travis CI, GitLab CI/CD: Dasturiy ta'minotni qurish, sinovdan o'tkazish va joylashtirishni avtomatlashtirish uchun vositalar.
Agile va DevOps amaliyotlari:
Scrum, Kanban: Iterativ va qo'shimcha dasturiy ta'minotni ishlab chiqish uchun Agile metodologiyalari.Uzluksiz integratsiya (CI) va uzluksiz joylashtirish (CD): avtomatlashtirish va hamkorlikni
ta'kidlaydigan DevOps amaliyotlari.Bular bugungi kunda qo'llanilayotgan ko'p sonli dasturlash texnologiyalariga bir nechta misollar. Texnologiya landshafti dinamik bo'lib, ishlab chiquvchilar ko'pincha
o'z loyihalarining o'ziga xos talablaridan kelib chiqqan holda vositalarni tanlaydilar.
39- Ob'yektga yo'naltirilgan dasturlash tamoyillari. Merosxo’rlik va polimorfizm.
Ob'ektga yo'naltirilgan dasturlash (Object-oriented programming-OOP) - kodni tashkil qilish va tuzish uchun ob'ektlardan - sinflar misollaridan foydalanadigan dasturlash paradigmasi. U
ma'lumotlarni qamrab oluvchi "ob'ektlar" tushunchasi atrofida aylanadi. OOP tamoyillari kodni tashkil etish, qayta foydalanish va texnik xizmat ko'rsatishni yaxshilashga qaratilgan. Ob'ektga
yo'naltirilgan dasturlashning asosiy tamoyillari:
Inkapsulyatsiya (Encapsulation):
Ta'rif: Inkapsulyatsiya - bu ma'lumotlar (atributlar) va ma'lumotlarda ishlaydigan usullar (funktsiyalar) ni sinf deb nomlanuvchi yagona birlikka birlashtirish.
Maqsad: Bu ob'ektning ichki holatini yashirishga va unga to'g'ridan-to'g'ri kirishni cheklashga yordam beradi. Ma'lumotlarga kirish ob'ekt usullari orqali boshqariladi.
Abstraktsiya:
Ta'rif: Abstraksiya murakkab tizimlarni ular baham ko'radigan muhim xususiyatlar va xatti-harakatlarga asoslangan sinflarni modellashtirish orqali soddalashtirishni o'z ichiga oladi.
Maqsad: Bu ishlab chiquvchilarga keraksiz murakkabliklarni e'tiborsiz qoldirib, ob'ektning tegishli tafsilotlariga e'tibor qaratish imkonini beradi. Abstraktsiya tizimning murakkabligini boshqarishga
yordam beradi va dizayndagi ravshanlikni ta'minlaydi.
Merosxo’rlik, meros olish:
Ta'rif: Meros - bu yangi sinfga (quyi sinf yoki olingan sinf) mavjud sinfning (supersinf yoki asosiy sinf) xususiyatlari va xatti-harakatlarini meros qilib olish imkonini beruvchi mexanizm.
Maqsad: U kodni qayta ishlatishga yordam beradi va mavjud sinf asosida yanada ixtisoslashgan sinfni yaratishga imkon beruvchi sinflar o'rtasidagi munosabatlarni o'rnatadi. Meros "is-a" munosabatini
qo'llab-quvvatlaydi.
Polimorfizm:
Ta'rif: Polimorfizm turli sinflar ob'ektlarini umumiy tayanch sinf ob'ektlari sifatida ko'rishga imkon beradi. Bu har xil turdagi ob'ektlarni ifodalash uchun yagona interfeysga imkon beradi.Maqsad:
Polimorfizm kodni soddalashtiradi va moslashuvchanlikni oshiradi. U usullarni haddan tashqari yuklashni (bir xil nomga ega, ammo turli parametrlarga ega bo'lgan bir nechta usullar) va usulni bekor
qilishni (ustki sinfdagi usul bilan bir xil imzoga ega bo'lgan kichik sinfdagi usul) o'z ichiga oladi.
Assotsiatsiya:
Ta'rif: Assotsiatsiya ikki yoki undan ortiq sinflar o'rtasidagi munosabatlarni ifodalaydi. Bu bir-bir, bir-ko'p yoki ko'p-ko'p munosabatlar bo'lishi mumkin.
Maqsad: Assotsiatsiya sinflarning birgalikda ishlashiga imkon beradi, bu bir sinfga boshqasining xususiyatlaridan foydalanish imkonini beradi. Bu turli sinflarni ulash orqali yanada murakkab tizimlarni
qurishda yordam beradi.
Kompozitsiya:
Ta'rif: Kompozitsiya - bu birlashmaning kuchli shakli bo'lib, unda bir sinf boshqa sinf ob'ektini o'z ichiga oladi. Bu "bor-a" munosabatini bildiradi.Maqsad: Kompozitsiya oddiyroq narsalarni birlashtirib,
murakkabroq ob'ektlarni yaratishga imkon beradi. Bu kodni qayta ishlatishga yordam beradi va yanada moslashuvchan va barqaror dizaynlarga olib kelishi mumkin.
Inkapsulyatsiya, meros va polimorfizm (Encapsulation Inheritance Polymorphism-EIP) aloqasi:
Ushbu uchta tamoyil - inkapsulyatsiya, meros va polimorfizm - odatda birgalikda EIP yoki OOPning uchta ustuni deb ataladi. Ular mustahkam, modulli va kengaytiriladigan dasturiy
ta'minotni yaratish uchun asos yaratish uchun birgalikda ishlaydi.Ob'ektga yo'naltirilgan dasturlash (Object-oriented programming-OOP) turli dasturlash tillarida, jumladan Java, C++, Python va
boshqalarda keng qo'llaniladi. Ushbu tamoyillarga rioya qilgan holda, ishlab chiquvchilar tushunish va saqlash osonroq bo'lgan modulli, qayta ishlatiladigan va kengaytiriladigan kodni yaratishi
mumkin. OOP - bu murakkab dasturiy ta'minot tizimlarini ishlab chiqishni qo'llab-quvvatlaydigan kuchli paradigma bo'lib, zamonaviy dasturiy injiniringda asosiy tushunchadir.
40- Funktsional dasturlash. Rekursiya.
Funktsional dasturlash (Functional Programming-FP) - bu dasturlash paradigmasi bo'lib, hisoblashni matematik funktsiyalarni baholash sifatida ko'rib chiqadi va o'zgaruvchan holat va
o'zgaruvchan ma'lumotlardan qochadi. Funktsional dasturlashning asosiy tamoyillari va xususiyatlari:
Sof funktsiyalar (Pure Functions):
Ta'rif: Sof funktsiyalar ikkita asosiy xususiyatga ega - ular har doim bir xil kirish uchun bir xil natijani ishlab chiqaradi va ular hech qanday nojo'ya ta'sirga ega emas.
Maqsad: Sof funksiyalar kodni bashorat qilish va mulohaza yuritishni osonlashtiradi. Ular kutilmagan oqibatlarning oldini olishga yordam beradi va sinov va disk raskadrovkani yanada soddalashtiradi.
O'zgarmaslik:
Ta'rif: Funktsional dasturlashda ma'lumotlar o'zgarmasdir, ya'ni u yaratilgandan keyin uni o'zgartirib bo'lmaydi. Ma'lumotlarni o'zgartirish uchun paydo bo'ladigan har qanday operatsiya aslida yangi
nusxani yaratadi.
Maqsad: O'zgarmaslik kutilmagan nojo'ya ta'sirlar xavfini yo'q qiladi, parallellikni soddalashtiradi va kod sifatini yaxshilashga yordam beradi.
Birinchi darajali va yuqori darajali funktsiyalar:
Birinchi darajali funktsiyalar: Funktsiyalar birinchi darajali fuqarolar sifatida ko'rib chiqiladi, ya'ni ular o'zgaruvchilarga tayinlanishi, boshqa funktsiyalarga argument sifatida uzatilishi va qiymat sifatida
qaytarilishi mumkin.
Yuqori tartibli funktsiyalar: Boshqa funktsiyalarni argument sifatida qabul qilishi yoki ularni natija sifatida qaytarishi mumkin bo'lgan funktsiyalar. Masalan, xarita, filtr va qisqartirish.
Yo'naltiruvchi shaffoflik:
Ta'rif: Ifoda dasturning harakatini o'zgartirmasdan uning qiymati bilan almashtirilishi mumkin bo'lsa, havolali shaffof hisoblanadi.
Maqsad: Yo'naltiruvchi shaffoflik kod haqida fikr yuritishni osonlashtiradi va optimallashtirish imkonini beradi. Bu sof funktsiyalar g'oyasi bilan chambarchas bog'liq.
Rekursiya:
Rekursiya - bu dasturlash usuli bo'lib, unda funktsiya muammoning kichikroq misolini hal qilish uchun o'zini chaqiradi. Funktsional dasturlashda ko'pincha tsikllar kabi an'anaviy iterativ
tuzilmalar o'rniga rekursiya qo'llaniladi.
Ta'rif: Funktsional dasturlash ko'pincha rekursiyaga tayanadi, bu erda funktsiya asosiy holatga erishilgunga qadar muammoning kichikroq misollarini hal qilish uchun o'zini chaqiradi.
Maqsad: Rekursiya funktsional dasturlashning muayyan muammolari uchun tabiiy mos keladi va oqlangan, ifodali kodga olib kelishi mumkin. U ko'pincha looplar kabi an'anaviy iterativ
konstruktsiyalarni almashtiradi.
Rekursiya kuchli va moslashuvchan usul bo'lib, to'g'ri qo'llanilganda, u qisqa va o'qilishi mumkin bo'lgan kodga olib kelishi mumkin. Bu funktsional dasturlashning asosiy tushunchasi bo'lib,
ko'plab dasturlash tillarida, jumladan Lisp, Haskell va Scheme da keng qo'llaniladi.
Deklarativ uslub:
Ta'rif: Funktsional dasturlash qanday qilish kerakligidan ko'ra nima qilish kerakligini ta'kidlaydi. Bu deklarativ uslubni targ'ib qiladi, bunda asosiy e'tibor hisoblash mantig'ini ifodalashga qaratilgan.
Maqsad: Deklarativ kod ko'pincha imperativ kodga qaraganda qisqaroq, o'qilishi mumkin va tushunish osonroq.
Shakl mosligi:
Ta'rif: Shaklni moslashtirish - bu qiymatni naqshga nisbatan tekshirish va moslik asosida kodni shartli bajarish usuli.
Maqsad: Shaklni moslashtirish murakkab shartli bayonotlarni o'z ichiga olgan kodni soddalashtirishi mumkin. U ko'pincha ma'lumotlar tuzilmalarini buzish uchun ishlatiladi.
Funksiyanal dasturlashning shu kabi tamoyillari mavjud va shuningdek Rekursiya ham funksional dasturlashning bir tamoyili hisoblandi.
Download