Dasturlashda qayta ishlatiladigan kod bu qayta dasturlash tamoyillaridan foydalangan holda yangi dasturiy ta'minotni yaratish uchun mavjud dasturlardan foydalanish. Kodlardan qayta foydalanish axborot texnologiyalariga asoslangan korxonalarda asosiy ishlab chiqarish funktsiyasi hisoblanadi. Ob'ektga yo'naltirilgan tizimlarda sinflar o'rtasida aloqalarni o'rnatish orqali targ'ib qilinadi. Ob'ektga yo'naltirilgan dasturlashda bu munosabatlarni o'rnatishning ikkita asosiy usuli bor - meros va kompozitsiya. Merosni amalga oshirish sinflarni o'zaro bog'lashning bir usuli hisoblanadi, ammo OOP kompozitsiya deb nomlangan sinflar o'rtasidagi munosabatlarning yangi turini ta'minlaydi. Yangi va mavjud sinflar o'rtasidagi aloqani o'rnatish orqali yangi sinf bir yoki bir nechta mavjud sinflardan kodni meros qilib olishi yoki qo'shishi mumkin.

OOPda meros bu bir yoki bir nechta boshqa ob'ektlarning xususiyatlarini olish usulidir. Bu OOP-da kodni qayta ishlatishni amalga oshirishda eng kuchli vositalardan biridir. Merosdan foydalanishda, mavjud sinflar bilan ota-ona-bola munosabatlarini o'rnatish orqali yangi sinf yaratilishi mumkin. Ob'ekt tarkibi sinf merosiga alternativa. Boshqa ob'ekt ichida ob'ektni ishlatish kompozitsiya deb nomlanadi. Ko'p holatlarda ob'ektni boshqa sinf ichidagi maydon sifatida ishlatishni xohlar edingiz, chunki tarkibiy qism sifatida oldindan yozilgan, yaxshi ishlab chiqilgan sinflardan foydalanib murakkab sinflarni yaratish oson. Bunga kompozitsiya deyiladi. Xo'sh, ikkala meros ham kompozitsion ekvivalent funktsionallikni ta'minlaydi, ob'ekt tarkibi klass merosiga qaraganda yaxshiroq foydalanish modelidir. Ushbu maqolada ikkita yondashuv taqqoslanadi.

Meros nima o'zi?

Meros - bu ob'ektga yo'naltirilgan dasturlashda kodni qayta ishlatish mumkin bo'lgan eng kuchli vositalardan biridir. Bu bitta ob'ekt bir yoki bir nechta boshqa ob'ektlarning xususiyatlariga ega bo'lgan funktsional imkoniyatlarni anglatadi. C ++ tilida merosxo'rlik mavjud sinflardan ularning atributlarini oladigan sinflar yaratishingiz mumkin degan ma'noni anglatadi. Bu shuni anglatadiki, siz sinflar o'rtasidagi aloqani yaratish uchun ixtisoslashgansiz, bu esa bazalar va olingan sinflar o'rtasida mustahkam bog'lanishni keltirib chiqaradi. Merosni amalga oshirish kodlarning qayta ishlatilishini ta'minlaydi, chunki mavjud sinflardan yangi sinflar yaratiladi. Sinflar merosi, shuningdek, qayta ishlatilayotgan dasturni o'zgartirishni osonlashtiradi. Sinf merosining ba'zi bir salbiy tomonlari ham bor. Birinchidan, meros kompilyatsiya vaqtida aniqlanganligi sababli, ishga tushirish vaqtida ota-ona sinflaridan meros qolgan dasturlarni o'zgartira olmaysiz.

Tarkibi nima?

OOP kompozitsiya deb nomlangan sinflar o'rtasida yana bir aloqani ta'minlaydi va bu "munosabatlar-munosabatlar" deb ham nomlanadi. Agar bitta ob'ektning xususiyatlari boshqa ob'ektning bir qismi bo'lishi kerak bo'lsa, munosabatlar kompozitsiyani talab qiladi. Mavjud sinflardan sinf tuzish uchun har bir sinf ob'ekti yangi sinf a'zosi deb e'lon qilinishi kerak. Oddiy so'zlar bilan aytganda, boshqa ob'ekt ichidagi ob'ektdan foydalanish kompozitsiya deb nomlanadi. Ob'ektni boshqa sinf ichidagi maydon sifatida ishlatishni ko'p marta istashingiz mumkin. Siz tarkibdagi ob'ekt ichidagi ob'ektdan foydalanasiz. Sinf merosidan farqli o'laroq, ob'ekt tarkibi boshqa ob'ektlarga havolalar olish orqali ob'ektlar orqali ish vaqtida aniqlanadi. Bundan tashqari, kompozitsion ob'ektning ichki tafsilotlarini buzmasdan ob'ektdan foydalanishning yaxshiroq usulini ta'minlaydi, ya'ni kompozitsiya foydali bo'ladi.

Tarkibi va meros o'rtasidagi farq

Yondashuv

