logo

Obyektga yo`naltirilgan dasturlashning kelib chiqish tarixi

Yuklangan vaqt:

12.08.2023

Ko'chirishlar soni:

0

Hajmi:

524.5 KB
Mavzu: Obyektga yo`naltirilgan dasturlashning kelib chiqish
tarixi
Reja:
1. Obyektga yo ’ naltirilgan dasturlash tarixi.
2. Obyektga mo’ljallangan yondashuv.
3. Protseduraviy yondoshuv.
4. Obyektga mo’ljallangan yondashuvning afzalliklari va maqsadlari.
  Obyektga yo’naltirilgan dasturlash tarixi
Rivojlanish tarixi.  Obyektga yo’naltirilgan dasturlash (OYD) 
protsedurali dasturlash g’oyasining rivojlanishi natijasida paydo bo’ldi. 
Obyektga yo’naltirilgan dasturlashni yanada rivojlantirish uchun ko’pincha 
voqea (hodisaga yo’naltirilgan dasturlash, HYD) va komponent 
(komponentga yo’naltirilgan dasturlash, KYD) tushunchalari katta 
ahamiyatga ega. 
Dastlabki tushunchalari taklif qilingan, keyinchalik paradigmaga 
aylangan birinchi OYD tili Simula edi, lekin "obyekt yo’nalishi" atamasi bu 
tilni qo’llanilish kontekstida ishlatilmadi. Bu til 1967-yilda paydo 
bo’lganida, unda inqilobiy g’oyalar taklif qilingan: obyektlar, sinflar, virtual 
metodlar va boshqalar, lekin bularning hammasini o’sha vaqtdagi 
dasturchilar muhim tushunchalar deb bilishmagan. Ayrim fikrlarga ko’ra, bu 
til o’z vaqtidan ancha oldinda edi va 1960- yillarning dasturchilari til 
qadriyatlarini qabul qilishga tayyor emas edilar. Shuning uchun u boshqa 
dasturlash tillari bilan raqobatlasha olmadi. Simuladagi sinf 
tushunchasini Algol konstruksiyalari yordamida to’liq aniqlash mumkin 
bo’lgan(ya'ni Simuladagi sinf - bu primitivlar yordamida tasvirlangan 
murakkab tushuncha). 
Alan Kaye va Den Ingalls Smalltalk orqali dasturlashga yangi nuqtai 
nazarni kiritdilar. Bu yerda sinf konsepsiyasi tilning boshqa barcha 
konstruksiyalari uchun asosiy g’oyaga aylandi (ya'ni Smalltalkdagi sinf - bu 
primitiv, u orqali murakkab tuzilmalar tasvirlangan). Aynan u birinchi bo’lib 
obyektga yo’naltirilgan dasturlash tiliga aylandi. 
Hozirgi vaqtda obyektga yo’naltirilgan paradigmani amalga 
oshiradigan amaliy dasturlash tillari soni (tillar ro’yxati) boshqa 
paradigmalarga nisbatan eng ko’p hisoblanadi. Sanoatdagi eng keng 
tarqalgan tillar (C++, Delphi, C#, Java va boshqalar) Simula obyekt modelini
o’zida mujassam etgan. Smalltalk modeliga asoslangan tillarga misol sifatida
Objective-C, Python, Ruby kabilarni keltirish mumkin. 
Obyektga mo’ljallangan yondashuv.  Obyektga mo’ljallangan 
yondashuv (OMY) dasturiy ta ’ minotning tabiiy rivojidagi navbatdagi 
pog’onadir. Vaqt o’tishi bilan qaysi uslublar ishlash uchun qulay-u, qaysinisi
noqulay ekanini aniqlash oson bo’lib bordi. OMY eng muvaffaqiyatli, vaqt 
sinovidan o’tgan uslublarni o’zida 
samarali mujassam etadi. 
Dastlab dasturlar kommutatsiya bloki orqali kompyuterning asosiy 
xotirasiga to’g’ridan to’g’ri kiritilar edi. Dasturlar mashina tillarida ikkilik 
sanoq sistemasida yozilar edi. Dasturlarni mashina tilida yozishda tez-tez  xatolarga yo’l qo’yilar edi, buning ustiga ularni tizimalashtirishning imkoni 
bo’lmagani tufayli kodni kuzatib 
borish amalda deyarli mumkin bo’lmagan hol edi. Bundan tashqari, mashina 
kodlaridagi dasturni tushunish g’oyat murakkab edi. 
Protseduraviy yondoshuv.  Shu vaqtgacha dasturlar berilgan 
ma'lumotlar ustida biror-bir amal bajaruvchi protseduralar ketma-ketligidan 
iborat edi. Protsedura yoki funksiya ham o’zida aniqlangan ketma-ket 
bajariluvchi buyruqlar to’plamidan iborat. Bunda berilgan ma ’ lumotlarga 
murojaatlar protseduralarga 
ajratilgan holda amalga oshiriladi. 
Protsedura tillari dasturchiga axborotga ishlov berish dasturini pastroq 
darajadagi bir nechta protseduraga bo’lib tashlash imkonini beradi. Pastroq 
darajadagi bunday protseduralar dasturning umumiy tuzilmasini belgilab 
beradi. Ushbu protseduralarga izchil murojaatlar protseduralardan 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 protseduralar qo’shilgan edi. Kichik funksiyalarni nafaqat 
tushunish, balki sozlash 
ham osonroq kechadi. 
Strukturaviy dasturlashning asosiy g’oyasi «bo’lakla va hukmronlik 
qil» prinsipiga butunlay mos keladi. Kompyuter dasturini masalalar 
to’plamidan iborat deb qaraymiz. Oddiy tavsiflash uchun murakkab bo’lgan 
ixtiyoriy masalani bir 
nechta, nisbatan kichikroq bo’lgan, tarkibiy masalalarga ajratamiz va 
bo’linishni 
toki masalalar tushunishi uchun yetarli darajada oddiy bo’lguncha davom 
ettiramiz. 
Misol sifatida kompaniya xizmatchilarining o’rtacha ish haqini 
hisoblashni olamiz. Bu masala sodda emas. Uni qator qism masalalarga 
bo’lishimiz mumkin: 
1. Har bir xizmatchining oylik maoshi qanchaligini aniqlaymiz. 
2. Kompaniya xodimlari sonini aniqlaymiz. 
3. Barcha ish haqlarini yig’amiz. 
4. Hosil bo’lgan yig’indini kompaniya xodimlari soniga bo’lamiz. 
Xodimlarning oylik maoshlari yig’indisini hisoblash jarayonini ham bir
necha bosqichlarga ajratish mumkin. 
1. Har bir xodim haqidagi yozuvni o’qiymiz. 
2. Ish haqi to’g’risidagi ma ’ lumotni olamiz.  3. Ish haqi qiymatini yig’indiga qo’shamiz. 
4. Keyingi xodim haqidagi yozuvni o’qiymiz. 
O’z navbatida, har bir xodim haqidagi yozuvni o’qish jarayonini ham 
nisbatan kichikroq qism operatsiyalarga ajratish mumkin: 
1. Xizmatchi faylini ochamiz. 
2. Kerakli yozuvga o’tamiz. 
3. Ma'lumotlarni diskdan o’qiymiz.
Strukturaviy dasturlash murakkab masalalarni yechishda yetarlicha 
muvafaqqiyatli uslub bo’lib qoldi. Lekin 1980-yillar oxirlarida strukturaviy 
dasturlashning ham ayrim kamchiliklari ko’zga tashlandi. 
Birinchidan, berilgan ma'lumotlar (masalan, xodimlar haqidagi yozuv) 
va ular ustidagi amallar (izlash, tahrirlash) bajarilishining bir butun tarzda 
tashkil etilishidek tabiiy jarayon realizatsiya qilinmagan edi. Aksincha, 
protseduraviy dasturlash 
berilganlar strukturasini bu ma ’ lumotlar ustida amallar bajaradigan 
funksiyalarga ajratgan edi. 
Ikkinchidan, dasturchilar doimiy tarzda eski muammolarning yangi 
yechimlarini ixtiro qilar edilar. Bu vaziyat go’yoki velosipedni qayta ixtiro 
qilishga o’xshab ketar edi. Ko’plab dasturlarda takrorlanuvchi bloklarni ko’p
martalab qo’llash imkoniyatiga bo’lgan xohish tabiiydir. Buni radio ishlab 
chiqaruvchi 
tomonidan priyomnikni yig’ishga o’xshatish mumkin. Konstruktor har safar 
diod va tranzistorni ixtiro qilmaydi. U oddiygina  –  oldin tayyorlangan radio 
detallaridan foydalanadi xolos. Dasturiy ta ’ minotni ishlab chiquvchilar 
uchun esa bunday imkoniyat ko’p yillar mobaynida yo’q edi. 
Boshqa tomondan, protsedurali dasturlash koddan takroran foydalanish 
imkonini cheklab qo’yadi. Shu narsa aniq bo’ldiki, protsedurali dasturlash 
usullari bilan dasturlarni ishlab chiqishda diqqatni ma ’ lumotlarga 
qaratishning o’zi muammolarni keltirib chiqarar ekan. Chunki ma'lumotlar 
va protsedura ajralgan, ma'lumotlar inkapsulyatsiyalanmagan. Bu nimaga 
olib keladi? Shunga olib keladiki, har bir protsedura ma ’ lumotlarni nima 
qilish kerakligini va ular qayerda joylashganini bilmog’i lozim bo’ladi. Agar 
protsedura ma'lumotlar ustidan noto’g’ri amallarni bajarsa u ma'lumotlarni 
buzib qo’yishi mumkin. Har bir protsedura ma ’ lumotlarga kirish usullarini 
dasturlashi lozim bo’lganligi tufayli, ma ’ lumotlar taqdimotning o’zgarishi 
dasturning ushbu kirish amalga oshirilayotgan barcha o’rinlarining 
o’zgarishiga olib kelar edi. Shunday qilib, hatto eng kichik to’g’rilash ham 
butun dasturda qator o’zgarishlarni sodir bo’lishiga olib kelar edi.  Modulli dasturlashda,  masalan,  Modula2  kabi tilda protsedurali 
dasturlashda topilgan ayrim kamchiliklarni bartaraf etishga urinib ko’rildi. 
Modulli dasturlash dasturni bir necha tarkibiy bo’laklarga, yoki, boshqacha 
qilib aytganda, modullarga bo’lib tashlaydi. Agar protsedurali dasturlash 
ma'lumotlar va jarayonlarni bo’lib tashlasa, modulli dasturlash, undan farqli 
o’laroq, ularni birlashtiradi. Modul ma ’ lumotlarning o’zidan hamda 
ma ’ lumotlarga ishlov beradigan protseduralardan iborat. Dasturning boshqa 
qismlariga moduldan foydalanish kerak bo’lib qolsa, ular modul interfeysiga 
murojaat etadi. Modullar barcha ichki axborotni dasturning boshqa 
qismlarida yashiradi. 
Biroq modulli dasturlash ham kamchiliklardan holi emas. Modullar 
kengaymas bo’ladi, bu degani kodga bevosita kirishsiz hamda uni to’g’ridan 
to’g’ri o’zgartirmay turib modulni qadam-baqadam o’zgartirish mumkin 
emas. 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 turni kengaytirish usuli, agar
«agregatlash» deb ataluvchi usul yordamida boshqa turlarni yaratishni 
hisobga olmaganda, mavjud emas edi. Xullas,  modulli dasturlash  –  bu yana
protseduraga mo’ljallangan gibridli sxema bo’lib, unga amal qilishda dastur 
bir necha protseduralarga bo’linadi. Biroq endilikda protseduralar ishlov 
berilmagan 
ma'lumotlar ustida amallarni bajarmaydi, balki modullarni boshqaradi. 
Obyektga yo’naltirilgan dasturlash (OYD) bu talablarga to’la javob 
beradi. Bunda dasturiy komponentlarni ko’p martalab qo’llash va 
berilganlarni manipulatsiya qiluvchi usullar bilan birlashtirish imkoniyati 
mavjud. 
OYDning asosiy maqsadi berilganlar va ular ustida amal bajaruvchi 
protseduralarni yagona obyekt deb qarashdan iboratdir. 
Obyektga mo’ljallangan yondashuvning afzalliklari va maqsadlari.
OMY dasturiy ta ’ minotni ishlab chiqishda oltita asosiy maqsadni ko’zlaydi. 
OMY paradigmasiga muvofiq ishlab chiqilgan dasturiy ta ’ minot quyidagi 
xususiyatlarga ega bo’lmog’i lozim: 
1)tabiiylik; 
2) ishonchlilik; 
3) qayta qo’llanish imkoniyati; 
4) kuzatib borishning qulayligi: 
5) takomillashishga qodirlik;  6) yangi versiyalarni davriy chiqarishning qulayligi. 
Tabiiylik.  OMY yordamida tabiiy dasturiy ta'minot yaratiladi. Tabiiy 
dasturlar tushunarliroq bo’ladi. Dasturlashda «massiv» yoki «xotira sohasi» 
kabi atamalardan foydalanish o’rniga, yechilayotgan masala mansub bo’lgan 
soha atamalaridan foydalanish mumkin. Ishlab chiqilayotgan dasturni 
kompyuler tiliga moslash o’rniga, OMY aniq bir sohaning atamalaridan 
foydalanish imkonini beradi. 
Ishonchlilik. Yaxshi dasturiy ta'minot boshqa har qanday mahsulotlar, 
masalan, muzlatgich yoki televizorlar kabi ishonchli bo’lmog’i lozim. 
Puxta ishlab chiqilgan va tartib bilan yozilgan obyektga mo’ljallangan 
dastur ishonchli bo’ladi. Obyektlarning modulli tabiati dastur qismlaridan 
birida, uning boshqa qismlariga tegmagan holda, o’zgartirishlarni amalga 
oshirish imkonini beradi. Obyekt tushunchasi tufayli, axborotga ushbu 
axborot kerak bo’lgan shaxslar egalik qiladi, ma ’ suliyat esa berilgan 
funksiyalarni bajaruvchilar zimmasiga yuklatiladi. 
Qayta qo’llanish imkoniyati. Quruvchi uy qurishga kirishar ekan, har 
gal g’ishtlarning yangi turini ixtiro qilmaydi. Radiomuhandis yangi sxemani 
yaratishda, har gal rezistorlarning yangi turini o’ylab topmaydi. Unda nima 
uchun dasturchi  “ g’ildirak ixtiro qilaverishi kerak? ”  Masala o’z yechimini 
topgan ekan, bu yechimdan ko’p martalab foydalanish lozim. 
Malakali ishlab chiqilgan obyektga mo’ljallangan sinflarni bemalol 
takroran ishlatish mumkin. Xuddi modullar kabi obyektlarni ham turli 
dasturlarda takroran qo’llash mumkin. Modulli dasturlashdan farqli o’laroq, 
OMY mavjud obyektlarni kengaytirish uchun vorislikdan, sozlanayotgan 
kodni yozish uchun esa polimorfizmdan foydalanish imkonini beradi. 
Kuzatib borishda qulaylik. Dasturiy mahsulotning ish berish davri 
uning ishlab chiqilishi bilan tugamaydi. Dasturni ishlatish jarayonida kuzatib
borish deb nomlanuvchi jarayon muhimdir. Dasturga sarflangan 60 foizdan 
80 foizgacha vaqt kuzatib borishga ketadi. Ishlab chiqish esa ish berish 
siklining 20 foizinigina tashkil etadi. 
Puxta ishlangan obyektga mo’ljallangan dastur ishlatishda qulay 
bo’ladi. Xatoni bartaraf etish uchun faqat bitta o’ringa to’g’rilash kiritish 
kifoya qiladi. Chunki ishlatishdagi o’zgarishlar, boshqa barcha obyektlar 
takomillashtirish afzalliklaridan avtomatik ravishda foydalana boshlaydi. 
O’zining tabliyligi tufayli dastur matni boshqa ishlab chiquvchilar uchun 
tushunarli bo’lmog’i lozim. 
Kengayishga qodirlik.  Foydalanuvchilar dasturni kuzatib borish 
paytida teztez tizimga yangi funksiyalarni qo’shishni iltimos qiladilar.  Obyektlar kutubxonasini tuzishning o’zida ham ushbu obyektlarning 
funksiyalarini kengaytirishga to’g’ri keladi. 
Dasturiy ta'minot statik (qotib qolgan) emas. Dasturiy ta ’ minot foydali 
bo’lib qolishi uchun, uning imkoniyatlarini muttasil kengaytirib borish 
lozim. OMY da dasturni kengaytirish usullari ko’p. Vorislik, polimorfizm, 
qayta aniqlash, vakillik hamda ishlab chiqish jarayonida foydalanish mumkin
bo’lgan ko’plab boshqa 
shablonlar shular jumlasidandir. 
Yangi versiyalarning davriy chiqarilishi.  Zamonaviy dasturiy 
mahsulotning ish berish davri ko’p hollarda haftalar bilan o’lchanadi. OMY 
tufayli dasturlarni ishlab chiqish davrini qisqartirishga erishildi, chunki 
dasturlar ancha ishonchli bo’lib bormoqda, kengayishi osonroq hamda 
takroran qo’llanishi mumkin. 
Dasturiy ta ’ minotning tabiiyligi murakkab tizimlarning ishlab 
chiqilishini osonlashtiradi. Har qanday ishlanma hafsala bilan yondashuvni 
talab qiladi, shuning uchun tabiiylik dasturiy ta ’ minotning ishlab chiqish 
davrlarini qisqartirish imkonini 
beradi, chunki butun diqqat-e ’ tiborni yechilayotgan masalaga jalb qildiradi. 
Dastur qator obyektlarga bo’lingach, har bir alohida dastur qismini 
boshqalari bilan parallel ravishda ishlab chiqish mumkin bo’ladi. Bir nechta 
ishlab chiquvchi sinflarni bir-birlaridan mustaqil ravishda ishlab chiqishi 
mumkin bo’ladi. Ishlab chiqishdagi bunday parallellik ishlab chiqish vaqtini 
qisqartiradi.
MAVZU: Modulli dasturlashning kelib chiqish tarixi  
Reja:
1.  Obyekt modeli va uning afzaliklari
2. Modulli dasturlashning kelib chiqish tgarixi.
3.Modullik.
Obyekt modeli va uning afzaliklari
Obyektga yo’naltirilgan dasturlashning asosiy afzalligi shundaki, 
ularni boshqarish uchun ishlatiladigan ma'lumotlar ham, amallar  (kod) ham bitta obyektga joylashtirilgan. Masalan, obyekt tarmoq 
bo’ylab harakatlansa, u ma'lumotlar va xatti -harakatlarni o’z ichiga 
olgan holda, to’liq uzatiladi. 
Obyekt.  Obyektlar  –  obyektga yo’naltirilgan dasturlarning 
qurilish bloklari hisoblanadi. Obyektga yo’naltirilgan texnologiyadan 
foydalanadigan dastur asosan obyektlar to’plamidir. 
Obyekt ma'lumotlari.  Obyektdagi ma'lumotlar uning holatini 
ko’rsatadi. Obyektga yo’naltirilgan dasturlash terminologiyasida bu 
ma'lumotlar  atributlar  deb ataladi. 
Obyektlarning xatti-harakatlari.  Obyektning xatti-harakati 
u bajara oladigan narsani ifodalaydi. Protsedurali tillarda xatti-
harakatlar protseduralar, funksiyalar va qismiy dasturlar bilan 
belgilanadi. Obyektga yo’naltirilgan dasturlash terminologiyasida 
obyektlarning xatti-harakatlari metodlarda mavjud bo’lib, unga xabar 
yuborish orqali metod chaqiriladi. 
Obyektga yo’naltirilgan texnologiya  obyektlar modeli  deb 
ataladi. 
Uning asosiy tamoyillari: abstraksiya, inkapsulyatsiya, modullik, 
iyerarxiya, tiplashtirish, parallellik va butunlilik. Bu tamoyillarning 
har biri haqiqatan ham yangi emas, lekin obyekt modelida ular 
birinchi marta birgalikda qo’llaniladi. Birinchi to’rtta tushuncha 
majburiydir, chunki ularning har birisiz model obyektga yo’naltirilgan
bo’lmaydi. Boshqalar ixtiyoriy, ya'ni ular obyekt modelida foydali, 
lekin majburiy emas. 
Obyekt modelining afzalliklari.  Obyekt modeli strukturaviy 
tahlil, dizayn va dasturlashning an'anaviy usullari bilan bog’liq bo’lgan
modellardan tubdan farq qiladi. Bu obyekt modeli ilgari topilgan va 
vaqt sinovidan o’tgan barcha metodlardan voz kechishni talab qiladi 
degani emas. Aksincha, u oldingi tajribaga qo’shadigan ba'zi yangi 
elementlarni taqdim etadi. Obyekt yondashuvi boshqa modellar 
bermagan bir qator muhim qulayliklarni ta'minlaydi. Eng muhimi, 
obyektga asoslangan yondashuv yaxshi tuzilgan murakkab 
tizimlarning xususiyatlarini rivojlantiradigan tizimlarni yaratishga 
imkon beradi. Obyekt modelining yana beshta afzalligi bor.  1)  Obyekt modeli sizga obyektning imkoniyatlaridan to’liq 
foydalanish imkonini beradi va dasturlash kabi obyektga 
yo’naltirilgan. 
2)  Obyekt yondashuvidan foydalanish rivojlanishning birlashish 
darajasini va nafaqat dasturlarni, balki loyihalarni qayta ishlatish 
darajasini sezilarli darajada oshiradi, bu esa oxir-oqibat rivojlanish 
muhitini yaratishga olib keladi. Obyektga yo’naltirilgan tizimlar, 
odatda, obyektga yo’naltirilgan bo’lmaganlarga qaraganda ancha 
ixchamdir. Va bu nafaqat dastur kodi miqdorini, balki avvalgi 
ishlanmalardan foydalangan holda, loyiha narxining pasayishini ham 
anglatadi, bu esa vaqt va xarajatdan foyda keltiradi. 
3)  Obyekt modelidan foydalanish barqaror oraliq tavsiflarga 
asoslangan tizimlar qurilishiga olib keladi, bu esa o’zgarishlarni 
kiritish jarayonini osonlashtiradi. 
4)  Obyekt modeli murakkab tizimlarni ishlab chiqish xavfini 
kamaytiradi, chunki, birinchi navbatda, integratsiya jarayoni butun 
rivojlanish vaqtiga cho’ziladi va bir martalik hodisaga aylanmaydi. 
5)  Obyekt modeli insonning dunyoni idrok etishiga qaratilgan 
yoki Robsonning so’zlari bilan aytganda, "kompyuter qanday 
ishlashini bilmaydigan ko’p odamlar tizimlarga obyektga 
yo’naltirilgan yondashuvni mutlaqo tabiiy"1 topadi. 
Sinflar va obyektlarning aloqasi va o’zaro ta'siri. Obyekt
–  bu xususiyatlarga ega bo’lgan va uning xatti-harakatlarini 
ko’rsatadigan haqiqiy nomli mohiyat. 
Obyektga yo’naltirilgan dasturlash tillariga qo’llanilganda, 
obyekt va sinf tushunchasi aniqlanadi: 
Obyekt  –  bu kompyuter xotirasida fizik jihatdan joylashtirilgan 
va ularga kirish imkoniyatiga ega bo’lgan ma'lumotlar to’plami 
(obyektlar maydonlari). Ism obyektni tashkil etuvchi maydon va 
metodlarga kirish uchun ishlatiladi. Ba ’ zi holatlarda, obyekt xossalar 
yoki metodlarni o’z ichiga olmaydi va nomga ega bo’lmasligi mumkin. 
Har qanday obyekt ma'lum bir sinfga tegishli. Sinf ma'lumotlarning 
tavsifi va ulardagi amallarni o’z ichiga oladi. Sinf ma'lum bir -biriga  bog’liq, aslida mavjud obyektlarning umumiy tavsifini beradi. Obyekt 
- bu sinfning aniq nusxasi. 
Misol . Ikki o’lchovli fazoda geometrik shakl doirasini 
ifodalovchi oddiy  Circle  sinfini ko’rib chiqaylik. Bu sinfning 
atributlarini quyidagicha ta'riflash mumkin: 
x - koordinata, doira markazini belgilash uchun OX o’qi bo’yicha 
y - koordinata, doira markazini belgilash uchun OY o’qi bo’yicha 
R - aylananing radiusini ko’rsatish uchun 
Uning ba'zi amallarini quyidagicha ta'riflash mumkin: 
findArea()  –  yuzani hisoblash metodi 
findCircumference()  –  aylanani uzunligini hisoblash metodi 
RadiusInc()  –  radiusni oshirish yoki kamaytirish metodi
O’zlashtirish (ta ’ minlash) paytida qiymatlar atributlarning 
kamida bir qismiga beriladi. 
Agar biz my_circle obyektini yaratadigan bo’lsak, uning 
holatini ko’rsatish uchun x-koordinatalar: 2, y koordinatalari: 3 va R: 
4 kabi qiymatlarni belgilashimiz mumkin. Endi, agar RadiusInc() 
metodiga ikki qiymati bilan murojaat qilsak, R o’zgaruvchining 
qiymati 8 ga aylanadi. Bu operatsiya my_circle holatini o’zgartiradi, 
ya'ni obyekt ma'lum xattiharakatlarni bajaradi. 
  Obyektga yo’naltirilgan dasturlash prinsiplari 
