Obyektga yo`naltirilgan dasturlashning kelib chiqish tarixi
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;