Dalam pengaturcaraan, kod boleh digunakan ialah penggunaan perisian sedia ada untuk membina perisian baru menggunakan prinsip-prinsip kebolehbasaian semula. Kebolehgunaan kod dianggap sebagai fungsi produktif yang asas dalam perniagaan teknologi maklumat intensif. Ia dipromosikan dalam sistem berorientasikan objek dengan mewujudkan hubungan antara kelas. Terdapat dua cara asas untuk mewujudkan hubungan ini dalam pengaturcaraan berorientasikan objek - Pewarisan dan Komposisi. Melaksanakan warisan adalah satu cara untuk mengaitkan kelas tetapi OOP menyediakan jenis hubungan baru antara kelas yang disebut komposisi. Dengan mewujudkan hubungan antara kelas baru dan yang sedia ada, kelas baru boleh mewarisi atau membenamkan kod dari satu atau lebih kelas sedia ada.
Di OOP, warisan adalah metodologi yang mana objek memperoleh ciri-ciri satu atau lebih objek lain. Ia adalah salah satu alat yang paling berkuasa dalam melaksanakan kebolehbaksanaan kod dalam OOP. Apabila menggunakan warisan, kelas baru boleh diwujudkan dengan mewujudkan hubungan ibu bapa dan anak dengan kelas yang ada. Komposisi objek adalah alternatif kepada warisan kelas. Menggunakan objek dalam objek lain dikenali sebagai komposisi. Pada banyak kesempatan, anda ingin menggunakan objek sebagai medan dalam kelas lain kerana mudah untuk membuat kelas kompleks menggunakan kelas-kelas yang ditulis dengan jelas dan direka dengan baik sebagai komponen. Ini dipanggil komposisi. Nah, kedua-dua warisan dan komposisi menyediakan fungsi yang setara dalam banyak kes, komposisi objek adalah model penggunaan yang lebih baik daripada warisan kelas. Artikel ini membandingkan dua pendekatan.
Warisan adalah salah satu alat yang paling berkuasa dalam melaksanakan kebolehgunaan semula kod dalam pengaturcaraan berorientasikan objek. Ia merujuk kepada fungsi yang mana satu objek memperoleh ciri-ciri satu atau lebih objek lain. Warisan dalam C ++ bermakna anda boleh membuat kelas yang memperoleh sifat mereka dari kelas sedia ada. Ini bermakna anda mengkhususkan kelas untuk mencipta hubungan antara kelas yang menghasilkan gandingan yang kuat di antara kelas asas dan yang diturunkan. Melaksanakan warisan mempromosikan kebolehgunaan semula kod kerana kelas baru dibuat dari kelas yang ada. Warisan kelas juga memudahkan untuk mengubahsuai pelaksanaan yang digunakan semula. Tetapi warisan kelas mempunyai beberapa kelemahan untuk itu juga. Pertama, kerana warisan ditakrifkan pada masa kompilasi, anda tidak boleh mengubah pelaksanaan yang diwarisi dari kelas induk pada masa larian.
OOP menyediakan hubungan lain di antara kelas yang disebut komposisi, yang juga dikenali sebagai has-a relationship. Sekiranya ciri-ciri satu objek perlu menjadi sebahagian daripada objek lain, hubungan itu memerlukan komposisi. Untuk mengarang kelas dari kelas sedia ada, objek setiap kelas harus diisytiharkan sebagai ahli kelas baru. Secara ringkas, menggunakan objek dalam objek lain dikenali sebagai komposisi. Banyak kali, anda mungkin mahu menggunakan objek sebagai medan dalam kelas lain. Anda menggunakan objek di dalam kelas dalam komposisi. Tidak seperti warisan kelas, komposisi objek dinamik secara dinamik pada masa larian melalui objek yang memperoleh rujukan kepada objek lain. Selain itu, komposisi menyediakan cara yang lebih baik untuk menggunakan objek tanpa mengorbankan butiran dalaman objek, di mana komposisi berguna.
Walaupun kedua-dua warisan dan komposisi mempromosikan kebolehbaksanaan kod dalam sistem berorientasikan objek dengan mewujudkan hubungan antara kelas dan mereka menyediakan fungsi yang setara dalam pelbagai cara, mereka menggunakan pendekatan yang berbeza. Dengan warisan, anda boleh membuat kelas yang memperoleh sifat-sifat dari kelas sedia ada sehingga ketika menggunakan warisan untuk membuat kelas, anda dapat mengembangkan kelas yang ada. Sebaliknya, menggunakan objek dalam objek lain dikenali sebagai komposisi. Komposisi objek adalah alternatif kepada warisan kelas. Sekiranya ciri-ciri satu objek perlu menjadi sebahagian daripada objek lain, hubungan itu memerlukan komposisi.
Dalam warisan, anda mengkhususkan kelas untuk membuat hubungan "is-a" di antara kelas-kelas yang menghasilkan gandingan yang kuat di antara kelas asas dan yang diturunkan. Ia membolehkan hierarki kelas untuk direka bentuk dan hierarki bermula dengan kelas yang paling umum dan bergerak ke kelas yang lebih khusus. Dengan melaksanakan warisan, fungsi ahli dari satu kelas menjadi sifat kelas lain tanpa mengodkannya secara jelas dalam kelas. Dalam komposisi, anda menggunakan objek di dalam kelas dan sebarang permintaan ke objek diteruskan ke objek. Butiran dalaman tidak terdedah kepada satu sama lain dalam komposisi, jadi ia adalah "has-a" hubungan.
Warisan kelas ditakrifkan pada masa kompilasi, jadi anda tidak boleh mengubah pelaksanaan yang diwarisi dari kelas induk pada masa larian. Kerana warisan mendedahkan subclass kepada butiran pelaksanaan ibu bapa, ia sering memecahkan enkapsulasi. Sebarang perubahan dalam kelas induk akan mencerminkan subkelas yang boleh menimbulkan masalah apabila anda cuba menggunakan semula subkelas. Komposisi objek, sebaliknya, ditakrifkan secara dinamik pada jangka masa melalui objek yang memperoleh rujukan kepada objek lain. Dan kerana objek hanya diakses melalui antaramuka mereka, ia tidak akan memecahkan enkapsulasi. Mana-mana objek boleh digantikan pada jangka masa oleh objek lain selagi ia mempunyai jenis yang sama.
Pada banyak kesempatan, anda ingin menggunakan objek sebagai medan dalam kelas lain kerana kelas kompleks lebih mudah dibuat dengan menggunakan kelas yang ditulis dengan jelas dan direka dengan baik. Di sinilah anda menggunakan komposisi. Warisan menyediakan cara untuk menggunakan semula kod dengan memperluaskan kelas dengan usaha yang minimum, ini sebabnya warisan adalah alat yang berharga dalam mewujudkan hubungan antara kelas. Secara umumnya, lebih baik menggunakan komposisi kerana ia menyediakan cara untuk menggunakan objek tanpa menjejaskan butiran dalaman objek yang mana komposisi berguna. Warisan bukanlah tanpa masalah, tetapi seperti warisan, komposisi objek menimbulkan kebimbangan prestasi yang sama berkenaan dengan penciptaan objek dan kemusnahan.