Meros va Konteynerlik
Meros va Konteynerlik OOPda joylashgan ikkita muhim tushunchadir (Ob'ektga yo'n altirilgan dasturlash misoli: C++). Oddiy qilib aytganda, Konteynerlik ham, meros ham sinfga qo'shimcha xususiyatlar yoki xatti-harakatlarni taqdim etish bilan shug'ullanadi. Meros - bu sinfning uni kengaytirish orqali ota-sinfdan xususiyatlar va xatti-harakatlarni meros qilib olish qobiliyati. Boshqa tomondan, Containership - bu sinfning turli sinflar ob'ektlarini a'zo ma'lumotlari sifatida o'z ichiga olish qobiliyatidir.
Meros nima?
Yuqorida aytib o'tilganidek, Meros - bu sinfning ota-sinfdan xususiyatlar va xatti-harakatlarni uni kengaytirish orqali meros qilib olish qobiliyati. Meros, asosan, yangi belgilangan sinf tomonidan mavjud sinfning xususiyatlarini va xatti-harakatlarini kengaytirishga ruxsat berish orqali kodni qayta ishlatishni ta'minlaydi. Agar A sinfi B ni kengaytirsa, u holda B sinfi ota-sinf (yoki super sinf) deb ataladi va A sinfi bolalar sinfi (yoki olingan sinf/sub sinf) deb ataladi. Ushbu misol stsenariysida A sinfi super sinfning (B) barcha ochiq va himoyalangan atributlari va usullarini meros qilib oladi. Subklass ixtiyoriy ravishda ota-sinfdan meros qilib olingan xatti-harakatni bekor qilishi mumkin (usullarga yangi yoki kengaytirilgan funksiyalarni taqdim etish). Meros OOPda “is-a” munosabatini ifodalaydi. Bu mohiyatan A ning ham B ekanligini anglatadi. Boshqacha qilib aytganda, B ma'lum bir real dunyo ob'ektining umumiy tavsifiga ega sinf bo'lishi mumkin, lekin A ma'lum bir ixtisoslikni bildiradi. Haqiqiy dunyo dasturlash muammosida Person sinfi Employee sinfini yaratish uchun kengaytirilishi mumkin. Bu mutaxassislik deb ataladi. Lekin siz avval Xodimlar sinfini yaratishingiz va keyin uni Person sinfiga umumlashtirishingiz mumkin (ya'ni.e. umumlashtirish). Bu misolda Xodim Shaxsning barcha xususiyatlari va xatti-harakatlariga ega bo'ladi (ya'ni, Xodim ham Shaxsdir) va ba'zi qo'shimcha funksiyalarni ham o'z ichiga olishi mumkin (shuningdek, Shaxs Xodim emas).
Konteynerlik nima?
Konteynerlik - bu sinfning turli sinflar ob'ektlarini a'zo ma'lumotlari sifatida o'z ichiga olish qobiliyati. Masalan, A klassi B sinfidagi ob'ektni a'zo sifatida o'z ichiga olishi mumkin. Bu yerda B da belgilangan barcha umumiy usullar (yoki funksiyalar) A sinfida bajarilishi mumkin. A klassi konteynerga, B klassi esa mavjud sinfga aylanadi. Konteynerlar tarkibi ham deyiladi. Ushbu misolda A sinfi B sinfidan tashkil topganligini aytish mumkin. OOPda Konteynerlik “has-a” munosabatini ifodalaydi. Shuni ta'kidlash kerakki, konteyner o'z ichiga olgan sinfning barcha umumiy usullarini bajarish huquqiga ega bo'lsa ham, u qo'shimcha funktsiyalarni o'zgartira olmaydi yoki ta'minlay olmaydi. Haqiqiy dunyo dasturlash muammosi haqida gap ketganda, TextBox sinfining ob'ekti Form sinfida bo'lishi mumkin va shuning uchun Formda TextBox mavjud deb aytish mumkin (yoki muqobil ravishda, Form TextBox dan iborat).
Meros va konteyner oʻrtasidagi farq
Meros va Konteynerlik ikkita OOP tushunchasi bo'lsa-da, ular dasturchiga erishishga imkon beradigan narsada mutlaqo farq qiladi. Meros - bu sinfning ota-sinfdan xususiyatlar va xatti-harakatlarni kengaytirish orqali meros qilib olish qobiliyati, Konteynerlik esa sinfning turli sinf ob'ektlarini a'zo ma'lumotlari sifatida o'z ichiga olish qobiliyatidir. Agar sinf kengaytirilsa, u barcha ommaviy va himoyalangan xususiyatlarni/xulq-atvorni meros qilib oladi va bu xatti-harakatlar quyi sinf tomonidan bekor qilinishi mumkin. Ammo agar sinf boshqasida bo'lsa, konteyner o'z ichiga o'zgartirish yoki xatti-harakatni qo'shish qobiliyatiga ega emas. Meros OOPda “is-a” munosabatini, Konteyner esa “bor-a” munosabatini ifodalaydi.