Meros va Tarkibi
Meros va Kompozitsiya OOP (Ob'ektga yo'n altirilgan dasturlash) da joylashgan ikkita muhim tushunchadir. Oddiy qilib aytganda, Kompozisiya 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, Kompozitsiya sinfning turli sinf 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 (usullarga yangi yoki kengaytirilgan funksiyalarni taqdim etishi) mumkin.
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).
Tarkib nima?
Kompozitsiya - 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. Tarkibi konteyner deb ham ataladi. Ushbu misolda A sinfi B sinfidan tashkil topganligini aytish mumkin. OOPda Kompozitsiya “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 tarkib oʻrtasidagi farq nima?
Garchi Meros va Tarkibi ikkita OOP tushunchasi boʻlsa-da, ular dasturchiga erishishga imkon beradigan narsada mutlaqo farq qiladi. Meros - bu sinfning asosiy sinfdan xususiyatlar va xatti-harakatlarni kengaytirish orqali uni meros qilib olish qobiliyati, Kompozitsiya esa sinfning a'zo ma'lumotlari sifatida turli sinflar ob'ektlarini 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, Kompozitsiya esa “bor-a” munosabatini ifodalaydi.