Mixin คืออะไร

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

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

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

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

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