Obyektga yo’natirilgan dasturlash quyidagi prinsiplarga asoslanadi: 
- Abstraksiya; 
- Inkapsulyatsiya; 
- Merosxo’rlik; 
- Polimorfizm; 
Inkapsulyatsiya.  Har bir obyekt shunday tuzilganki, unga 
kerakli ma'lumotlar dasturning tashqarisida emas, balki shu obyekt 
ichida yashaydi. Masalan, agar bizda "Foydalanuvchi" obyekti bo’lsa, 
unda foydalanuvchi haqidagi barcha ma'lumotlar bo’ladi: ism, manzil 
va boshqalar. Shuningdek, u "manzilni tekshirish" yoki "Pochta 
ro’yxatiga obuna bo’lish" metodlariga ega bo’ladi.  Inkapsulyatsiya  - bu tizimda ishlaydigan ma'lumotlar va 
metodlarni sinfda birlashtirishga va foydalanuvchidan amalga 
oshirish tafsilotlarini yashirishga imkon beruvchi tizimningxususiyati.
Inkapsulyatsiya  - bu ma'lumotlarni manipulyatsiya qiladigan va 
kodni birlashtirgan, shuningdek, birinchi navbatda ma'lumotlarga 
to’g’ridan - to’g’ri tashqi kirishdan va noto’g’ri ishlatishdan himoya 
qiluvchi tamoyil. Boshqacha qilib aytganda, sinf ma'lumotlariga kirish
faqat bir xil sinf metodlari yordamida amalga oshirilishi mumkin. 
Inkapsulyatsiya sinf interfeysi tushunchasi bilan uzviy bog’liq. 
Aslida, interfeysga kirmagan hamma narsa sinfga kiritilgan. 
Inkapsulyatsiya va ma'lumotlarni yashirish. 
Inkapsulyatsiya  - bu sinfda atributlar va metodlarni bir -biriga 
bog’lash jarayoni. Inkapsulyatsiya orqali, sinfning ichki tafsilotlarini 
tashqaridan yashirish mumkin. Bu sinf a'zolariga tashqi tomondan 
faqat sinf tomonidan taqdim etilgan interfeys orqali kirishga imkon 
beradi. 
Ma'lumotlarni yashirish.  Qoida tariqasida, sinf shunday 
tuzilganki, uning ma'lumotlariga (atributlariga) faqat uning sinf 
metodlari yordamida kirsa bo’ladi va tashqi tomondan to’g’ridan-
to’g’ri kirishdan ajratiladi. Obyekt ma'lumotlarini ajratish jarayoni 
ma'lumotni yashirish  deb ataladi.
Misol.  Yuqoridagi Circle sinfida siz atributlarni sinfdan 
tashqarida ko’rinmas holga keltirish va sinf ma'lumotlariga kirish 
uchun sinfga yana ikkita metod qo’shish orqali ma'lumotlarni 
yashirishingiz mumkin: 
setValues(), x va y-koordinatalarga qiymat tayinlash 
getValues (), x va y koordinatasini olish qiymatlarni olish metodi.
Bu yerda  my_circle  obyektining shaxsiy ma'lumotlariga to’g’ridan - 
to’g’ri Circle sinfiga kiritilmagan har qanday metod bilan kirish 
mumkin emas. Buning o’rniga,  setValues()  va  getValues() 
metodlari orqali kirish kerak. 
Abstraksiya.  Obyekt biz obyektga tashqaridan kira oladigan 
metod va xususiyatlarga ega. Xuddi qurilmadagi biror tugmani 
bosishimiz mumkin bo’lganidek. Qurilmada juda ko’p narsalar bor, bu uning ishlashini ta'minlaydi, lekin asosiy panelda faqat tugma bor.  Bu 
tugma mavhum interfeysdir. 
1- rasm . 
Merosxo ’ rlik .  Merosxo ’ rlik  –  nusxa   ko ’ chirish   qobiliyati .  OYD  
boshqa   obyektning   tasviri   va   o ’ xshashligida   ko ’ plab   obyektlarni  
yaratishga   imkon   beradi .  Bu   sizga   kodni   ikki   yuz   marta   nusxalash   va  
joylashtirishga   emas ,  balki   odatdagidek   bir   marta   yozib ,  keyin   ko ’ p  
marta   ishlatishga   imkon   beradi . 
Meros  - bu bitta obyekt boshqasining xususiyatlarini olish 
jarayonidir. Aniqroq aytganda, obyekt boshqa obyektning asosiy 
xususiyatlarini meros qilib olishi va unga o’ziga xos xususiyat va 
metodlarni qo’shishi mumkin. 
Meros  - bu mavjud sinflardan yangi sinflar yaratish, uning 
imkoniyatlarini kengaytirish va takomillashtirish imkonini beradigan 
mexanizm. Mavjud sinflar asosiy sinflar (ajdod, supersinflar), yangi 
sinflar esa bola (avlod) sinflari deb nomlanadi. 
Masalan, sizda "Foydalanuvchi" ideal obyekt bo’lishi mumkin: 
unda siz foydalanuvchi bilan sodir bo’lishi mumkin bo’lgan hamma  narsani yozasiz. Sizda xossa bo’lishi mumkin: ism, yosh, manzil, karta 
raqami. Va "chegirma berish", "buyurtmani tekshirish", 
"buyurtmalarni topish", "qo’ng’iroq qilish" usullari bo’lishi mumkin. 
Meros  –  bu tizimning xususiyatidir, bu sizga mavjud sinfga 
asoslangan yoki qisman yoki to’liq olingan funksiyalarni tavsiflashga 
imkon beradi. Meros qoldiriladigan sinfga asosiy yoki ajdod deyiladi. 
Yangi sinf - avlod, merosxo’r yoki hosil qilingan sinf deb ataladi. 
Polimorfizm.  Polimorfizm  –  yunoncha so’z bo’lib, u turli 
shakllarga ega bo’lish qobiliyatini bildiradi. Obyektga yo’naltirilgan 
paradigmada polimorfizm amallarni ular bajaradigan holatiga qarab 
har xil usulda qo’llashni nazarda tutadi. Polimorfizm har xil ichki 
tuzilishga ega bo’lgan obyektlarga umumiy tashqi interfeysga ega 
bo’lishga imkon beradi. Polimorfizm, ayniqsa, merosni amalga 
oshirishda samaralidir. 
Polimorfizm  - umumiy muloqot tili. OYDda barcha obyektlar 
bir-biri bilan ular tushunadigan tilda muloqot qilishi muhim. Agar har
xil obyektlarda "delete" metodi bo’lsa, u aynan shunday ishni bajarishi
va hamma joyda xuddi shunday yozilishi kerak. Bir obyektda "delete", 
ikkinchisida "clear" bo’lishi mumkin emas. 
Shu bilan birga, obyekt ichida metodlar turli yo’llar bilan amalga 
oshirilishi mumkin. Masalan, biror narsani o’chirish - bu 
ogohlantirish, keyin ma'lumotlar bazasidagi elementni o’chirilgan deb
belgilash va foydalanuvchini o’chirish uning xaridlarini bekor qilishni,
pochta ro’yxatidan obunani bekor qilishni va sotib olish tarixini 
arxivlashni bildiradi. Voqealar boshqacha, lekin dasturchi uchun bu 
muhim emas. U faqat delete() metodiga ega va unga ishonadi. -rasm
Polimorfizm  –  bu ikki yoki undan ortiq o’xshash, lekin biroz 
boshqacha muammolarni yechishda bir xil metod nomidan 
foydalanadigan mexanizm. Polimorfizmning maqsadi sinf uchun 
umumiy harakatlarni aniqlash maqsadida bitta nomdan foydalanish. 
Umuman olganda, polimorfizm tushunchasi "bitta interfeys, ko’p 
usullar" g’oyasidir. 
Misol. Keling, har biri  findArea()  metodi bilan ikkita sinfni - 
"Circle" va "Square" sinflarini ko’rib chiqaylik. Sinflardagi 
metodlarning nomi va maqsadi bir xil bo’lsa-da, ichki amalga 
oshirish, ya'ni maydonni hisoblash tartibi har bir sinf uchun 
turlichadir. Circle sinfining obyekti  findArea()  metodini 
chaqirganda, amal Square sinfining  findArea()  metodi bilan 
ziddiyatsiz doira yuzasini topadi. 
Modullik.  Modullik - bu tizimning ichki ulangan, lekin erkin 
bog’langan modullarga bo’linadigan xususiyati. 
Modullik - bu tizimning bir-biri bilan chambarchas bog’liq 
bo’lgan qismlarga (modullarga) bo’linish qobiliyati bilan bog’liq 
xususiyati. Modullik boshqa obyektlarga va umuman tizimga ta'sir  qilmasdan yangilanishi yoki almashtirilishi mumkin bo’lgan 
obyektlarni diskret dasturlashga asoslangan. 
Smalltalk kabi ba'zi dasturlash tillarida modul yo’q va sinflar 
bo ’ linishning yagona fizik asosidir. Boshqa tillarda, shu jumladan 
Object Pascal, C++, Javada modul mustaqil til tuzilishi hisoblanadi. 
Bu tillarda sinflar va obyektlar tizimning mantiqiy tuzilishini tashkil 
qiladi; ular tizimning fizik tuzilishini tashkil etuvchi modullarga 
joylashtirilgan. Bu xususiyat, agar tizim yuzlab sinflardan iborat 
bo’lsa, ayniqsa foydali bo’ladi. 
Shunday qilib, modullik va inkapsulyatsiya bir-biri bilan 
chambarchas bog’liq. Modullik turli dasturlash tillarida har xil yo’llar 
bilan qo’llabquvvatlanadi. Masalan, C++ da modullar alohida 
kompilyatsiya qilingan fayllardir. C/C++ uchun modullarning oldingi 
qismini .h kengaytmasi bo’lgan alohida fayllarga joylashtirish odatiy 
holdir (sarlavha fayllari deb ataladi). Amalga oshirish, ya'ni modul 
matni .c kengaytmasi bo’lgan fayllarda saqlanadi (C++ dasturlarida 
ko’pincha cp va .cpp kengaytmalari ishlatiladi). Fayllar orasidagi 
bog’lanish #include makroprotsessor ko’rsatmasi bilan e'lon qilinadi. 
Bu yondashuv faqat konvensiyaga asoslangan va tilning o’ziga xos 
qat'iy talabi emas. Object Pascal tilida modullik prinsipi biroz 
qat'iyroq rasmiylashtirilgan. Bu til birlikning interfeysi va 
bajarilishining o’ziga xos sintaksisini belgilaydi. Javada paket deb 
ataladigan tushuncha mavjud. Har bir to’plamda ba'zi mantiqiy 
atributlar bo’yicha guruhlangan bir nechta sinflar mavjud. 
Modullik, kerakli tavsifni topishni osonlashtirishdan tashqari, 
loyihani qurish jarayonini sezilarli darajada tezlashtirishga imkon 
beradi (albatta, alohida kompilyatsiyani qo’llab-quvvatlaydigan 
kompilyatorlar uchun). 
Tabiiyki, bularning barchasi interfeyslarning barqarorligiga juda 
qattiq cheklovlar qo’yadi, lekin barqaror interfeyslarni shakllantirish 
vazifasi umuman dizayn vazifasidir. 
Iyerarxiya.  Abstraksiya - foydali narsa, lekin har doim, eng 
oddiy vaziyatlardan tashqari, tizimdagi mavhumliklar soni bizning 
aqliy imkoniyatlarimizdan ancha oshib ketadi. Inkapsulyatsiya  abstraksiyalarning ichki mazmunini ko’rish maydonidan olib tashlash
orqali ma'lum darajada bu to’siqni olib tashlashga imkon beradi. 
Modullik, shuningdek, mantiqiy bog’liq abstraksiyalarni guruhlarga 
ajratish orqali vazifani soddalashtiradi. Lekin bu yetarli emas. 
Iyerarxiyalarning mavjudligi - bu tizim obyektlarining ba'zi 
qoidalariga muvofiq tartiblash. 
Abstraksiyalardan iyerarxik tuzilmaning shakllanishi tufayli 
murakkab muammolarni tushunishda sezilarli soddalashtirishga 
erishiladi. Iyerarxiyani quyidagicha ta'riflaylik: 
Iyerarxiya - bu mavhumliklarning tartiblanishi, ularning 
darajadagi joylashuvi. 
Murakkab tizimlarga nisbatan iyerarxik tuzilmalarning asosiy 
turlari sinf tuzilishi  ("is-a" ierarxiyasi ) va obyekt strukturasi ( “ part-
of ”  iyerarxiyasi ) hisoblanadi.
1)"is-a" ierarxiyasi. Obyektga yo’naltirilgan tizimlarning muhim 
elementi va "is-a" ierarxiyasining asosiy turi-yuqorida aytib o’tilgan 
meros tushunchasi. Meros - bu sinflar o’rtasidagi munosabatni 
(ajdod / avlod munosabatlari), bir sinf bir yoki bir nechta boshqa 
sinflarning strukturaviy yoki funksional qismini oladi (mos ravishda 
bitta va ko’p meros). Boshqacha qilib aytganda, meros mavhumliklar 
iyerarxiyasini yaratadi, bunda kichik sinflar bir yoki bir nechta yuqori 
sinflardan tuzilmani meros qilib oladi. Ko’pincha kichik sinf ajdod 
komponentlarini yaratadi yoki qayta yozadi. 
Semantik jihatdan, meros "is-a" munosabatini tavsiflaydi. 
Masalan, ayiq - sutemizuvchi, uy-ko’chmas mulk, "Quick sort " - 
saralash algoritmi. Shunday qilib, meros umumlashtirish-
ixtisoslashuv iyerarxiyasini vujudga keltiradi. 
2)  “ part of ”  iyerarxiyasi. Agar "is a" iyerarxiyasi umumlashtirish/
ixtisoslashuv munosabatlarini aniqlasa, u holda "part of" 
munosabatlar yig’indisi iyerarxiyasini kiritadi. 
Tiplashtirish . Tiplashtirish  –  bu barcha obyektlar turlarining 
tavsifi; Tur tushunchasi mavhum ma'lumotlar turlari nazariyasidan 
olingan. Bizning maqsadlarimiz uchun atamalar turi va sinfi bir-
birining o’rnini bosadi deb taxmin qilish kifoya. (Aslida, tur va sinf bir xil emas; ba'zi tillarda ular farqlanadi. Masalan, Trellis / Owl tilining 
dastlabki versiyalari obyektga ham sinf, ham turga ega bo’lishga 
ruxsat bergan. Hatto Smalltalkda ham SmallInteger, 
LargeNegativeInteger, LargePositiveInteger sinflari bir xil turdagi 
Integerga tegishli bo’lsa-da, har xil sinflarga tegishli). 
Tiplashtirish  –  bu boshqa sinf o’rniga bir sinf obyektlarini 
ishlatishdan himoya qilish usuli (kuchli tiplashtirish) yoki hech 
bo’lmaganda bunday foydalanishni nazorat qilishdir (zaif 
tiplashtirish). 
Tiplashtirish bizni mavhumliklarimizni shunday ifoda etishga 
majbur qiladi, uni amalga oshirishda ishlatiladigan dasturlash tili 
dizayn qarorlariga sodiq qoladi. Yozish konsepsiyasida turni 
moslashtirish g’oyasi markaziy o’rinni egallaydi. Masalan, fizik 
birliklarni olaylik. Vaqtni masofaga bo’lish orqali biz og’irlikni emas, 
tezlikni olamiz. Haroratni kuchga ko’paytirishning ma'nosi yo’q, lekin 
masofani kuchga ko’paytirishda  –  ma ’ no mavjud. Bularning barchasi 
kuchli tiplashtirish misollaridir, bu yerda dastur sohasi 
abstraksiyalarni ishlatish va kombinatsiyasiga qoidalar va cheklovlar 
qo’yadi. Zaif tiplashtirish bilan ishlar biroz murakkablashadi. Zaif 
tiplashtirish polimorfizm tushunchasi bilan chambarchas bog’liq. 
Parallelizm . Parallelizm - bu obyektlarning faol yoki passiv 
holatda bo’lish xususiyati. Ko’p protsessorli arxitektura uchun obyekt 
alohida boshqaruv kanali bo’lishi mumkin (jarayon abstraksiyasi), bu 
parallellik masalalarini hal qilishni soddalashtiradi (tupik, blokirovka 
va boshqalar). Bir protsessorsiz arxitektura uchun u minimal shaklda 
amalga oshiriladi. Misol sifatida Windows ko’p oynali interfeysi. 
Avtomatik tizimlar bir vaqtning o’zida ko’plab hodisalarni qayta 
ishlashi kerak bo’lgan vazifalar mavjud. Boshqa hollarda, qayta 
ishlash quvvatiga bo’lgan ehtiyoj bitta protsessor resurslaridan 
oshadi. Bu holatlarning har birida muammoni hal qilish uchun bir 
nechta kompyuterlardan foydalanish yoki ko’p protsessorli 
kompyuterda ko’p vazifalarni bajarish tabiiy jarayondir. Jarayon 
(boshqaruv oqimi) - bu tizimdagi asosiy harakat birligi. Har bir 
dasturda kamida bitta nazorat oqimi bor, parallel tizimda bunday  oqimlar ko’p: ba'zilari qisqa muddatli, boshqalari esa butun tizim 
davomida yashaydi. Haqiqiy parallelizmga faqat ko’p protsessorli 
tizimlarda erishiladi va bitta protsessorli tizimlar vaqtni taqsimlash 
algoritmlari orqali parallellikni simulyatsiya qiladi. 
Bu "apparat" farqidan tashqari, biz resurs talablari nuqtai 
nazaridan "og’ir" va "yengil" parallellikni ajratamiz. "Og’ir" jarayonlar 
boshqalardan mustaqil ravishda operatsion tizim tomonidan 
boshqariladi va ular uchun alohida himoyalangan manzillar maydoni 
ajratiladi. 
Ko’pgina zamonaviy operatsion tizimlar parallellikni to’g’ridan-
to’g’ri qo’llab-quvvatlaydi va bu holat obyektga yo’naltirilgan 
tizimlarda parallellikni ta'minlash qobiliyati uchun juda foydali. 
Masalan, Zamonaviy Windows tizimlari ko’p funksiyali; ular 
shuningdek jarayonlarni yaratish va boshqarish uchun dasturiy 
interfeyslarni ham ta'minlaydilar. 
Butunlilik  –  obyektlarning o’z holatini saqlab qolish va ma'lum 
sinfga mansubligi. MAVZU: Strukturali dasturlash prinsiblari
Reja:
1.Struktura va class farqi.
2.Strukturaga oid misollar.
3.  Sinf metodlari va xossalari .
Masalan, sanani saqlash uchun struktura quyidagicha e ’ lon 
qilinadi. 
1-listing. 
struct DateStruct 
{ 
int day; 
int month; 
int year; 
}; 
Ro’yxatlar va strukturalar  –  bu an'anaviy (strukturali) 
dasturlashda 
qo ’ llaniladi. C++11 da biz yuqoridagi strukturani yaratishimiz va 
initsializatsiyalashimiz mumkin: 
DateStruct today { 12, 11, 2018}; 
Sanani ekranda ko’rsatish uchun (buni bir yoki ikki marta 
bajarish kerak 
bo’lishi mumkin), alohida funksiyani yozish samaralidir, masalan: 
#include <iostream>  using namespace std; 
struct DateStruct 
{ 
int m_day; 
int m_month; 
int m_year; 
}; 
void print(DateStruct &date) 
{ 
cout << date.m_day<< "/" << date.m_month << "/" << 
date.m_year;} 
int main() 
{ 
DateStruct today { 3, 8, 2022}; // uniform-initsializatsiyasidan 
foydalanish1 
today.m_day = 18; // a ’ zo tanlash operatoridan foydalanib, 
strukturaning a ’ zosiga murojaat qilish 
print(today); 
return 0; 
} 
Dasturni bajarish natijasi: 
3/8/2022 
Obyektga yo’naltirilgan dasturlashda ma'lumotlar turlari nafaqat ma'lumotlarni, balki shu ma'lumotlar bilan ishlaydigan funksiyalarni 
ham o’z ichiga olishi mumkin. C++ bu ma'lumot turini aniqlash uchun
class  kalit so’zidan foydalanadi.  class  kalit so’zidan foydalanish 
foydalanuvchi tomonidan belgilanadigan yangi ma'lumotlar turini  –  
sinfni aniqlaydi. C++ da sinflar strukturalarga juda o’xshash, faqat 
ular ko’proq kuch va moslashuvchanlikni ta'minlaydi. Aslida, quyidagi
struktura va sinf funksional jihatdan bir xil: 
struct DateStruct 
{ 
int m_day; 
int m_month; 
int m_year; 
}; 
class DateClass 
{ 
public: 
int m_day; 
int m_month; 
int m_year; 
}; 
Bu yerda faqat muhim farq - bu  public  kalit so’zidir. 
Strukturani e'lon qilish singari, sinfni e'lon qilish ham hech 
qanday xotira ajratmaydi. Sinfdan foydalanish uchun siz ushbu 
turdagi o’zgaruvchini e'lon qilishingiz kerak: 
DateClass today { 3, 8, 2022 };  C++ da sinf o’zgaruvchisi sinfning nusxasi (yoki "obyekt") deb 
ataladi. Ma'lumotlar turidagi (masalan,  int x ) o’zgaruvchini aniqlash, 
shu o’zgaruvchiga xotira ajratilishiga olib keladi, shuning uchun sinf 
obyektini yaratish (masalan,  today DateClass ) bu obyekt uchun 
xotira ajratilishiga olib keladi. 
Sinf metodlari va xossalari
Ma'lumotlarni saqlashdan tashqari, sinflar funksiyalarni ham o’z 
ichiga olishi mumkin. Sinf ichida aniqlangan funksiyalar  metodlar 
deb ataladi. 
Metodlarni sinf ichida ham, tashqarisida ham aniqlash mumkin. 
Hozircha biz ularni sinf ichida belgilaymiz (tushunarli bo ’ lishi uchun),
ularni sinfdan tashqarida qanday aniqlash mumkin haqida keyingi 
boblarda ko’rib chiqamiz. 
DateClass  sinfi tarkibida  print()  metodini e ’ lon qilish: 
1 class DateClass { 
2 public: 
3 int m_day; 
4 int m_month; 
5 int m_year; 
6 void print() // funksiya-a ’ zoni aniqlash { 
7 cout << m_day << "/" << m_month << "/" << m_year; } 
8 }; 
Xuddi shu tarzda, struktura a'zolariga ham, sinf a'zolariga ham 
(o’zgaruvchilar va funksiyalarga) a'zo tanlash operatori  (.)  orqali 
kirish 
mumkin: 
#include <iostream>  class DateClass 
{public: 
int m_day; 
int m_month; 
int m_year; 
void print() 
{ 
cout << m_day << "/" << m_month << "/" << m_year; 
} 
}; 
int main() 
{ 
DateClass today { 3, 8, 2022 }; 
today.m_day = 18; // DateClass today obyektining m_day a'zo 
o’zgaruvchisini tanlash uchun a'zo tanlash operatoridan 
foydalanish today.print(); // DateClass today obyektining print() 
metodini 
chaqirish uchun a'zo tanlash operatoridan foydalanish 
return 0; 
} 
Dasturni bajarish natijasi: 
3/8/2022 
E'tibor bering, bu dastur yuqoridagi dasturga o’xshaydi, bu yerda struktura ishlatiladi. Biroq, bir nechta farqlar mavjud.  DateStruct 
strukturasida uning o’zgaruvchisini parametr sifatida to’g’ridan-to’g’ri
print () funksiyasiga o’tkazishimiz kerak edi. Agar bu bajarilmaganda,
print () funksiyasi  DateStruct  strukturasining qaysi o’zgaruvchisini 
chop etishini bilmas edik. So ’ ngra aniq funksiya tarkibidagi a'zolarga 
murojaat qilishimiz kerak edi. 
Sinf metodlari biroz boshqacha ishlaydi: barcha metod 
chaqiruvlari sinf obyekti bilan bog’lanishi kerak.  today.print()  ga 
murojaat qilganimizda, kompilyator  today  obyektining  print () 
metodini chaqiradi. 
print () metodining ta'rifini yana ko’rib chiqamiz: m_day, 
m_month va m_year aslida nimani nazarda tutadi? Ular tegishli 
today  obyektiga murojaat qiladi (bu murojaat qiluvchining o’zi 
tomonidan belgilanadi). 
Shuning uchun, today.print() ni chaqirganda, kompilyator 
quyidagicha izohlaydi:
m_day  –  today.m_day kabi; 
m_month  –  today.m_month kabi; 
m_year  –  today.m_year kabi. 
Agar yangi obyekt yaratib, uning nomini tomorrow deb 
nomlasak, tomorrow obyekti orqali tomorrow.print() ga murojaat 
qiladigan bo’lsak, m_day tomorrow.m_dayga ishora qiladi. 
Asosan, bog’langan obyekt bilvosita metodga o’tkaziladi. Shu 
sababli, u ko’pincha yopiq obyekt deb ataladi. 
  Bu yerda asosiy nuqta shundaki, sinf a'zolari bo’lmagan 
