O’ZBEKISTON RESPUBLIKASI AXBOROT TEXNOLOGIYALARI VA KOMMUNIKATSIYALARINI RIVOJLANTIRISH VAZIRLIGI MUHAMMAD AL-XORAZMIY NOMIDAGI TOSHKENT AXBOROT TEXNOLOGIYALARI UNIVERSITETI
AXBOROT XAVFSIZLIGI FAKULTETI
REFERAT
BAJARDI:TURDIQULOV JAHONGIR
TOSHKENT-2021
Sinf a’zolariga va funksiyalarga murojaatni boshqarish
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’ridan-to’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 xatti-harakatlar. 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 bir-birlari 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 xulq-atvorini 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.
Do'stlaringiz bilan baham: |