— Salom, Amigo! Bu menman, yana bir martta. Interfeyslar haqida yana bir qarash bilan tanişdirishni istayman. Tushunasanmi, class — aksariyat hollarda aniq bir obyektning modeli. Interfeys esa obyektdan ko'ra ko'proq qobiliyatlar yoki rollarga mos keladi.
Misol uchun, mashina, velosiped, mototsikl va g'ildirak kabi narsalarni klasslar va obyektlar shaklida tasavvur qilish eng yaxshi yo'ldir. Ammo «yura olish», «odamlarni tashiy olish», «turish» kabi qobiliyatlarni interfeyslar sifatida tasavvur qilish yaxshiroq. Mana misol:
| Java Kodi | Izoh |
|---|---|
|
— harakatlana olish qobiliyatiga mos keladi. |
|
— haydovchi tomonidan boshqarila olish qobiliyatiga mos keladi. |
|
— yuklarni tashiy olish qobiliyatiga mos keladi. |
|
— «g'ildirak» classi. Harakatlana olish qobiliyatiga ega. |
|
— «mashina» classi. Harakatlana olish, odam tomonidan boshqarila olish va yuklarni tashiy olish qobiliyatlariga ega. |
|
— «skeytbord» classi. Harakatlana olish va odam tomonidan boshqarila olish qobiliyatlariga ega. |
Interfeyslar dasturchining hayotini juda osonlashtiradi. Ko'pincha dasturning ichida minglab obyektlar, yuzlab klasslar va faqat bir nechta interfeyslar — rollar mavjud bo'ladi. Rollar oz, lekin ularning kombinatsiyalari — klasslar juda ko'pdir.
Ma'nosi shundaki, senga har bir klass bilan alohida muloqot qilishning hojati yo'q. Ularning rollari (interfeyslari) bilan muloqot qilish kifoya.
O'zingizni robot-quruvchi deb tasavvur qilib ko'ring, va sizning qo'lingizda o'nlab robotlar bor, har biri bir nechta kasblarga ega bo'lishi mumkin. Devorni tezda tugatishingiz kerak. Siz faqatgina "quruvchi" qobiliyatiga ega robotlarni devor qurishga chaqirasiz. Sizga qanaqa robotlar ekanligi muhim emas. Agar u qura oladigan bo'lsa — yo'lida davom etsin.
Bu kodda qanday bo'lishi ko'rsatilgan:
| Java Kodi | Izoh |
|---|---|
|
— «devor quruvchi» qobiliyatiga mos keladi. «Devor qurish» buyrug'ini tushunadi — mos keluvchi metod mavjud. |
|
— bu kasb/qobiliyatga ega robotlar. — qulaylik uchun klasslarga ruscha nom qo'ydim. Java'da bunday qilish mumkin, lekin tavsiya etilmaydi. — Suv Sepuvchi devor qurish qobiliyatiga ega emas (WallBuilder interfeysini amalga oshirmaydi). |
|
— ularga qanday qilib devorni qurishni buyurish kerak? |
— Juda qiziq-ku. Interfeyslar bu qadar qiziqarli mavzu ekanini bilmasdim.
— Albatta! Polimorfizm bilan birlashtirilganida — bu haqiqiy bomba.
GO TO FULL VERSION