funksiyalar bilan ishlash uchun biz bu funksiyaga ma'lumotlarni aniq 
(parametr sifatida) berishimiz kerak va metodlar bilan ishlash uchun 
bizda har doim yopiq sinf obyekti bo’ladi!  A'zo o’zgaruvchilar uchun m_ (inglizcha "m" = "members"  –  
a ’ zolar) prefiksidan foydalanish a'zo o’zgaruvchilarini funksiya 
parametrlari yoki sinf metodlari ichidagi lokal o’zgaruvchilardan 
ajratishga yordam beradi. Bu bir necha sabablarga ko’ra foydalidir: 
Birinchidan, m_ prefiksli o’zgaruvchini ko’rganimizda, biz sinf 
a'zolari o’zgaruvchisi bilan ishlayotganimizni tushunamiz; 
Ikkinchidan, funksiya parametrlari yoki funksiya ichida e'lon 
qilingan lokal o’zgaruvchilardan farqli o’laroq, a'zo o’zgaruvchilar sinf 
ta'rifida e'lon qilinadi. MAVZU: Sinflar va const o`zgaruvchilar
C   + +   -   bu   o b' e k t g a  y o ' n al t i r i l ga n  d as t ur l as h  t i l i .   C+ +   d as t ur l as h  t i l i da  
ha mm a   n ar s a   un i n g  x us us i y at l a r i   v a  us ul l a r i   bi l a n   bi r   q at o r d a  s i nf l l ar   v a 
oby ek t l a r   b i l an   bo g' l i q.
Sinf   - bu bizning dasturimizda foydalanishimiz mumkin bo'lgan foydalanuvchi belgilaydigan ma'lumot 
turi va u ob'ekt tuzuvchisi yoki ob'ektlarni yaratish uchun "reja" sifatida ishlaydi.
Sinf yarating.
S i nf   y ar a t i s h  uc hu n   c l a s s   k al i t   s o ' z d an   f oy d al an i n g.   "   M y C l a s s "   No ml i   s i nf  
y ar at a mi z .
class   MyClass  {              // class
    public :                          // ochiqlik siyosati
        int  myNum;                // Attribute (int tipiga tegishli)
        string  myString;    // Attribute (string tipiga tegishli)
};
Misolni tushuntirish.
 c l a s s   K a l i t   s o ' z   M y C l a s s   d e b   a t a l g a n   b i r   s i n f   y a r a t i s h   u c h u n  
i s h l a t i l a d i   .
 p u b l i c K a l i t   s o ' z   b i r   b o ' l i b   k i r i s h b e l g i s i   i f o d a l a y d i .   B u   d e g a n i  
c l a s s   d a n   t a s h q a r i d a   h a m   a t t r i b u t l a r d a n   f o y d a l a n i s h   m u m k i n   .
 S i n f   i c h i d a   b u t u n   s o n   m y N u m   v a   s a t r   o ' z g a r u v c h i s i  
m a v j u d   m y S t r i n g .   O ' z g a r u v c h i l a r   s i n f   i c h i d a   e ' l o n   q i l i n g a n i d a ,  
u l a r   a t r i b u t l a r   d e b   n o m l a n a d i   .
 N i h o y a t ,   s i n f   t a ' r i f i n i   n u q t a - v e r g u l   b i l a n   t u g a t i n g   ; .
Ob'ektni yaratish.
C+ +   d as t ur l as h  t i l i da   bi z   s i nf   y a r at di k ,   M y C l a s s   no ml i   c l as s   y ar at di k ,  
s hu ni ng   uc hu n   bu nd an   f oy da l a ni b   oby ek t   y a r at am i z .   O b ' ek t ni   y ar at i s h  
uc h un   M y C l a s s s i nf   no mi ni ,   s o' n gr a   ob' ek t   no mi ni   k o ' r s a t i ng.
# include   <iostream>
# include   <string>
using   namespace  std;
class   MyClass  {       
    public :                                  int  myNum;               
        string myString;   
};
int   main ()   {
    MyClass myObj; 
    myObj.myNum =  15 ;
    myObj.myString =  "Some text" ;
    cout << myObj.myNum <<  "\n" ; 
    cout << myObj.myString; 
    return   0 ;
}
Natija:
15
Some text
Bir nechta ob'ektlar.
S i z   bi t t a   s i nf ni ng   bi r   n ec ht a   ob ' ek t l a r i ni   y ar at i s hi ng i z   mu mk i n :
# include   <iostream>
# include   <string>
using   namespace  std;
class   Car  {
    public :
        string brand;
        string model;
        int  year;
};
int   main ()   {
    Car carObj1;
    carObj1.brand =  "BMW" ;
    carObj1.model =  "X5" ;
    carObj1.year =  1999 ;
    Car carObj2;
    carObj2.brand =  "Ford" ;
    carObj2.model =  "Mustang" ;
    carObj2.year =  1969 ;
    cout << carObj1.brand <<  " "  << carObj1.model <<  " "  << carObj1.year <<  "\n" ;
    cout << carObj2.brand <<  " "  << carObj2.model <<  " "  << carObj2.year <<  "\n" ;
    return   0 ;
} MAVZU: Sinflardagi ichki ma`lumotlar turlari
Reja:
 
