Skip to main content

Mixin คืออะไร?

ในการเขียนโปรแกรมคอมพิวเตอร์ mixin เป็นคลาสที่สืบทอดโดยคลาสอื่น แต่ไม่ได้หมายถึงการสร้างอินสแตนซ์คลาสเดียวสามารถสืบทอด mixins จำนวนมากได้ดังนั้นคอลเลกชันของฟังก์ชั่นจำนวนมากสามารถรวมได้อย่างง่ายดายแม้ว่าภาษาการเขียนโปรแกรมทั่วไปจำนวนมากใช้วิธีการผสม แต่ก็มีอีกมากมายที่ไม่รวมถึง C ++ และ Javaโดยทั่วไปแล้ว mixins จะพบในภาษาสคริปต์หรือภาษาเหล่านั้นที่มีความสามารถในการสร้างสคริปต์เช่น JavaScript และ Perl. mixins มีความโดดเด่นในการที่พวกเขากลายเป็นส่วนหนึ่งของคลาสย่อยในระหว่างการรวบรวมวิธีการและค่าคงที่ของพวกเขารวมอยู่ในคลาสย่อยลักษณะที่เป็นเอกลักษณ์ของคลาส Mixin คือวิธีการที่สามารถกำหนดและผูกพันกับวัตถุที่รันไทม์ภาษาส่วนใหญ่ใช้วิธีการที่แตกต่างการเชื่อมโยงและการกำหนดวิธีการในเวลาคอมไพล์มากกว่ารันไทม์การผูกมัดรันไทม์นี้ช่วยให้ mixins มีความยืดหยุ่นมาก

ปัญหาที่พบบ่อยในการสืบทอดหลายครั้งคือความคลุมเครือในการเรียกวิธีการและ mixins สามารถแก้ปัญหานี้ได้เพราะพวกเขาไม่ปฏิบัติตามกฎเดียวกันกับหลายมรดกตัวอย่างเช่นการสืบทอดหลายครั้งสามารถสร้างเพชรแห่งความตายที่เรียกว่าคลาสแม่มีคลาสย่อย B และ C และคลาส D สืบทอดมาจากทั้งคลาส B และ C ปัญหาในสถานการณ์นี้คือวิธีการที่มีเหมือนกันชื่อในคลาส A, B และ C ทั้งหมดสามารถสืบทอดได้ในคลาส D ทำให้หลายเวอร์ชันของวิธีเดียวกันโดยไม่มีความแตกต่างที่ชัดเจนMixins แก้ปัญหานี้โดยการรักษาวิธีการแต่ละรุ่นที่แตกต่างกันแทนที่จะพยายามเขียนทับพวกเขาเช่นเดียวกับในการสืบทอดหลายมรดก

mixins ไม่ได้แทนที่วิธีการในชั้นเรียนที่พวกเขาได้รับการสืบทอดตัวอย่างเช่นหากคลาส A กำหนดวิธีการ mymethod และสืบทอด mixin b ที่กำหนดวิธีการ mymethod วิธีการทั้งสองนี้ยังสามารถเรียกได้โดยไม่มีความกำกวมและการใช้ mymethod ในคลาส A จะยังคงสามารถเข้าถึงได้อย่างสมบูรณ์วิธีการเหล่านี้จะเรียกว่าวิธีการเหล่านี้ขึ้นอยู่กับภาษาที่มีการใช้งาน mixin

ภาษาการเขียนโปรแกรมบางภาษาที่ไม่ใช้ mixins เช่น Java ใช้อินเทอร์เฟซเพื่อเลียนแบบพวกเขาอินเทอร์เฟซในภาษาเหล่านี้ไม่ได้เลียนแบบการทำงานเต็มรูปแบบของ mixins เนื่องจากอินเตอร์เฟสสามารถมีค่าคงที่และการประกาศวิธีการเท่านั้นในทางกลับกัน Mixins สามารถมีการใช้วิธีการเต็มรูปแบบภาษาเหล่านั้นที่ไม่สนับสนุน Mixins มักจะมีทางเลือกที่ทำงานได้ซึ่งสามารถเกลี้ยกล่อมให้ทำสิ่งเดียวกันได้ประมาณ