O’zbekiston respublikasi axborot




Download 0.91 Mb.
Pdf ko'rish
Sana19.12.2023
Hajmi0.91 Mb.
#124011
Bog'liq
4-maruza
МАРУЗА-10.3 СЕМ, Paint grafik dasturida ishlash kurs ishi kirish BB, mob oferta (1), O`zsanoatqurilishbank 05-11-2023


O’ZBEKISTON RESPUBLIKASI AXBOROT
TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI 
RIVOJLANTIRISH VAZIRLIGI MUHAMMAD AL-
XORAZMIY NOMIDAGI TOSHKENT AXBOROT 
TEXNOLOGIYALARI UNIVERSITETI QARSHI FILIALI
Telekommunikatsiya texnologiya____ FAKULTETI 
TT-11-22___ GURUH TALABASINING
DASTURLASH 1 FANIDA 
Mustaqi ish 3 
Bajardi: Elmurodov Salohiddin
Qabul qildi: Nilufar Axmedova
QARSHI-2022 


Mavzu: Tarmoqlanuvchi algoritmlar va dasturlar
Agar hisoblash jarayoni biror berilgan shartning bajarilishiga qarab turli tarmoqlar bo’yicha davom 
ettirilsa va xisoblash jarayonida shu tarmoqlarning faqat bittasigina bajarilsa, bunday hisoblash 
jarayonlariga “tarmoqlanuvchi algoritmlar” deyiladi. Tarmoqlanuvchi algoritmlar uchun “Ayri” strukturasi 
ishlatiladi. Tarmoqlanuvchi strukturasi berilgan shartlarning bajarilishiga qarab ko’rsatilgan tarmoqdan 
faqat bittasining bajarilishini ta’minlaydi.
Tarmoqlanuvchi block-sxema
Berilgan shart romb orqali ifodalanadi, R-berilgan shart. Agar shart bajarilsa, "ha" tarmoq bo‘yicha A 
amal, shart bajarilmasa "yo‘q" tarmoq bo‘yicha B amal bajariladi. Tarmoqlanuvchi algoritmga tipik misol 
sifatida quyidagi sodda misolni qaraylik.
Berilgan x ning qiytmatiga bog‘liq holda, agar u musbat bo‘lsa «ha» tarmoq bo‘yicha y=x
2
funksiyaning 
qiymati, aks holda y = x
2
funksiyaning qiymati hisoblanadi.
Tarmoqlanuvchi block-sxema
Ko‘pgina masalalarni yechishda, shart asosida tarmoqlanuvchi algoritmlarning ikkita tarmog‘idan 
bittasining, ya’ni «ha» yoki «yo‘q» ning bajarilishi yetarli bo‘ladi. Bu holat tarmoqlanuvchi 
algoritmning xususiy holi sifatida aylanish strukturasi deb atash mumkin.
Aylanish strukturasi


Mavzu: Ichma-ich joylashgan rekusiv 
jarayonlarni tashkil etish
Ba’zan, takrorlanuvchi algoritmlar bir nechta parametrlarga bog‘liq bo‘ladi. Odatda 
bunday algoritmlarni ichma-ich joylashgan algortmlar deb ataladi. Misol sifati berilgan nxm 
o‘lchovli a
ij
–matritsa elementlarining yig‘indisini hisoblash masalasini qaraylik.
Bu yig‘indi hisoblash uchun, i ning har bir qiymatida j bo‘yicha ko‘paytmani hisoblab, 
avval yig‘indi ustiga ketma-ket qo‘shib borish kerak bo‘ladi. Bu jarayon quyidagi blok–
sxemada aks ettirilgan. Bu yerda i-tashqi sikl - yig‘indi uchun, j-esa ichki sikl-ko‘paytmani 
hosil qilish uchun foydalanilgan.
Mavzu: Mustaqil sinflar tashkil 
qilish
C++ tilida sinflar va obyektlar bilan ishlash Har qanday dasturning strukturasi tarmoqlanish va sikllar to’plamining 
kombinasiyasidan iborat bo’ladi. Obektga mo’ljallangan yondoshuv bir kunda o’ylab topilgan yemas. Uning paydo 
bo’lishi dasturiy ta’minotning tabiiy rivojidagi navbatdagi pog’ona xolos. Vaqt o’tishi bilan qaysi uslublar ishlash 
uchun qulay-u, kaysinisi noqulay yekanini aniqlash oson bo’lib bordi. Obektga mo’ljallangan yondoshuv yeng 
muvaffaqiyatli, vaqt sinovidan o’tgan uslublarni o’zida samarali mujassam yetadi. Dastlab dasturlash anchayin 


boshqotirma ixtiro bo’lib, u dasturchilarga dasturlarni kommutasiya bloki orqali kompyuterning asosiy xotirasiga 
to’g’ridan-to’g’ri kiritish imkonii berdi. Dasturlar mashina tillarida ikkilik tasavvurda yozilar yedi. Dasturlarni 
mashina tilida yozishda tez-tez xatolarga yo’l qo’yilar yedi, yeng ustiga ularni tuzilmalashtirish imkoni bo’lmagani 
tufayli, kodni kuzatib borish amalda deyarli mumkin bo’lmagan hol yedi. Bundan tashqari, mashina kodlaridagi 
dastur tushunish uchun g’oyat murakkab yedi. Vaqt o’tishi bilan kompyuterlar tobora kengroq qo’llana boshladi 
hamda yuqoriroq darajadagi prosedura tillari paydo bo’ldi. Bularning dastlabkisi FORTRAN tili yedi. Biroq obektga 
mo’ljallangan yondoshuv rivojiga asosiy ta’sirni keyinroq paydo bo’lgan, masalan, ALGOL kabi prosedura tillari 
ko’rsatdi. Prosedura tillari dasturchiga axborotga ishlov berish dasturini pastroq darajadagi bir nechta 
proseduraga bo’lib tashlash imkonini beradi. Pastroq darajadagi bunday proseduralar dasturning umumiy 
tuzilmasini belgilab beradi. Ushbu proseduralarga izchil murojaatlar proseduralardan tashkil topgan dasturlarning 
bajarilishini boshqaradi. Dasturlashning bu yangi paradigmasi mashina tilida dasturlash paradigmasiga nisbatan 
ancha ilg’or bo’lib, unga tuzilmalashtirishning asosiy vositasi bo’lgan proseduralar qo’shilgan yedi, Maydaroq 
funksiyalarni nafaqat tushunish, balki sozlash ham osonroq kechadi. Biroq, boshqa tomondan, prosedurali 
dasturlash koddan takroran foydalanish imkonini cheklab qo’yyadi. Buning ustiga dasturchilar tez-tez «makaron» 
dasturlar ham yozib turishganki, bu dasturlarni bajarish likopdagi spagetti uyumini ajratishga o’xshab ketar yedi. 
Va, nihoyat, shu narsa aniq bo’ldiki, prosedurali dasturlash usullari bilan dasturlarni ishlab chiqishda diqqatni 
ma’lumotlarga qaratishning o’zi muammolarni keltirib chiqarar yekan. Chunki ma’lumotlar va prosedura ajralgan, 
ma’lumotlar inkapsullanmagan. Bu nimaga olib keladi? Shunga olib keladiki, har bir prosedura ma’lumotlarni 
nima qilish kerakligini va ular qayerda joylashganini bilmog’i lozim bo’ladi. Agar prosedura o’zini yomon tusa-yu, 
ma’lumotlar ustidan noto’g’ri amallarni bajarsa, u ma’lumotlarni buzib qo’yishi mumkin. Har bir prosedura 
ma’lumotlarga kirish usullarini dasturlashi lozim bo’lganligi tufayli, ma’lumotlar taqdimotining o’zgarishi 
dasturning ushbu kirish amalga oshirilayotgan barcha o’rinlarining o’zgarishiga olib kelar yedi. Shunday qilib, 
xatto yeng kichik to’g’rilash ham butun dasturda qator o’zgarishlar sodir bo’lishiga olib kelar yedi. Modulli 
dasturlashda, masalan, Modula2 kabi tilda prosedurali dasturlashda topilgan ayrim kamchiliklarni bartaraf 
yetishga urinib ko’rildi. Modulli dasturlash dasturni bir necha tarkibiy bo’laklarga, yoki, boshqacha qilib aytganda, 
modullarga bo’lib tashdlaydi. Agar prosedurali dasturlash ma’lumotlar va prosedsralarni bo’lib tashlasa, modulli 
dasturlash, undan farqli o’laroq, ularni birlashtiradi. Modul ma’lumotlarning o’zidan hamda ma’lumotlarga ishlov 
beradigan proseduralardan iborat. Dasturning boshqa qismlariga moduldan foydalanish kerak bo’lib qolsa, ular 
modul interfeysiga murojaat yetib qo’yaqoladi. Modullar barcha ichki axborotni dasturning boshqa qismlarida 
yashiradi. Biroq modulli dasturlash ham kamchiliklardan holi yemas. Modullar kengaymas bo’ladi, bu degani 
kodga bevosita kirishsiz hamda uni to’g’ridanto’g’ri o’zgartirmay turib modulni qadamma-qadam uzgartirish 
mumkin yemas. Bundan tashqari, bitta modulni ishlab chiqishda, uning funksiyalarini boshqasiga o’tkazmay 
(delegat qilmay) turib boshqasidan foydalanib bo’lmaydi. Yana garchi modulda turni belgilab bo’lsa-da, bir modul 
boshqasida belgilangan turdan foydalana olmaydi. Modulli va prosedurali dasturlash tillarida tuzilmalashtirilgan 
va tuzilmalashtirilmagan ma’lumotlar o’z «tur»iga yega. Biroq turni kengaytirish usuli, agar «agregatlash» deb 
ataluvchi usul yordamida boshqa turlarni yaratishni hisobga olmaganda, mavjud yemas. Va, nihoyat, modulli 
dasturlash - bu yana proseduraga mo’ljallangan gibridli sxema bo’lib, unga amal qilishda dastur bir necha 
proseduralarga bo’linadi. Biroq yendilikda proseduralar ishlov berilmagan ma’lumotlar ustida amallarni 
bajarmaydi, balki modullarni boshqaradi. Obektga mo’ljallangan dasturlash modulli dasturlashdan keyingi 
mantiqiy pog’onani yegallaydi, u modulga nasldan-naslga o’tishni va polimorfizmni qo’shadi. Obektga 
mo’ljallangan dasturlash dan foydalanr yekan, dasturchi dasturni bir qator oliy darajali obektlarga bo’lish yo’li 
bilan tizimlashtiradi. Har bir obekt hal qilinayotgan muammoning ma’lum bir tomonini modellashtiradi. Obektga 
mo’ljallangan dasturlash yendilikda dasturni bajarish jarayonini boshqarish uchun dasturchi diqqatini 
proseduralarni ketma-ketlikda chaqirib olish ro’yxatini tuzib o’tirishga qaratmaydi. Buning o’rniga obektlar o’zaro 
aloqada bo’ladi. Obektga mo’ljallangan dasturlash yordamida ishlab chiqilgan dastur hal qilinayotgan 
muammoning amaldagi modeli bo’lib xizmat qiladi. Dasturga obektlar atamalari bilan ta’rif berish dasturiy 
ta’minotni ishlab chiqishning yeng tushunarli usulidir. Obektlar hamma narsani obekt nima qilayotgani nuqtai 


nazaridan idrok yetishga, ya’ni uning hatti-xarakatlarini hayolan modellashtirishga majbur qiladi. Shu tufayli 
obektga yondoshishda u dasturning bajarilishi jarayonida qanday ishlatiladi degan nuqtai nazardan biroz 
ye’tiborni chalg’itish mumkin. Shunday qilib, dasturni yozish jarayonida haqiqiy dunyoning tabiiy atamalaridan 
foydalanish mumkin. Dasturni alohida proseduralar va ma’lumotlar shaklida (kompyuter dunyosi atamalarida) 
qurish o’rniga, obektlardan iborat dastur qurish mumkin. Obektlar otlar, fe’llar va sifatlar yorlamida haqiqiy 
dunyoni dasturda modellashtirishga imkon beradi. Joriy qilish (realizasiya) hatti-xarakatlar qanday 
bajarilayotganini belgilaydi. Dasturlash atamalarida joriy qilish - bu dasturiy kod. Yechilayotgan masala atamalari 
bilan fikrlab, joriy qilishning mayda-chuyda detallarida o’ralashib qolish havfidan qochish mumkin. Albatta, ayrim 
oliy darajadagi obektlar kompyuter bilan aloqa qilishda past darajadagi, mashinaga mo’ljallangan usullardan 
foydalanishi lozim. Biroq obekt bu aloqani tizimning boshqa qismlaridan izolyasiya qiladi. Obekt dastur 
konsturksiyasi bo’lib, unda holat va hatti-xarakat inkapsulalangan bo’ladi. Obekt holati bu ichki obekt 
o’zgaruvchanlari qiymatlarining yig’indisidir. Ichki o’zgaruvchan deb obekt ichida saqlanadigan qiymatga aytiladi. 
Mohiyat ye’tibori bilan, obekt bu sinfning yekzemplyari (nushalaridan biri)dir. Obektga mo’ljallangan dasturlash, 
haqiqiy dunyo kabi, obektlardan tashkil topadi. Obektga mo’ljallangan sof dasturlash tilida, yeng dastlabki, 
bazaviy, butun, mantiqiy turlardan tortib, to sinflarning murakkabroq nushalarigacha, barchasi obekt hisoblanadi. 
Biroq obektga mo’ljallangan tillarning hammasi ham bu darajada chuqurlashib ketmagan. Ayrim tillarda 
(masalan, Java kabi) int va float ga o’xshash oddiy primitivlar obekt sifatida olib qaralmaydi. Obektga 
mo’ljallangan dasturlash obektlari, haqiqiy olam obektlari kabi, o’z xususiyatlari va xatti-harakatlari bo’yicha 
tasniflanadi. Biologiyada itlar, mushuklar, fillar va odamlar sut yemizuvchilarga kiradi. Bu turli xildagi jonivorlarni 
umumiy xususiyatlar birlashtirib turadi. Xuddi shunday, dasturiy ta’minot olamida ham obektlar bitta yoki bir 
nechta sinflarga mansub bo’ladi. Bitta sinfga mansub obektlarga umumiy xususiyatlar xos bo’ladi. Boshqacha 
qilib aytganda, sinf obektni tavsiflaydigan xususiyatlar va xulq-atvorlarni, shuningdek, va bu yeng muhimidir, 
obekt javob beradigan xabarlarni belgilab beradi. Biron bir obekt boshqa obektning xulq-atvoriga ta’sir 
ko’rsatgan vaqtda, u bu ta’sirni bevosita ko’rsatmaydi, balki undan qandaydir bir qo’shimcha axborotdan 
foydalangan holda o’zini-o’zi o’zgartirishni iltimos qiladi. Odatda bu «xabarni jo’natish» deb ataladi. Sinf umumiy 
xususiyatlar va xulq-atvorga yega bo’lgan obektlarni birlashtiradi. Bitta sinfga mansub obektlar bir xil 
xususiyatlarga yega bo’lib, bir xil xatti-harakat namoyon yetadi. Sinflar shablon (qolip)ga o’xshaydi: ular 
obektlarning yekzemplyarlari (nushalari)ni tayyorlash uchun qo’llanadi. Belgilar - sinfning tashqaridan ko’rinib 
turgan xususiyatlari. Obekt ichki o’zgaruvchiga bevosita kirishni taqdim yetganda yoki usul yordamida qiymatni 
qaytargandagina, o’z belgilarini namoyon qilishi mumkin. Xulq-atvor - xabarga yoki holatning o’zgarishiga 
javoban obekt tomnidan bajariladigan xattiharakatlar. U obekt nima qilayotganini bildiradi. Bir obekt ikkinchi 
obekt ustida xatti-harakatlar bajarib, uning xulq-atvoriga ta’sir ko’rsatishi mumkin. «Xatti-harakat» atamasi 
o’rniga «usulni chaqiirish», «funksiyani chaqirish» yoki «xabarni uzatish» atamalari qo’llanadi. Muhimi bu 
atamalarning qaysi biri qo’llanayotganida yemas, albatta, muhimi bu xatti-harakatlar obekt xulq-atvorini 
namoyon qilishga da’vat yetishidadir. Obektlar o’rtasida aloqa obektga mo’ljallangan dasturlashning muhim 
tarkibiy qismidir. Obektlar o’zaro aloqasining ikkita asosiy usuli mavjuddir. Birinchi usul: obektlar biri 
ikkinchisidan mustaqil ravishda mavjud bo’ladi. Agar alohida obektlarga o’zaro aloqa kerak bo’lib qolsa, ular bir-
birlariga xabar jo’natadi. Obektlar birbirlari bilan xabarlar yordamida aloqa qiladi. Xabar olgan obekt ma’lum 
xatti-harakatlarni bajaradi. Xabar uzatish bu obekt holatini o’zgartirish maqsadida uslubni chaqirib olish yoki 
xulq-atvor modellaridan birini qo’llashning o’zginasidir. Ikkinchi usul: obekt tarkibida boshqa obektlar bo’lishi 
mumkin. Xuddi Obektga mo’ljallangan dasturlash da bo’lganidek, dastur obektlardan tashkil topganidek, obektlar 
ham, o’z navbatida, agregasiya yordamida boshqa obektlardan jamlanishi mumkin. Ushbu obektlarning har 
bittasida uslub va belgilarga yega bo’lgan interfeys mavjud bo’ladi.
Xabar - obektga mo’ljallangan yondoshuvning muhim tushinchasi. Xabarlar mexanizmi tufayli obektlar o’z 
mustaqilligini saqlab qolishi mumkin. Boshqa biron obektga xabar jo’natayotgan obekt uchun xabar olgan obekt 
talabdagi xatti-harakatni qanday bajarishi unchalik muhim yemas. Unga xatti-harakat bajarilganligining o’zi 


muhimdir. Ob’yekt - mavhum (abstrakt) mohiyat bo‘lib, u bizni o‘rab turgan haqiqiy olamning tavsiflariga ega. 
Ob’yektlarni yaratish va ular ustida manipulyatsiyalar olib borish - C++tilining qandaydir alohida imtiyozi emas, 
balki ob’yektlarning tavsifi va ular ustida o‘tkaziladigan opyeratsiyalarni kodli konstruktsiyalarda o‘zida 
mujassamlantiradigan dasturlash myetodologiyasi (uslubiyoti) ning natijasidir. Dasturning har bir ob’yekti, har 
qanday haqiqiy ob’yekt kabi, o‘z atributlari va o‘ziga xos xulq-atvori bilan ajralib turadi. Ob’yektlarni turli 
katyegoriyalarga ko‘ra tasniflash mumkin: masalan, myening «Cassio» raqamli qo‘l soatim soatlar sinfiga 
mansub. Soatlarning dasturiy ryealizatsiyasi (ishlatilishi), standart holat sifatida, sizning kompyutyeringizning 
opyeratsiya tizimi tarkibiga kiradi. Har bir sinf sinflar tabaqalanishida (iyerarxiyasida) ma’lum o‘rinni egallaydi. 
Masalan, barcha soatlar vaqtni o‘lchash asboblari sinfiga (tabaqalanishda ancha yuqori turgan) mansub, soatlar 
sinfining o‘zi esa xuddi shu mavzudagi ko‘plab hosila variatsiyalarni o‘z ichiga oladi. SHunday qilib, har qanday 
sinf ob’yektlarning biron-bir katyegoriyasini aniqlaydi, har qanday ob’yekt esa biron-bir sinf ekzyemplyari 
(nushasi)dir. Ob’yektga mo‘ljallangan dasturlash (OMD) - bu dasturchining asosiy diqqatini ob’yektlarni ishlatish 
tafsilotlariga emas, balki ob’yektlar o‘rtasidagi aloqalarga qaratadigan myetodika. Bu bobda OMD ning asosiy 
tamoyillari (inkapsulyalash, vorislik, polimorfizm, sinflar va ob’yektlarning yaratilishi) C++Builder tilining vizual 
ishlov byerish intyegratsiyalangan muhitida qabul qilingan yangi tushuncha va atamalar bilan izohlanadi va 
to‘ldiriladi. SHuningdyek, yangi imkoniyatlar (komponyentlar, xususiyatlar, voqyea-hodisaning qayta ishlagichi) 
evaziga tilni kyengaytirish tavsiflari hamda ANCI
C++ standartining oxirgi ko‘shimchalari (shablonlar, nomlar fazosi, to‘g‘ridan-to‘g‘ri va noaniq e’lonlar, dasturni 
bajarishda turlar idyentiftikatsiyasi, istisnolar) ning tavsiflari kyeltiriladi. Bob umumiy xaraktyerga ega bo‘lib, 
OMD ning o‘quvchi kyeyinchalik duch kyelishi mumkin bo‘lgan maxsus atamalari bilan tanishtirish maqsadini 
ko‘zlaydi. Buning zazurligi shundaki, C++Builder tili OMD ning tipik (namunaviy) tizimi hisoblanadi hamda OMD 
ning rivojida yetakchi o‘rin egallashga da’vogarlik qiladi. Inkapsulyalash Inkapsulyalash - ma’lumotlarning va shu 
ma’lumotlar ustida ish olib boradigan kodlarning bitta ob’yektda birlashtirilishi. OMD atamachiligida ma’lumotlar 
ob’yekt ma’lumotlari a’zolari (data members) dyeb, kodlar ob’yektli myetodlar yoki funktsiya-a’zolar (methods, 
member functions) dyeb ataladi. Inkapsulyalash ob’yektni tashqi muhitdan maksimal darajada ajratish 
(izolyatsiya qilish) imkonini byeradi. Bu ishlab chiqilayotgan dasturlarning ishonchliligini syezilarli darajada 
oshiradi, chunki ob’yektda mujassamlangan (lokallashtirilgan) funktsiyalar dastur bilan nisbatan kam xajmdagi 
ma’lumotlarni almashinadi, buning ustiga ushbu ma’lumotlarning miqdori va turi odatda sinchkovlik bilan 
nazorat qilinadi. Natijada ob’yektda inkapsulalangan funktsiyalar va ma’lumotlarning almashtirib qo‘yilishi yoki 
o‘zgartirilishi (moditsikatsiya qilinishi) umuman olganda dastur uchun yaxshi kuzatib bo‘lmaydigan oqibatlarni 
olib kyelmaydi (dasturlarning himoyalanganligini oshirish maqsadida OMD larda global o‘zgaruvchilar dyeyarli 
qo‘llanmaydi). Inkapsulyalashning yana bir muhim natijalaridan biri shundaki, bunda ob’yektlar almashinuvi, 
ularning bir dasturdan ikkinchisiga o‘tkazilishi osonlashadi. OMD da inkapsulyalash tamoyilining soddaligi va 
qulayligi dasturchilarni C++Builder tarkibiga kiruvchi Vizual Komponyentlar Kutubxonasini kyengaytirishga 
rag‘batlantiradi. Sinflar, komponyentlar va ob’yektlar Sinf jismoniy mohiyatga ega emas, tuzilmaning e’lon 
qilinishi uning eng yaqin analogiyasidir. Sinf ob’yektni yaratish uchun qo‘llangandagina, xotira ajralib chiqadi. Bu 
jarayon ham sinf nushasi (class instance) ni yaratish dyeb ataladi. C++tilining har qanday ob’yekti bir xil 
atributlarga, shuningdyek ushbu sinfning boshqa ob’yektlari bilan funktsionallikka ega. O‘z sinflarini yaratish 
hamda ushbu sinflar ob’yektlarining xulq-atvori uchun to‘liq mas’uliyat dasturchi zimmasiga yuklanadi. Biron-bir 
muhitda ishlar ekan, dasturchi standar sinflarning kattagina kutubxonasi (masalan, C++Builder Vizual 
Komponyentlar Kutubxonasi) ga kirish huquqiga ega bo‘ladi. Odatda, ob’yekt qandaydir unikal holatda mavjud 
bo‘lib, bu holat ob’yekt atributlarining joriy qiymatlari bilan byelgilanadi. Ob’yekt sinfining funktsionalligi ushbu 
sinf ekzyemplyari (nushasi) ustida o‘tkaziladigan opyeratsiyalar bilan byelgilanadi. C++tilida sinfni aniqlash uchun, 
ma’lumotlar a’zolari ustida ish olib boradigan hamda ob’yektlarning xulq-atvorini byelgilaydigan ma’lumotlar 
a’zolari va myetodlarini inkapsulyalash talab qilinadi. YUqoridagi misolimizga qaytib, shuni ta’kidlab o‘tamizki, 
«Casio» soatining suyuq kristalli displyeyi ushbu ob’yektning ma’lumotlar a’zosi bo‘ladi, boshqarish tugmachaliri 


esa ob’yektli myetodlar bo‘ladi. Soat tugmachalarini bosib, displyeyda vaqtni o‘rnatish ishlarini olib borish 
mumkin, ya’ni OMD atamalarini qo‘llaydigan bo‘lsak, myetodlar, ma’lumotlar a’zolarini o‘zgartirib, ob’yekt 
holatini modifikatsiya qiladi. C++Builder komponyentlar (components) tushunchasini ham kiritadi. 
Komponyentlar - maxsus sinflar bo‘lib, ularning xususiyatlari ob’yektlar atributlarini tashkil qiladi, ularning 
myetodlari esa komponyentli sinflarning tyegishli nushalari ustidagi opyeratsiyalarni amalga oshiradi. Myetod 
tushunchasi odatda komponyentli sinflar tarkibida qo‘llanadi va tashqi tomondan oddiy sinfning funktsiya-a’zo 
atamasidan farq qilmaydi. C++Builder tili komponyentlarning turi va funktsional xulqatvorini nafaqat myetodlar 
yordamida, balki komponyentlar sinflarigagina xos bo‘lgan xususiyatlar vositasida ham manipulyatsiya qilish 
imkonini byeradi. C++Builder muhitida ishlar ekansiz, siz ilovani loyihalash bosqichida ham, uni bajarish 
bosqichida ham komponyentli ob’yekt ustida ishlash
(manipulyatsiya qilish) mumkin ekanini tushunib yetishingiz ayon.
Komponyentlar xususiyatlari (propertion) bu ma’ulmotlar a’zolarining kyengayishidir. Garchi ular ma’lumotlarni 
o‘z hollaricha saqlamasalar-da, biroq ob’yekt ma’lumotlari a’zolariga kirish huquqini ta’minlaydilar. Xususiyatlarni 
e’lon qilishda C++Builder _property kalit-so‘zdan foydalanadi. Voqyealar (events) yordamida komponyenta o‘ziga 
qandaydir avvaldan byelgilangan ta’sir ko‘rsatilganini foydalanuvchiga ma’lum qiladi. C++Builder muhitida ishlab 
chiqilayotgan dasturlardagi myetodlar asosan ma’lum voqyealarning yuzaga kyelishida dastur ryeaktsiyasini 
ularga nisabatan ishga soladigan voqyealarning qayta ishlagichlari
(events handlers) da qo‘llanadi. Windows opyeratsiya tizimidagi voqyealar va ma’lumotlardagi qandaydir 
o‘xshashlikni payqab olish qiyin emas. Bu yerdagi oddiy tipik voqyealar klaviaturadagi tugmacha yoki klavishalarni 
bosishdan iborat. Komponyentalar o‘z xususiyatlari, myetodlari va voqyealarini inkapsulalaybilar. Bir qarashda, 
komponyentalar C++tilining boshqa ob’yektli sinflaridan, bir qator xususiyatlarni hisobga olmaganda, hyech bir 
farq qilmaydi. Bu xususiyatlar orasida hozircha quyidagilarni ko‘rsatib o‘tamiz:  Komponyentalarning ko‘pchiligi 
intyerfyeysning foydalanuvchi bilan boshqarish elyemyenti bo‘lib, ularning ayrimlari g‘oyat murakkab xulq-
atvorga ega.  Barcha komponyentalar bitta umumiy ajdod-sinf (TComponent) ning byevosita yoki bilvosita 
avlodlaridirlar.  Komponyentalar odatda byevosita qo‘llanadi, ya’ni ularning xususiyatlari ustida ish olib boriladi 
(manipulyatsiyalar o‘tkaziladi); ularning o‘zlari yangi tarmoq sinflar (sinfchalar) qurish uchun bazaviy sinflar 
sifatida xizmat qila olmaydi.  Komponyentalar faqat new opyeratori yordamida uyum (heap) ning dinamik 
xotirasida joylashtiriladi, oddiy sinflar ob’yektlarida bo‘lganidyek, styekda emas.  Kopmonyentalar xususiyatlari 
RTTI
- dinamik turlar idyentifikatsiyasini o‘z ichiga oladi.  Komponyentalarni Komponyentalar Palitrasiga qo‘shish va 
shundan so‘ng C++Builder vizual ishlanmasining intyegrallashgan muhitiga tyegishli SHakllar Muharriri vositasida 
ular ustida ishlash (manipulyatsiyalar o‘tkazish) mumkin. OMD ob’yektlarning o‘zaro aloqasini talablarni biron-bir 
ob’yektga yoki ob’yektlararo yuborish sifatida talqin etadi. Talabni olgan ob’yekt bunga tyegishli usulni chaqirish 
bilan javob byeradi. OMD ning SmallTalk kabi boshqa tillaridan farqli o‘laroq, C++tili «talab» tushunchasidan 
foydalanishni qo‘llab-quvvatlamaydi. Talab - ob’yekt ustida qilinayotgan ish, myetod esa - kyelib tushgan talabga 
ob’yektning javobi. Yaqinroq olib qaralsa, myetod - sinf ta’rifiga kiritilgan oddiy funktsiya-a’zo. Myetodni chaqirib 
olish uchun, ushbu sinf kontyekstida yoki biron-bir voqyeaning qayta ishlagichida funktsiya nomini ko‘rsatish 
kyerak. Aynan myetodning sinf bilan yashirin aloqasi uni oddiy funktsiya tushunchasidan ajratib turadi. Myetodni 
bajarish paytida, u o‘z sinfining barcha ma’lumotlariga kirish huquqiga ega bo‘ladi, garchi ushbu sinf nomining 
ochiq-oydin spyetsifikatsiyasini talab qilmasa ham. Bu ish byeistisno har bir myetodga yashirin paramyetrga, ya’ni 
sinf nushasi (ekzyemplyari) ga o‘zgaruvchan ko‘rsatkich this ni byerish orqali ta’minlanadi. Har gal myetod sifn 
ma’lumotlari a’zolariga murojaat qilganda, kompilyator this ko‘rsatkichidan foydalanadigan maxsus kodni 
gyenyeratsiya qiladi. 3.1. Sinflarni ishlab chiqish Sinflar ma’lum maqsadlarga erishish uchun ishlab chiqiladi. 
Odatda dasturchi mavhum g‘oyadan boshlaydi va u asta-syekin, loyihani ishlab


chiqish jarayonida turli dyetallar bilan to‘ldirib boriladi. Ba’zida birbiriga g‘oyat o‘xshash bo‘lgan bir nyecha sinfni 
ishlab chiqish bilan ish tugallanadi. Sinflarda kodlarni bu kabi takrorlash (dubllashtirish) dan qochish uchun, bu 
sinflarni ikki qismga bo‘lish kyerak, ya’ni umumiy qismni ota sinfida aniqlab, farqlanadiganlarini hosila sinfda 
qoldirish kyerak. Sinfdan foydalanishdan oldin u e’lon qilinishi kyerak. Odatda, amaliyotchi dasturchi tayyor 
bazaviy sinflardan foydalanadi, bundan tashqari u barcha spyetsifikatsiyalarni va ichki ishlash yo‘llarini bilishi 
mutlaqo shart emas. Biroq, C++bazaviy sinfidan foydalanishingiz uchun, qanday ma’lumotlar a’zolari va 
myetodlarga kira olishingiz mumkinligini (S++Builder komponyentasi qo‘llansa, taqdim etilayotgan xususiyatlar va 
voqyealarni ham) albatta bilishingiz lozim. Bazaviy sinfni e’lon qilish S++Builder sizga o‘z xususiyatlari, 
ma’lumotlari, myetodlari va voqyealari nomlarini inkapsulalaydiganbazaviy sinfni e’lon qilish imkonini byeradi. 
O‘zlarining byevosita vazifalarini bajarishdan tashqari, ob’yektli myetodlar sinf xususiyatlari va ma’lumotlari 
qiymatlariga qirish uchun ma’lum imtiyozlarga ham ega bo‘ladilar. Sinf ichidagi har bir e’lon qilish, sinf nomi qaysi 
syektsiyada paydo bo‘lishiga qarab, bu nomlarga kirish imtiyozlarini aniqlaydi. Har bir syektsiya quyidagi kalit-
so‘zlarning biridan boshlanadi: private, protected, public. Bazaviy sinfni e’lon qilishning umumlashma sintaksisi 
quyidagi ko‘rinishga ega: slass className private: 
myetodlar> protected:   myetodlar> public:    
  SHunday qilib, C++da bazaviy sinfni e’lon qilish quyidagicha kirish 
huquqlari va tyegishli ko‘rishlik sohasini taqdim etadi:  Privat private nomlar faqat ushbu sinf myetodlariga 
ruxsat etilgan eng chyeklangan qirish huquqiga ega. Hosila sinflar uchun bazaviy sinflarning privat myetodlariga 
kirish taqiqlangan.  Himoyalangan protected nomlar ushbu sinf va undan hosil bo‘lgan sinflar myetodlariga 
ruxsat etilgan kirish huquqiga ega.  Ommaviy public nomlar barcha sinflar va ularning ob’yektlari myetodlariga 
ruxsat etilgan chyeksiz kirish huquqiga ega. Quyidagi qoidalar sinf e’lon qilinishining turli syektsiyalarining hosil 
bo‘lishida qo‘llanadi: 1. Syektsiyalar har qanday tartibda ham paydo bo‘lishi, ularning nomlari esa takroran 
uchrayvyerishi mumkin. 2. Agar syektsiya nomlanmagan bo‘lsa, sinf nomlarining kyeyingi e’lonlarini kompilyator 
privat dyeb hisoblaydi. Bu yerda sinf va tuzilmaning e’lon qilinishida farq yuzaga kyelayapti: tuzilma yashirin 
holda ommaviy dyeb olib qaraladi. 3. Agar siz haqiqatan ham ma’lumotlar a’zolariga har qayerdan kirishni ruxsat 
etmoqchi bo‘lmasangiz, imkon darajasida ularni ommaviy syektsiyaga joylashtirmang. Faqat hosila sinflar 
myetodlariga kirish huquqini byerish uchun, ularni odatda himoyalangan dyeb e’lon qiladilar. 4. Myetodlardan 
ma’lumotlar xususiyatlari va a’zolarini tanlash, tyekshirish va qiymatlarini o‘rnatish uchun foydalaning. 5. 
Konstruktorlar va dyestruktorlar maxsus funktsiyalar bo‘lib, qiymatni qaytarmaydilar va o‘z sinfining nomiga ega 
bo‘ladilar. Konstruktor byerilgan sinf ob’yektini quradi, dyestruktor esa uni olib tashlaydi. 6. C++ning bittadan 
ortiq yo‘riqnomasiga ega bo‘lgan myetodlarni (konstruktorlar va dyestruktorlar kabi) sinfdan tashqarida dyeb 
e’lon qilish tavsiya etiladi. Navbatdagi misolda bazaviy sinfning e’lon qilinishini biron-bir aniq maxmun bilan 
to‘ldirishga harakatqilingani ko‘rsatilgan. Shuni ta’kidlab o‘tishimiz lozimki, C++Builder sinfi komponyentlari 
uchun Count xususiyatini himoyalangan syektsiyada e’lon qilish xos bo‘lsa, FCount ma’lumotlar a’zosiga yozuvni 
amalga oshiradigan SetCount myetodini privat syektsiyada e’lon qilish xos. Class Tpoint {private: int Fcount; 
//Ma’lumotlarning privat a’zosi void _fastcall SetCount(int Value); protected: _property int
Count=//Himoyalangan xususiyat {read=Fcount, write=SetCount}:
double x;//Himoyalangan ma’lumotlar a’zosi double y;//Himoyalangan ma’lumotlar a’zosi public: Tpoint(double 
xVal, double yVal)://Konstruktor | double getX(); | double getY(); Myetodlarning e’lon qilinishi va aniqlanishi turli 
fayllarda saqlanadi. Misollar shuni ko‘rsatadiki, myetodlar sinfdan tashqarida aniqlanganda ularning nomlarini 
kvalifikatsiya qilish (ixtisoslashtirish) kyerak. Myetodning ko‘rimlilik sohasini aniqlaydigan uning bunday 
kvalifikatsiya sintaksisi quyidagi ko‘rinishga ega: :: Siz sinfni e’lon qilganingizdan 
kyeyin, uning nomidan ushbu sinf ob’yektini e’lon qilishda idyentifikator turi sifatida foydalanish mumkin. 
Masalan: TPoint* MyPoint. Sinf myetodlarini sinfdan tashqarida aniqlashga misol Funktsiya prototipi ichida 


joylashtirilgan employee sinfini ko‘rib chiqamiz. Funktsiyaning o‘zi esa sinfdan tashqarida aniqlangan. Navbatdagi 
CLASSFUN.CPP dasturi show_employee funktsiyasining ta’rifini sinfdan tashqarida joylashtiradi va bunda sinf 
nomini ko‘rsatish uchun global ruxsat opyeratoridan foydalanadi: #include  #include  class 
employee { public: char name [64]; long employee_id; float salary; void show_employee(void); }; void 
employee::show_employee(void) { cout << "Imya: " << name << endl; cout << "Nomyer slujaщyego: " << 
employee_id << endl; cout << "Oklad: " << salary << endl; }; void main(void) { employee worker, boss; 
strcpy(
worker.name
, "John Doe"); worker.employee_id = 12345; worker.salary = 25000; strcpy(
boss.name

"Happy Jamsa"); boss.employee_id = 101; boss.salary = 1011012.00; worker.show_employee(); 
boss.show_employee(); } Konstruktorlar va dyestruktorlar Nomlaridan ko‘rinib turganidyek, konstruktor - bu 
myetod bo‘lib, u o‘z xotirasida ushbu sinf ob’yektini quradi, dyestruktor esa - bu ob’yektni olib tashlaydigan 
myetod. Konstruktorlar va dyestruktorlar boshqa ob’yektli myetodlardan quyidagi xususiyatlariga ko‘ra 
afrqlanadi:  O‘z sinfi nomi bilan bir xil bo‘lgan nomga ega.  Qaytariladigan qiymatga ega emas.  Garchi hosila 
sinf bazaviy sinflarning konstruktorlari va dyestruktorlarini chaqira olsa-da, konstruktor va dyestruktorlarning 
o‘zlari vorislik qilolmaydi.  Agar boshqacha e’lon qilinmagan bo‘lsa, kompilyator tomonidan avtomatik tarzda 
public sifatida gyenyeratsiya qilinadi.  Sinf ob’yektlarining yaratilishi va yo‘q qilinishini tyegishli tarzda 
kafolatlash uchun, kompiyaltor tomonidan chaqirib olinadi.  Agar
ob’yekt dinamik xotiraning ajratilishi va yo‘q qilinishini talab qilsa, new va delete opyeratorlariga noaniq 
murojaatga ega bo‘lishi mumkin. Quyida konstruktorlar va dyestruktorlar e’lonining umumlashma sintaksisini 
namoyish qiluvchi misol kyeltiramiz:
class className {public: //className ma’lmotlarining boshqa a’zolari; //yashirin className bo‘yicha 
konstruktor(
ko‘chirish konstruktori //Boshqa konstruktorlar ~className();//Dyestruktor //Boshqa myetodlar}; Sinf soni 
chyeklanmagan konstruktorlarga ega bo‘lishi, shu jumladan, konstruktorlarga umuman ega bo‘lmasligi mumkin. 
Konstruktorlar virtual dyeb e’lon qilinishi mumkin emas. Hamma konstruktorlarni himoyalangan syektsiyaga 
joylashtirmang hamda, yashirin argumyentlar qiymatidan foydalanib, ularning sonini kamaytirishga intiling. Ko‘p 
hollarda sinf ob’yektlarini initsializatsiya qilish (nomlash) ning bir nyechta usullariga ega bo‘lish yaxshi natija 
byeradi. Bunga bir nyechta konstruktor vositasida erishish mumkin. Masalan: class date { int vonth, day, year; 
public: // ... date(int, int, int); //yilning oyi, kuni date(char*); //satr ko‘rinishidagi sana date(int); //bugungi kun, 
oy, yil date(); //yashirin sana: bugungisi }; Ortiqcha yuklangan funktsiyalar qanday qoidalarga amal qilsa, 
konstruktorlar ham paramyetrlar turlariga nisbatan xuddi shunday qoidalarga amal qiladilar. Agar konstruktorlar 
o‘z paramtyerlari turlari bo‘yicha ancha-muncha farq qilsa, kompilyator har gal foydalanganda to‘g‘ri 
paramyetrni tanlab olishi mumkin: date today(4); date july4(«1983 yil, 4 iyul»); date guy(«5 Noy») date now; 
//yashirish initsiallashadi (nomlanadi.) Konstruktorlarning uch turi mavjud.  Yashirin konstruktor 
paramyetrlarga ega emas. Agar sinf bitta ham konstruktorga ega bo‘lmasa, kompilyator avtomatik tarzda bitta 
yashirin konstruktor yaratadiki, u o‘z sinfiga mansub ob’yektni yaratishda xotirani shunchaki ajratib byeradi. Date 
holatida har bir paramyetr uchun «yashirin qabul qilish: today» (bugun) sifatida talqin qilinadigan yashiringan 
qiymatni byerish mumkin. class date { int month, day, year; public: // ... date(int d =0, int m =0, int y =0); 
date(char*); // satr vositasida byerilgan sana }; date::date(int d, int m, int y) { day = d ? d : today.day; month = m 
? m : today.month; year = y ? y : today.year; // yo‘l qo‘yiladigan sana ekanini tukshirish // ... }  Dalillarga ega 
konstruktor ob’yektning yaratilish paytida uni initsiallash (nomlash) ga, ya’ni turli funktsiyalarni chaqirib olishga, 
dinamik xotirani ajratish, o‘zgaruvchilarga dastlabki qiymatlarni byerish va h.k. ga imkon byeradi.  Nusha 
ko‘chirish konstruktori byerilgan sinf ob’yektlarini yaratish uchun ma’lumotlarni ushbu sinfning mavjud bo‘lgan 
boshqa ob’yektidan nusha ko‘chirish yo‘lidan borishga mo‘ljallangan. Bunday konstruktorlar ma’lumotlarning 
dinamik tuzilmalarini modyellashtiradigan ob’yektlar nushasini yaratishda ayniqsa maqsadga muvofiqdir. Biroq 
yashirin holda kompilyator yuzaki nushalash konstruktorlari (shallow copy constructors) dyeb ataluvchi faqat 


ma’lumotlar a’zolaridan nusha oladigan konstruktorlarni yaratadi. SHuning uchun, agar biron-bir ma’lumotlar 
a’zolari ko‘rsatkichlarga ega bo‘lsa, ma’lumotlarning o‘zidan nusha ko‘chirilmaydi. «CHuqur» nushalashni 
konstruktor kodiga joriy qilish uchun tyegishli yo‘riqnomalarni kiritish kyerak. Misol: class string { char *Str; int 
size; public: string(string&); // nusxa ko‘chirish konstruktorlari }; string::string(string& right) // dinamik 
o‘zgaruvchilar va rusurslar { // nusxalarini yaratadi s = new char[right->size]; strcpy(Str,right->Str); }
Misol:
#include #include 
using namespace std; 
class Kompyuter{ public: 
string color; string brand; string 
model; 
int yili; 
}; 
int main(){ 
Kompyuter objkompyuter1; 
string kompyutercolor1 = objkompyuter1.color ="Qora"; string kompyuterbrand1 = objkompyuter1.brand 
="SAMSUNG"; string kompyutermodel1 = objkompyuter1.model ="MSI Blui Gaming: 17.3 dyum 1920x1080
Full HD IPS: Intel Core i7 4700HQ 2.4GHz: DDR4 16GB(operativniy pamet): SSD 128GB: HHD 
1TB(1000GB)"; int kompyuteryili1 = objkompyuter1.yili = 2022; 
Kompyuter objkompyuter2; 
string kompyutercolor2 = objkompyuter2.color ="Oq"; string kompyuterbrand2 = objkompyuter2.brand 
="Acer Aspire3"; string kompyutermodel2 = objkompyuter2.model ="Dyum 15.6: Intel(R) Core(TM) i7-10510u
CPU @ 1.80GHz 2.30GHz: 128GB 2666MHz: 1TB Hard SSD 256GB M2 Gigabayt:"; 
cout<cout<return 0;



3-amali mashg`ulot
A) #include  
#include  
#include  
using namespace std; 
int main () 

float x,S,m; 
int n;S=0;n=1; 
cout <<"x ni qiymatini kiriting x="; 
cin>>x; 
cout<<"m ni qiymatini kiriting m="; 
cin>>m; 
S=S+pow(x,2)/pow(n,2)+2*n+1; 
n=n+1; 
cout <<"chekli yigindi qiymati S="<cout<<"\n"; 
getch(); 
return 0; 



B) 
#include 
#include 
#include 
using namespace std; 
int main() 

float x, P, Pn; int m; 
cout<<"x ni qiymatini kiritilgan x="; 
cin>>x; 
cout<<"\n"; 
cout<<"m ni qiymatini kiritilgan m="; 
cin>>m; 
cout<<"\n"; 


P=1; 
for(int n=1;n{Pn=(pow(n,2)+pow(3,n))/(pow(2,n)+pow(x, n)); 
P=P*P*n; 
}cout<<"Chekli kopaytma qiymati P="<
cout<<"\n"; 
cout<<"Davom ettirish uchun klavishni bosing"<getch (); 
return 0; 




Download 0.91 Mb.




Download 0.91 Mb.
Pdf ko'rish