1.       Obyekt tushunchasi.
2.       Sinf tushunchasi.
3.       Murojaat huquqlari.
4.       Konstruktor.
5.       Destruktor.
 
Sinf-struktura   tushunchasi   kengaytmasi   sifatida.   Sinflarni   eng   sodda
holda quyidagicha tasvirlash mumkin:
Sinf-kaliti Sinf-soni {komponentalar ro’yxati}
Sinf   komponentalari   sodda   holda   tiplangan   ma’lumotlar   va
funksiyalardan   iborat   bo’ladi.   Figurali   kavslarga   olingan   komponentalar
ro’yxati   Sinf   tanasi   deb   ataladi.   Sinfga   tegishli   funksiyalar   komponenta-
funksiyalar yoki sinf funksiyalari deb ataladi.
Sinf   kaliti   sifatida   Struct   xizmatchi   so’zi   ishlatilishi   mumkin.   Masalan
quyidagi konstruksiya kompleks son sinfini kiritadi.
struct complex
{
double real;
double imag; void define (double re=0.0, double im=0.0)
{
real=re; imag=im;
}
void display (void)
{
cout<=”real=”<<real;
cout<=”imag=”<<imag;
}
};
Strukturadan bu sinfning farqi shuki komponenta ma’lumotlardan (real,
imag) tashqari ikkita komponenta funksiya (define() va display ()) kiritilgan.
Bu   kiritilgan   sinf   o’zgaruvchilar   tipi   deb   karalishi   mumkin.   Bu   tiplar
erdamida konkret ob’ektlarni quyidagicha tasvirlash mumkin:
Misol uchun:
complex x,y;
complex dim[8];
Sinfga tegishli ob’ektlar quyidagicha tasvirlanadi;S I N F - N O M I . O B ’ E K T - N O M I
Dasturda ob’ekt komponentasiga quyidagicha murojat kilish mumkin:
Sinf-nomi.ob’ekt-nomi :: komponenta-nomi   yoki soddarok holda
Ob’ekt-nomi. Element-nomi  
Misol uchun:
x.real=1.24;
x.imag=0.0;
dim[3]. Real=0.25;
dim[3]. Imag=0.0;
Sinfga tegishli funksiyalarga quyidagicha murojat qilinadi:
ob’ekt-nomi. funksiya-nomi
Misol uchun:
X. define(0.9) (Bu holda real=0.9 va imag=0.0)
X. define(4.3,20.0) (Bu holda kompleks son 4.3+i*20.0)
Display funksiyasi ekranda kompleks son qiymatlarini tasvirlaydi.
Komponenta     o’zgaruvchilar   va     komponenta   funksiyalar.Sinf
kompanenta     o’zgaruvchilari     sifatida     o’zgaruvchilar   ,     massivlar,
ko’rsatkichlar   ishlatilishi   mumkin.   Elementlar     ta’riflanganda
initsializatsiya     kilish     mumkin   emas.   Buning   sababi   shuki   sinf
uchun     xotiradan     joy     ajratilmaydi.   Kompanenta   elementlariga
kompanenta     funksiyalar     orkali     murojat     qilinganda     faqat   nomlari
ishlatiladi   Sinfdan   tashqarida     sinf   elementlariga   emas
ob’ekt     elementlariga     murojat     kilish   mumkin   .     Bu   murojat     ikki   xil   bo’lishi
mumkindir.
Ob’ekt- nomi . Element -     nomi.
Sinf   elementlari     sinfga   tegishli   funksiyalarida   ishlatilishidan     oldin
ta’riflangan     bo’lishi   shart   emas.   Xuddi   shunday   bir     funksiyadan   xali     ta’rifi
berilmagan     ikkinchi     funksiyaga     murojaat kilish mumkin. Komponentalarga   murojaat   xukuklari.   Komponentalarga   murojaat
xuquqi   murojaat   spetsifikatorlari   yordamida   boshkariladi.   Bu
spetsifikatorlar:
Protected   – ximoyalangan;
Private   – xususiy;
Public   – umumiy;
Ximoyalangan   kompanentalardan   sinflar   ierarxiyasi   qurilganda
foydalaniladi.   Oddiy   holda   Protected   spetsifikatori   Private   spetsifikatoriga
ekvivalentdir.   Umumiy   ya’ni   Public   tipidagi   komponentalarga   dasturning
ixtiyoriy joyida murojaat kilinishi mumkin.
Xususiy   ya’ni   Private   tipidagi   komponentalarga   sinf   tashqarisidan
murojaat   qilish   mumkin   emas.   Agar   sinflar   Struct   xizmatchi   so’zi   bilan
kiritilgan bo’lsa, uning hamma komponentalari umumiy Public bo’ladi, lekin
bu xuquqni murojaat spetsifikatorlari yordamida o’zgartirish mumkin.
Agar   sinf   Class   xizmatchi   so’zi   orkali   ta’riflangan   bo’lsa,   uning   hamma
komponentalari xususiy bo’ladi. Lekin bu xuquqni murojaat spetsifikatorlari
yordamida o’zgartirish mumkindir.
Bu   spetsifikator   yordamida   sinflar   umumiy   holda   quyidagicha
ta’riflanadi:
 
