— Salom, Amigo! Bugun interfeyslar mavjudligining sabablarini senga tushuntirmoqchiman. Tez-tez biror klass, ob'ekt yoki mavjudlik ma'lum bir interfeysni qo'llab-quvvatlaydi, degan gapni eshitasan. Bu nima degani — interfeysni qo'llab-quvvatlash?
Yana kengroq ma'noda, qandaydir narsaning interfeysi — bu o'sha narsaning boshqa buyumlar bilan o'zaro aloqasini ta'minlaydigan mexanizm. Masalan, televizor masofadan boshqarish pulti — bu masofaviy interfeys. It buyruqlarni tushunadi va bajaradi — bu degani, it ovozli interfeysni (boshqarish) qo'llab-quvvatlaydi. Agar buni xulosa qilsak, interfeys — bu ikki narsa o'rtasidagi standartlashgan o'zaro bog'lanish usuli bo'lib, bu standart ikki tomon uchun ham ma'lum. Inson itga "o'tir" deyishi, bu "itni boshqarish ovozli interfeysi" ga mos buyruq berishi, va agar it bu buyruqni bajarsa, biz it bu interfeysni qo'llab-quvvatlaydi, deymiz.
Dasturlashda ham xuddi shunday. Metodlar — bu ob'ekt ustidan harakatlar, uning ma'lumotlari ustidan. Agar klass muayyan metodlarni amalga oshirsa, u ma'lum buyruqlarni "qo'llab-quvvatlashni" amalga oshiradi. Metodlarni interfeysga birlashtirish qanday afzalliklarni beradi?
1) Har bir interface va class kabi, o'ziga xos nomga ega. Har ikki tomon 100% ishonch bilan ikkinchi tomon aynan kerakli (ularga ma'lum) interfeysni qo'llab-quvvatlayotganiga ishonishi mumkin, o'xshash bo'lganiga emas.
2) Har bir interfeys o'sha klassga ma'lum cheklovlar qo'yadi, uni qo'llab-quvvatlashga tayyorlanayotganlar. Klass o'z-o'zidan qaror qiladi (uning ishlab chiquvchisi), interfeysdan meros qilib olingan metodlari chaqirilganda nima qilishini, lekin natija kutilayotgan doiralarda bo'lishi kerak. Agar itga "o'tir" buyruq qilingan bo'lsa, va u 5 daqiqa joyida aylangan va o'tirib olinadigan bo'lsa, bu interfeysni qo'llab-quvvatlash. Agar u sizni tishlamoqchi bo'lsa, bu yerda hech qanday qo'llab-quvvatlash haqida gap bo'lishi mumkin emas. Buyruq bajarilishi kutilgan natijalarni keltirmadi.
Aytaylik, sen va do'stlaring kompyuter o'yinini yozishda ishtirok etyapsan. Va senga bir belgi xatti-harakatini dasturlash vazifasi tushdi. Bir hamkasbingiz barcha belgilarni ekranga chiqarish bo'yicha kodni yozib ulgurgan. Ikkinchi, o'yinni diskka saqlash uchun javobgar bo'lgan, o'yin barcha ob'ektlarini faylga saqlash bo'yicha kod yozgan. Ularning barchasi o'zaro aloqani ta'minlash uchun interfeys yaratgan. Masalan, bu quyidagicha bo'lishi mumkin:
| Java kodi | Ta'rif |
|---|---|
|
— ob'ektni map’dan saqlash/yuklash interfeysi. |
|
— ekranga chizish interfeysi. |
|
— ikki interfeysni qo'llab-quvvatlovchi sening klassing. |
Boshqa so'zlar bilan aytganda, o'z klassingda qandaydir interfeysni (interfeyslar guruhini) qo'llab-quvvatlash uchun:
1) Ulardan nasl olish kerak
2) Ularda e'lon qilingan metodlarni amalga oshirish kerak
3) Metodlar o'z vazifasini amalga oshirishi kerak.
Shunda, dasturiy ta'minotning qolgan qismi, sening klassing va uning ob'ektlari haqida hech narsa bilmasa ham, muvaffaqiyatli ishlashi mumkin.
— Nega kod mening klassim haqida hech narsa bilmasligi mumkin?
— Aytaylik, sen kimningdir bir yil oldin yozgan dasturiy ta'minot kodini olding. Yoki do'stlaring boshqa birovdan o'yinning dvigatelini sotib olgan/litsenziyalagan. Ishlashga tayyor o'yin kodi bor. Minglab ob'ektlar, ular bir-biri bilan o'zaro aloqada. Va ular sening ob'ektlaring bilan to'g'ri o'zaro aloqa qilishlari mumkin, agar interfeys yordamida aloqalar tashkillashtirilgan bo'lsa va sen o'z klasslaringda ularga to'g'ri amal qilgan bo'lsang.
— Zo'r! Shunday qilish mumkinligini bilmagan edim.
— Bu tamoyil barcha katta loyihalar uchun asosdir. Indamasdan, hech kim hech narsani yangidan yozmaydi.
Odamlar ham yangi matematika va alifboni har safar yangidan kashf etishmaydi, balki ularni o'rganishadi, ulardan avvalroq tayyorlangan barcha narsalarni bilishadi.
GO TO FULL VERSION