Pengenalan
Mixins ialah konsep pengaturcaraan yang membolehkan anda mengembangkan keupayaan daripada kelas di luar warisan. Namun, apakah yang membezakannya daripada warisan?
Mixin sebagai "Subkelas Abstrak"
Mixin sering dirujuk sebagai "subclass abstrak" kerana ia menyerupai subclass yang tidak boleh diwujudkan secara langsung. Mereka menyediakan cara untuk menambah fungsi tertentu pada kelas tanpa membuat kelas berasingan baharu. Pendekatan ini membantu memastikan hierarki kelas lebih mudah.
Mengatasi Kekurangan Warisan
Motivasi utama di sebalik mixin adalah untuk menangani batasan warisan. Warisan membolehkan anda memperoleh kelas baharu daripada kelas sedia ada, tetapi ia boleh menjadi rumit apabila berbilang kelas memerlukan kefungsian yang serupa tetapi bebas. Mixin menawarkan penyelesaian yang lebih modular dan fleksibel.
Contoh Mixin dalam C
Pertimbangkan contoh C berikut:
<code class="cpp">struct Number { int n; void set(int v) { n = v; } int get() const { return n; } }; template <typename BASE, typename T = typename BASE::value_type> struct Undoable : public BASE { T before; void set(T v) { before = BASE::get(); BASE::set(v); } void undo() { BASE::set(before); } };</code>
Di sini, Boleh dibatalkan ialah templat campuran yang menambahkan kefungsian buat asal pada mana-mana kelas yang digunakan untuknya. Untuk menggunakannya, kita boleh mencampurkannya dengan kelas Nombor seperti berikut:
<code class="cpp">typedef Undoable<Number> UndoableNumber;</code>
Ini mencipta kelas UndoableNumber baharu yang mempunyai kedua-dua fungsi Nombor dan keupayaan untuk membuat asal perubahan.
Kesimpulan
Mixin menyediakan pendekatan yang berkuasa dan boleh diperluaskan untuk mengarang kelas daripada blok binaan boleh guna semula. Ia membenarkan anda menambah fungsi tertentu tanpa membuat hierarki warisan yang kompleks, menjadikan kod anda lebih modular dan boleh diselenggara.
Atas ialah kandungan terperinci Apakah Mixin dan Bagaimana Mereka Meningkatkan Keupayaan Kelas Melampaui Warisan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!