class class_name
{   
int data_member; // Ma’lumot-element
void show_member(int); // Funksiya-element
};
Sinf   ta’riflangandan   so’ng,   shu   sinf   tipidagi
o’zgaruvchilarni(ob’ektlarni) quyidagicha ta’riflash mumkin:
class_name object_one, object_two, object_three;
Quyidagi misolda   employee,   sinfi kiritilgandir:
class employee {
    public:
    long employee_id;
    float salary;
    void show_employee(void)
{
  cout<<"Nomer: "<<employee_id<<endl;
  cout<<"Maosh: "<<salary<<endl;
};
};
Bu sinf ikki o’zgaruvchi va bitta funksiya-elementga ega.
  Quyidagi   dastur   ikki   employee   ob’ektini   yaratadi.   Nuqta
operatordan   foydalanib   ma’lumot   elementlarga   qiymat   beriladi
so’ngra   show_employee   elementidan   foydalanib   xizmatchi   xakidagi
ma’lumot ekranga chikariladi:
#include <iostream>
using namespace std;
class employee
{
    public:
    long employee_id;
    float salary;
    void show_employee(void) {
  cout<<"Nomer: "<<employee_id<<endl;
  cout<<"Maosh: "<<salary<<endl;
};
};
int main()
{
employee worker, boss;
worker.employee_id = 12345;
worker.salary = 25000;
boss.employee_id = 101;
boss.salary = 101101.00;
cout<<"\n"<<"ishchi"<<endl;
worker.show_employee();
cout<<"\n"<<"boss"<<endl;
boss.show_employee();
return 0;
}
Komponenta funksiya ta’rifi.   Komponenta funksiya albatta sinf tanasida
ta’riflangan bo’lishi lozim. Global funksiyalardan farqli komponenta funksiya
sinfning   hamma   komponentalariga   murojat   qilishi   mumkin.   Funksiyaning
faqat prototipi emas to’la ta’rifi sinf tanasida joylashgan bo’lsa, bu funksiya
joylashtiruvchi   (inline)   funksiya   hisoblanadi.   Ma’lumki   inline
funksiyalardassikllar, kalit bo’yicha o’tish operatori ishlatilishi mumkin emas. Bundan   tashqari   bunday   funksiyalar   rekursiv   funksiya   bo’lolmaydi.   Bu
chegaralarni   engish   uchun   sinf   tanasiga   faqat   funksiya   prototipi
joylashtirilib,   funksiyaning   to’la   ta’rifi   sinf   tashqarisida   dasturga   kiruvchi
boshqa   funksiyalar   bilan   birga   beriladi.   Komponenta   funksiyani   sinf
tashqarisida   ta’riflanganda,   qaysi   sinfga   tegishli   ekanligini   quyidagi   shaklda
ko’rsatiladi:
Sinf-nomi :: Komponenta funksiya-nomi
Sinf   tanasiga   komponenta   funksiya   prototipi   quyidagi   shaklda
joylashtiriladi:
  Tip funksiya-nomi(formal-parametrlar-ta’rifi)
