— Salom, Amigo! Nihoyat qiziqarli mavzuga yetib keldik. Bugun senga ko'p marta meros olish haqida gapirib beraman. Aslida ko'p marta meros olish juda qiziqarli va kuchli vosita. Agar ba'zi muammolar bo'lmasa, Java'da sinflarning ko'p marta meros olish bo'lar edi. Lekin uni yo'qligi sababli interfeyslarning ko'p marta meros olish bilan kifoyalanishga to'g'ri keladi. Bu ham unchalik kam emas.
Tasavvur qil, kompyuter o'yini yozmoqdasiz. Uning qahramonlari – ob'ektlaringiz – juda murakkab xatti-harakatlar ko'rsatishi kerak: xaritadan o'tish, narsalarni to'plash, questlarni bajarish, boshqa qahramonlar bilan muloqot qilish, kimnidur o'ldirish, kimnidur qutqarish. Faraz qilaylik, barcha ob'ektlarni 20 kategoriyaga bo'lib oldingiz. Bu degani, agar omadingiz kelsa, ularni tasvirlash uchun atigi 20 ta klass yetarli bo'lishi mumkin. Endi sizga savol: bu ob'ektlarning nechta noyob o'zaro ta'siri bor? Har bir turdagi ob'ekt boshqa 20 ta turdagi ob'ektlar bilan (o'ziga o'xshashlarini ham hisobga olamiz) noyob o'zaro ta'sirlarda bo'lishi mumkin. Ya'ni jami 20 marta 20 – 400 ta o'zaro ta'sirni dasturlash kerak! Agar ob'ektlar soni 20 emas, 100 bo'lsa, interaktsiyalar soni 10,000 ga yetishi mumkin!
— Yo'lbars! Endi tushunaman, nega dasturlash shunchalik murakkab ish ekanligini.
— U oddiy. Ko'pgina abstraksiyalar tufayli. Ayniqsa, interfeyslarning ko'p marta meros olish tufayli.
Ko'pincha, agar ob'ektlar emas, ularning rollari/yoki qobiliyatlari o'zaro ta'sir qilsa, o'zaro ta'sirni soddalashtirish mumkin. Va qobiliyatlar, biz bilganimizdek, ba'zi interfeysni amalga oshirganda klassga osongina qo'shiladi.
Katta dasturlar yozilganda, odatda shundan boshlashadi:
1) Barcha mavjud qobiliyatlar/rollarni aniqlashadi.
2) Keyin bu rollar o'rtasidagi o'zaro ta'sirni tasvirlashadi.
3) So'ngra barcha klasslarga ularning rollarni berishadi.
— Misol keltirasizmi?
— Albatta. "Tom va Jerry" multfilmi qahramonlari asosida rollarni ko'rib chiqamiz.
| Java kodi | Tavsif |
|---|---|
|
— rol/qobiliyat harakatlanishi. |
|
— rol/qobiliyat yeyilishi. |
|
— rol/qobiliyat biror kimnidir yeyishi. |
|
Tom – bu mushuk, unga uchta rol berilgan: 1) harakatlanishi mumkin 2) kimnidir yeyishi mumkin 3) kimdirdan qo'rqib yeyilishi mumkin (itdan) |
|
Jerry – bu sichqon, unga ikki rol berilgan: 1) harakatlanishi mumkin 2) kimdirdan qo'rqib yeyilishi mumkin |
|
Killer – bu it, unga ikki rol berilgan: 1) harakatlanishi mumkin 2) kimnidir yeyishi mumkin |
Faqat shu uchta rolni (interfeysni) bilgan holda dastur yozishingiz va ushbu rollarning to'g'ri o'zaro ta'sirini tasvirlashingiz mumkin. Masalan, ob'ekt (Moveable interfeysi orqali) «kimnidir eysang» degan narsani tutishi va «seni eyishi mumkin» degan narsadan qochishi mumkin. Bularning barchasi aniq ob'ektlar haqida ma'lumotga ega bo'lmasdan. Agar dasturga yana biroz ob'ektlar (klasslar) qo'shsangiz, lekin bu rollarni saqlasangiz, dastur ajoyib ishlaydi – o'z ob'ektlarining xatti-harakatlarini boshqaradi.
GO TO FULL VERSION