Meros va kompozitsion ikkala ob'ektga yo'naltirilgan tizimda kodlar qayta ishlatilishini sinflar o'rtasida aloqalarni o'rnatish orqali qo'llab-quvvatlasa-da, ular ko'p jihatdan ekvivalent funktsionallikni ta'minlaydi. Meros orqali siz o'zlarining atributlarini mavjud sinflardan oladigan sinflar yaratishingiz mumkin, shuning uchun merosni klass yaratish uchun ishlatganda, mavjud sinfda kengaytirishingiz mumkin. Aksincha, boshqa ob'ekt ichidagi ob'ektdan foydalanish kompozitsiya deb nomlanadi. Ob'ekt tarkibi sinf merosiga alternativa. Agar bitta ob'ektning xususiyatlari boshqa ob'ektning bir qismi bo'lishi kerak bo'lsa, munosabatlar kompozitsiyani talab qiladi.

Qarindoshlik

Merosda siz sinflar o'rtasida "a-a" aloqasini yaratishga ixtisoslashgansiz, natijada tayanch va hosil bo'lgan sinflar o'rtasida kuchli bog'liqlik yuzaga keladi. Bu sinflar ierarxiyasini yaratishga imkon beradi va ierarxiya eng umumiy sinfdan boshlanadi va aniqroq sinflarga o'tadi. Merosni amalga oshirib, bitta sinfdan a'zo funktsiyalari sinf ichida aniq kodlanmasdan, boshqa sinfning xususiyatlariga aylanadi. Kompozitsiyada siz sinf ichidagi ob'ektdan foydalanasiz va ob'ektga qilingan barcha so'rovlar ob'ektga yuboriladi. Ichki tafsilotlar kompozitsiyada bir-biriga ta'sir qilmaydi, shuning uchun bu "bor-a" munosabati.

Amalga oshirish

Sinfga meros kompilyatsiya vaqtida aniqlanadi, shuning uchun ish vaqtida ota-ona sinflaridan meros qolgan dasturlarni o'zgartira olmaysiz. Meros, ota-ona tomonidan amalga oshiriladigan tafsilotlar uchun kichik sinfni ochib berganligi sababli, ko'pincha kapsülsiyani buzadi. Ota-ona sinfidagi har qanday o'zgarishlar quyi sinfda aks etadi, bu esa subklassni qayta ishlatishda muammolar tug'dirishi mumkin. Ob'ekt tarkibi, aksincha, boshqa ob'ektlarga havolalar olish orqali ob'ektlar orqali ish vaqtida aniqlanadi. Ob'ektlarga faqat ularning interfeyslari orqali kirish imkoniyati mavjudligi sababli, bu kapsapulyatsiyani buzmaydi. Har qanday ob'ekt ish vaqtida boshqa turga o'zgartirilishi mumkin, xuddi shu turga ega.

Tarkibi va merosxo'rlik: taqqoslash jadvali

Tarkib haqida qisqacha ma'lumot meros

Ko'p holatlarda ob'ektni boshqa sinf ichidagi maydon sifatida ishlatishni xohlar edingiz, chunki murakkab sinflar ilgari yozilgan, yaxshi ishlab chiqilgan sinflar yordamida yaratish osonroq. Bu erda siz kompozitsiyadan foydalanasiz. Meros, sinfni minimal kuch sarflab, kodni qayta ishlatish usulini ta'minlaydi, shuning uchun meros sinflar o'rtasidagi munosabatlarni o'rnatishda qimmatli vositadir. Umuman olganda, kompozitsiyadan foydalanish afzalroq, chunki u kompozitsion foydali bo'lgan ob'ektning ichki tafsilotlarini buzmasdan ob'ektdan foydalanish usulini ta'minlaydi. Merosxo'rlik muammosiz bo'lmaydi, lekin meros singari ob'ekt tarkibi ob'ektni yaratish va vayron qilish bilan bog'liq shunga o'xshash ishlarni amalga oshiradi.

Adabiyotlar

  • Tasvir krediti: https://en.wikipedia.org/wiki/Inheritance_(object-oriented_programming)#/media/File:Multilevel_Inheritance.jpg
  • Tasvir krediti: https://upload.wikimedia.org/wikipedia/commons/thumb/9/9f/AggregationAndComposition.svg/500px-AggregationAndComposition.svg.png
  • Bulka, Dov va Devid Mayxay. Samarali C ++: ishlashni dasturlash usullari. Boston, Massachusets shtati: Addison-Uesli, 2000. Chop etish
  • Gamma, Erich. Dizayn naqshlari: Qayta foydalanish mumkin bo'lgan ob'ektga yo'naltirilgan dasturiy ta'minot elementlari. London: Pearson ta'limi, 1995 yil. Chop etish
  • Ganesh, S.G. 60 Ob'ektga yo'naltirilgan dasturlash bo'yicha maslahatlar. NYC: Tata McGraw-Hill Education, 2007 yil. Chop etish
  • Farrell, Joys. C ++ yordamida ob'ektga yo'naltirilgan dasturlash. Boston, Massachusets shtati: Cengage, 2008. Chop etish