Sinf tashqarisida funksiya quyidagi shaklda ta’riflanadi:
  Tip sinf-nomi :: funksiya-nomi(formal-parametrlar-spetsifikatsiyasi)
{ funksiya tanasi };
Oldingi   misoldagi     employee   sinfida   funksiya   sinf   ichida
ta’riflangan.   Bunday   funksiya   joylanuvchi   (inline)   funksiya   deb
qaraladi.
  Funksiyani   sinf   tashqarisida   ta’riflab   sinf   ichiga   funksiya
prototipini   joylashtirish   mumkin.   Sinf   ta’rifi   bu   holda   quyidagi
ko’rinishda bo’ladi:
class employee
{
    public:
    long employee_id;
    float salary;
    void show_employee(void);
}; Har   xil   funksiyalar   bir   xil   nomli   funksiyalardan   foydalanishi
mumkin   bo’lgani   uchun   funksiya   nomi   sinf   nomi   va   global   ruxsat
operatori belgisi (::) qo’yilishi lozim.
void employee::show_employee(void)
{
  cout<<"Nomer: "<<employee_id<<endl;
  cout<<"Maosh: "<<salary<<endl;
};
Funksiya   sinf   tashqarisida   ta’riflangan   bo’lsa   ularni   inline
funksiya   sifatida   qarash   uchun   funksiya   ta’rifida   inline   so’zi   aniq
ko’rsatilgan bo’lishi kerak.
Quyidagi   dastur   show_employee   funksiyasi   ta’rifini   sinf
tashqarisiga joylashtiradi va inline so’zi anik ko’rsatiladi:
#include <iostream>
using namespace std;
class employee
{
    public:
    long employee_id;
    float salary;
    void show_employee(void);
};
inline void employee::show_employee(void)
{   cout<<"Nomer: "<<employee_id<<endl;
  cout<<"Maosh: "<<salary<<endl;
};
 
int main()
{
employee worker, boss;
worker.employee_id = 12345;
worker.salary = 25000;
boss.employee_id = 101;
boss.salary = 101101.00;
cout<<"\n"<<"ishchi"<<endl;
worker.show_employee();
cout<<"\n"<<"boss"<<endl;
boss.show_employee();
return 0;
}
K O N S T R U K T O R L A R .   K O N S T R U K T O R L A R   B U   S I N F   K O M P O N E N T A
F U N K S I Y A L A R I   B O ’ L I B ,   O B ’ E K T L A R N I   A V T O M A T I K   I N I T S I A L I Z A T S I Y A
Q I L I S H   U C H U N   I S H L A T I L A D I .
Konstruktorlar ko’rinishi quyidagicha bo’lishi mumkin:     Sinf nomi (formal parametrlar ro’yxati)
    {konstruktor tanasi}
Bu komponenta funksiya nomi sinf nomi bilan bir xil bo’lishi lozim.
Misol   uchun   complex   sinfi   uchun   konstruktorni   quyidagicha   kiritish
mumkin :
complex (double re = 0.0; double im = 0.0 )
    {real=re; imag=im;}
 
Konstruktorlar   uchun   qaytariluvchi   tiplar,   xatto   void   tipi   ham
ko’rsatilmaydi.   Dasturchi   tomonidan   ko’rsatilmagan   holda   ham   ob’ekt
yaratilganda konstruktor avtomatik ravishda chaqiriladi.

Mavzu: Obyektga yo`naltirilgan dasturlashning kelib chiqish tarixi Reja: 1. Obyektga yo ’ naltirilgan dasturlash tarixi. 2. Obyektga mo’ljallangan yondashuv. 3. Protseduraviy yondoshuv. 4. Obyektga mo’ljallangan yondashuvning afzalliklari va maqsadlari.

Obyektga yo’naltirilgan dasturlash tarixi Rivojlanish tarixi. Obyektga yo’naltirilgan dasturlash (OYD) protsedurali dasturlash g’oyasining rivojlanishi natijasida paydo bo’ldi. Obyektga yo’naltirilgan dasturlashni yanada rivojlantirish uchun ko’pincha voqea (hodisaga yo’naltirilgan dasturlash, HYD) va komponent (komponentga yo’naltirilgan dasturlash, KYD) tushunchalari katta ahamiyatga ega. Dastlabki tushunchalari taklif qilingan, keyinchalik paradigmaga aylangan birinchi OYD tili Simula edi, lekin "obyekt yo’nalishi" atamasi bu tilni qo’llanilish kontekstida ishlatilmadi. Bu til 1967-yilda paydo bo’lganida, unda inqilobiy g’oyalar taklif qilingan: obyektlar, sinflar, virtual metodlar va boshqalar, lekin bularning hammasini o’sha vaqtdagi dasturchilar muhim tushunchalar deb bilishmagan. Ayrim fikrlarga ko’ra, bu til o’z vaqtidan ancha oldinda edi va 1960- yillarning dasturchilari til qadriyatlarini qabul qilishga tayyor emas edilar. Shuning uchun u boshqa dasturlash tillari bilan raqobatlasha olmadi. Simuladagi sinf tushunchasini Algol konstruksiyalari yordamida to’liq aniqlash mumkin bo’lgan(ya'ni Simuladagi sinf - bu primitivlar yordamida tasvirlangan murakkab tushuncha). Alan Kaye va Den Ingalls Smalltalk orqali dasturlashga yangi nuqtai nazarni kiritdilar. Bu yerda sinf konsepsiyasi tilning boshqa barcha konstruksiyalari uchun asosiy g’oyaga aylandi (ya'ni Smalltalkdagi sinf - bu primitiv, u orqali murakkab tuzilmalar tasvirlangan). Aynan u birinchi bo’lib obyektga yo’naltirilgan dasturlash tiliga aylandi. Hozirgi vaqtda obyektga yo’naltirilgan paradigmani amalga oshiradigan amaliy dasturlash tillari soni (tillar ro’yxati) boshqa paradigmalarga nisbatan eng ko’p hisoblanadi. Sanoatdagi eng keng tarqalgan tillar (C++, Delphi, C#, Java va boshqalar) Simula obyekt modelini o’zida mujassam etgan. Smalltalk modeliga asoslangan tillarga misol sifatida Objective-C, Python, Ruby kabilarni keltirish mumkin. Obyektga mo’ljallangan yondashuv. Obyektga mo’ljallangan yondashuv (OMY) dasturiy ta ’ minotning tabiiy rivojidagi navbatdagi pog’onadir. Vaqt o’tishi bilan qaysi uslublar ishlash uchun qulay-u, qaysinisi noqulay ekanini aniqlash oson bo’lib bordi. OMY eng muvaffaqiyatli, vaqt sinovidan o’tgan uslublarni o’zida samarali mujassam etadi. Dastlab dasturlar kommutatsiya bloki orqali kompyuterning asosiy xotirasiga to’g’ridan to’g’ri kiritilar edi. Dasturlar mashina tillarida ikkilik sanoq sistemasida yozilar edi. Dasturlarni mashina tilida yozishda tez-tez

xatolarga yo’l qo’yilar edi, buning ustiga ularni tizimalashtirishning imkoni bo’lmagani tufayli kodni kuzatib borish amalda deyarli mumkin bo’lmagan hol edi. Bundan tashqari, mashina kodlaridagi dasturni tushunish g’oyat murakkab edi. Protseduraviy yondoshuv. Shu vaqtgacha dasturlar berilgan ma'lumotlar ustida biror-bir amal bajaruvchi protseduralar ketma-ketligidan iborat edi. Protsedura yoki funksiya ham o’zida aniqlangan ketma-ket bajariluvchi buyruqlar to’plamidan iborat. Bunda berilgan ma ’ lumotlarga murojaatlar protseduralarga ajratilgan holda amalga oshiriladi. Protsedura tillari dasturchiga axborotga ishlov berish dasturini pastroq darajadagi bir nechta protseduraga bo’lib tashlash imkonini beradi. Pastroq darajadagi bunday protseduralar dasturning umumiy tuzilmasini belgilab beradi. Ushbu protseduralarga izchil murojaatlar protseduralardan 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 protseduralar qo’shilgan edi. Kichik funksiyalarni nafaqat tushunish, balki sozlash ham osonroq kechadi. Strukturaviy dasturlashning asosiy g’oyasi «bo’lakla va hukmronlik qil» prinsipiga butunlay mos keladi. Kompyuter dasturini masalalar to’plamidan iborat deb qaraymiz. Oddiy tavsiflash uchun murakkab bo’lgan ixtiyoriy masalani bir nechta, nisbatan kichikroq bo’lgan, tarkibiy masalalarga ajratamiz va bo’linishni toki masalalar tushunishi uchun yetarli darajada oddiy bo’lguncha davom ettiramiz. Misol sifatida kompaniya xizmatchilarining o’rtacha ish haqini hisoblashni olamiz. Bu masala sodda emas. Uni qator qism masalalarga bo’lishimiz mumkin: 1. Har bir xizmatchining oylik maoshi qanchaligini aniqlaymiz. 2. Kompaniya xodimlari sonini aniqlaymiz. 3. Barcha ish haqlarini yig’amiz. 4. Hosil bo’lgan yig’indini kompaniya xodimlari soniga bo’lamiz. Xodimlarning oylik maoshlari yig’indisini hisoblash jarayonini ham bir necha bosqichlarga ajratish mumkin. 1. Har bir xodim haqidagi yozuvni o’qiymiz. 2. Ish haqi to’g’risidagi ma ’ lumotni olamiz.

3. Ish haqi qiymatini yig’indiga qo’shamiz. 4. Keyingi xodim haqidagi yozuvni o’qiymiz. O’z navbatida, har bir xodim haqidagi yozuvni o’qish jarayonini ham nisbatan kichikroq qism operatsiyalarga ajratish mumkin: 1. Xizmatchi faylini ochamiz. 2. Kerakli yozuvga o’tamiz. 3. Ma'lumotlarni diskdan o’qiymiz. Strukturaviy dasturlash murakkab masalalarni yechishda yetarlicha muvafaqqiyatli uslub bo’lib qoldi. Lekin 1980-yillar oxirlarida strukturaviy dasturlashning ham ayrim kamchiliklari ko’zga tashlandi. Birinchidan, berilgan ma'lumotlar (masalan, xodimlar haqidagi yozuv) va ular ustidagi amallar (izlash, tahrirlash) bajarilishining bir butun tarzda tashkil etilishidek tabiiy jarayon realizatsiya qilinmagan edi. Aksincha, protseduraviy dasturlash berilganlar strukturasini bu ma ’ lumotlar ustida amallar bajaradigan funksiyalarga ajratgan edi. Ikkinchidan, dasturchilar doimiy tarzda eski muammolarning yangi yechimlarini ixtiro qilar edilar. Bu vaziyat go’yoki velosipedni qayta ixtiro qilishga o’xshab ketar edi. Ko’plab dasturlarda takrorlanuvchi bloklarni ko’p martalab qo’llash imkoniyatiga bo’lgan xohish tabiiydir. Buni radio ishlab chiqaruvchi tomonidan priyomnikni yig’ishga o’xshatish mumkin. Konstruktor har safar diod va tranzistorni ixtiro qilmaydi. U oddiygina – oldin tayyorlangan radio detallaridan foydalanadi xolos. Dasturiy ta ’ minotni ishlab chiquvchilar uchun esa bunday imkoniyat ko’p yillar mobaynida yo’q edi. Boshqa tomondan, protsedurali dasturlash koddan takroran foydalanish imkonini cheklab qo’yadi. Shu narsa aniq bo’ldiki, protsedurali dasturlash usullari bilan dasturlarni ishlab chiqishda diqqatni ma ’ lumotlarga qaratishning o’zi muammolarni keltirib chiqarar ekan. Chunki ma'lumotlar va protsedura ajralgan, ma'lumotlar inkapsulyatsiyalanmagan. Bu nimaga olib keladi? Shunga olib keladiki, har bir protsedura ma ’ lumotlarni nima qilish kerakligini va ular qayerda joylashganini bilmog’i lozim bo’ladi. Agar protsedura ma'lumotlar ustidan noto’g’ri amallarni bajarsa u ma'lumotlarni buzib qo’yishi mumkin. Har bir protsedura ma ’ lumotlarga kirish usullarini dasturlashi lozim bo’lganligi tufayli, ma ’ lumotlar taqdimotning o’zgarishi dasturning ushbu kirish amalga oshirilayotgan barcha o’rinlarining o’zgarishiga olib kelar edi. Shunday qilib, hatto eng kichik to’g’rilash ham butun dasturda qator o’zgarishlarni sodir bo’lishiga olib kelar edi.

Modulli dasturlashda, masalan, Modula2 kabi tilda protsedurali dasturlashda topilgan ayrim kamchiliklarni bartaraf etishga urinib ko’rildi. Modulli dasturlash dasturni bir necha tarkibiy bo’laklarga, yoki, boshqacha qilib aytganda, modullarga bo’lib tashlaydi. Agar protsedurali dasturlash ma'lumotlar va jarayonlarni bo’lib tashlasa, modulli dasturlash, undan farqli o’laroq, ularni birlashtiradi. Modul ma ’ lumotlarning o’zidan hamda ma ’ lumotlarga ishlov beradigan protseduralardan iborat. Dasturning boshqa qismlariga moduldan foydalanish kerak bo’lib qolsa, ular modul interfeysiga murojaat etadi. Modullar barcha ichki axborotni dasturning boshqa qismlarida yashiradi. Biroq modulli dasturlash ham kamchiliklardan holi emas. Modullar kengaymas bo’ladi, bu degani kodga bevosita kirishsiz hamda uni to’g’ridan to’g’ri o’zgartirmay turib modulni qadam-baqadam o’zgartirish mumkin emas. 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 turni kengaytirish usuli, agar «agregatlash» deb ataluvchi usul yordamida boshqa turlarni yaratishni hisobga olmaganda, mavjud emas edi. Xullas, modulli dasturlash – bu yana protseduraga mo’ljallangan gibridli sxema bo’lib, unga amal qilishda dastur bir necha protseduralarga bo’linadi. Biroq endilikda protseduralar ishlov berilmagan ma'lumotlar ustida amallarni bajarmaydi, balki modullarni boshqaradi. Obyektga yo’naltirilgan dasturlash (OYD) bu talablarga to’la javob beradi. Bunda dasturiy komponentlarni ko’p martalab qo’llash va berilganlarni manipulatsiya qiluvchi usullar bilan birlashtirish imkoniyati mavjud. OYDning asosiy maqsadi berilganlar va ular ustida amal bajaruvchi protseduralarni yagona obyekt deb qarashdan iboratdir. Obyektga mo’ljallangan yondashuvning afzalliklari va maqsadlari. OMY dasturiy ta ’ minotni ishlab chiqishda oltita asosiy maqsadni ko’zlaydi. OMY paradigmasiga muvofiq ishlab chiqilgan dasturiy ta ’ minot quyidagi xususiyatlarga ega bo’lmog’i lozim: 1)tabiiylik; 2) ishonchlilik; 3) qayta qo’llanish imkoniyati; 4) kuzatib borishning qulayligi: 5) takomillashishga qodirlik;