خلط Mixin  في لغات البرمجة كائنية التوجه، Mixin (أو mixin) هو صنف (حوسبة) class، الذي يحتوي على طرق methods لاستخدامها من قبل اصناف (classes) أخرى دون أن تكون الصنف الأصل (parent class) من تلك الفئات الأخرى. تعتمد كيفية وصول تلك الفصول الأخرى إلى أساليب mixin على اللغة. يوصف mixin في بعض الأحيان بأنه «مدرج» "included" بدلاً من «موروث» "inherited".  يشجع Mixins على إعادة استخدام الكود، ويمكن استخدامه لتجنب غموض الميراث الذي يمكن أن يسببه الميراث المتعدد («مشكلة الماس»"")، أو للتغلب على عدم دعم الميراث المتعدد في اللغة. يمكن أيضًا اعتبار المزيج كواجهة مع الطرق المنفذة . هذا النمط pattern هو مثال لفرض مبدأ انعكاس التبعية .   ظهر Mixins لأول مرة في نظام Flavors الموجهة للكائنات في Symbolics - تم تطويره بواسطة Howard Cannon-، والذي كان نهجًا في اتجاه الكائن المستخدم في Lisp Machine Lisp. الاسم مستوحى من صالون Steve's Ice Cream Parlour في Somerville، ماساتشوستس: قدم صاحب متجر الآيس كريم نكهة أساسية من الآيس كريم (الفانيليا والشوكولاتة، وما إلى ذلك) وتم خلطه مع مزيج من العناصر الإضافية (المكسرات، الكوكيز، حلوى، وما إلى ذلك) ويسمى هذا البند على «مزيج»""، له عبارة علامة تجارية خاصة في ذلك الوقت.  Mixins هي مفهوم لغوي يسمح للمبرمج بحقن بعض التعليمات البرمجية في صنف (حوسبة) . برمجة Mixin هي نمط من تطوير البرمجيات، حيث يتم إنشاء وحدات الوظائف في صنف ثم يتم مزجها مع اصناف أخرى.  يعمل صنف mixin كفئة رئيسية، وتحتوي على الوظيفة المطلوبة. يمكن لصنف فرعي أن ترث أو تعيد استخدام هذه الوظيفة، ولكن ليس كوسيلة للتخصص. عادةً، يقوم المزيج بتصدير الوظيفة المطلوبة إلى صنف فرعي، دون إنشاء علاقة مفردة جامدة «هل هي»"is a". هنا يكمن الاختلاف المهم بين مفاهيم الخلط والميراث، في أنه لا يزال بإمكان الصنف الفرعي أن يرث جميع ميزات الصنف الاصل parent class، ولكن، الدلالات عن الفرع «كونه نوعًا»"being a kind of" من الاصل parent لا تحتاج بالضرورة إلى تطبيقها.   في Simula، يتم تعريف classes في block يتم فيها تحديد السمات attributes و methods و class initialization معًا؛ وبالتالي يتم تعريف جميع الmethods التي يمكن استدعاؤها في فئة معًا، ويتم استكمال تعريف defined الصنف class.  في Flavours، المزيج mixin هو class يمكن أن يرث من class اخر ال slot definitions and methods. لا يحتوي الخليط mixin عادة على كائنات مباشرة direct instances. بما أن Flavor يمكن أن ترث من أكثر من Flavor أخرى، يمكن أن ترث من واحد أو أكثر من mixins. لاحظ أن Flavors الأصلية لم تستخدم وظائف عامة generic functions..  في Flavors الجديدة (خليفة النكهات) و CLOS، يتم تنظيم الأساليب في «وظائف عامة»"". هذه الدوال العامة generic functions هي وظائف يتم تعريفها في حالات (methods) متعددة عن طريق class dispatch و method combinations.  CLOS و Flavours تسمح mixin methods بإضافة سلوك methodsالحالية codice_1 و codice_2، اdaemons الهوامش whoppers والأغلفة wrappers wrapper or a whopper في Flavors. تمت إضافة CLOS codice_3 methods والقدرة على استدعاء الطرق المظللة shadowed methods عبر . لذلك، على سبيل المثال، يمكن أن يضيف دفق قفل mixin قفلًاstream-lock-mixin حول methods الحالية classstream. في Flavours، يمكن للمرء أن يكتب غلافًا أو ووبرًا وفي CLOS سيستخدم طريقة codice_3. يسمح كل من CLOS و Flavours بإعادة الاستخدام المحوسب من خلال تركيبات الطريقة. codice_1 و codice_2 و codice_3 method هي ميزة لمجموعة الطرق القياسية. يتم توفير تركيبات طريقة أخرى.  مثال على ذلك هو مزيج codice_8 الطريقة، حيث يتم إضافة القيم الناتجة لكل من الأساليب القابلة للتطبيق لوظيفة عامة حسابيًا لحساب القيمة المرتجعة. يتم استخدام هذا، على سبيل المثال، مع mixin mixin للكائنات الرسومية. قد يكون للكائن الرسومي دالة عرض عامة. سيضيف mixin الحد إطارًا حول كائن ولديه طريقة حساب عرضه. سيحدد codice_9 جديد codice_9 codice_11 حدية للفئة (وهو عبارة عن كائن رسومي ويستخدم مزيج codice_11) عرضه عن طريق استدعاء جميع طرق العرض القابلة للتطبيق عبر تركيبة codice_8 الطريقة. تتم إضافة جميع قيم الإرجاع وإنشاء العرض المدمج للكائن.  في ورقة OOPSLA 90، يعيد كل من جلعاد براخا وويليام كوك تفسير آليات الميراث المختلفة الموجودة في Smalltalk و Beta و CLOS كأشكال خاصة من ميراث المزج.  بخلاف Flavours و CLOS (جزء من Common Lisp)، بعض اللغات التي تستخدم mixins هي:   لا تدعم بعض اللغات mixins على مستوى اللغة، ولكن يمكن بسهولة تقليدها عن طريق نسخ الأوامر من كائن إلى آخر في وقت التشغيل، وبالتالي «استعارة» طرق mixin. هذا ممكن أيضًا مع اللغات المكتوبة بشكل ثابت، ولكنه يتطلب إنشاء كائن جديد مع مجموعة موسعة من الأساليب.  يمكن للغات الأخرى التي لا تدعم mixins دعمها بطريقة مستديرة عبر تركيبات لغة أخرى. C # وVisual Basic. يدعم NET إضافة طرق التمديد على الواجهات، مما يعني أن أي فئة تطبق واجهة مع طرق التمديد المحددة سيكون لها طرق التمديد المتاحة كأعضاء زائفين.  يوفر Common Lisp مزيجًا في CLOS (نظام كائن Lisp المشترك) مشابهًا للنكهات.  codice_14 هو دالة عامة مع وسيطة واحدة تستخدم تركيبة طريقة codice_8. تحدد هذه التركيبة أنه سيتم استدعاء جميع الطرق القابلة للتطبيق لوظيفة عامة وستتم إضافة النتائج. codice_16 فئة مع فتحة واحدة لنص الزر. هناك طريقة لكائنات زر الفئة التي تحسب العرض بناءً على طول نص الزر. codice_8 هو مؤهل الطريقة لمجموعة الطريقة التي تحمل نفس الاسم. فئة codice_18. التسمية مجرد اتفاقية. لا توجد فائقين، ولا فتحات.  هناك طريقة لحساب عرض الحدود. هنا فقط 4.  codice_9 هي فئة يرث من كل من codice_18 و codice_16.  يمكننا الآن حساب عرض الزر. استدعاء codice_14 يحسب 80. والنتيجة هي نتيجة الطريقة المنطبقة الوحيدة: طريقة codice_14 codice_16 الفئة. يمكننا أيضًا حساب عرض codice_9. استدعاء codice_14 يحسب 84. والنتيجة هي مجموع نتائج الطريقتين الساريتين: codice_14 الأسلوب codice_16 الفئة وعرض codice_14 الأسلوب codice_18 الفئة.   في بيثون، و codice_31 حدة لديه على حد سواء codice_32 الطبقة و codice_33 الصف. تعمل كخوادم لخوادم UDP وTCP socket، على التوالي. بالإضافة إلى ذلك، هناك فئتان من mixin: codice_34 و codice_35. عادة، يتم التعامل مع جميع الاتصالات الجديدة في نفس العملية. عن طريق توسيع codice_33 باستخدام codice_35 كما يلي: تضيف فئة codice_35 وظائف إلى خادم TCP بحيث يقوم كل اتصال جديد بإنشاء مؤشر ترابط جديد. باستخدام نفس الطريقة، يمكن إنشاء codice_39 دون الحاجة إلى تكرار التعليمات البرمجية في codice_35. وبدلاً من ذلك، فإن استخدام codice_34 سيؤدي إلى تفرع العملية لكل اتصال جديد. من الواضح أن وظيفة إنشاء خيط جديد أو شوكة عملية ليست مفيدة بشكل كبير كفئة مستقلة.  في مثال الاستخدام هذا، توفر المزج وظائف أساسية بديلة دون التأثير على الوظيفة كخادم مأخذ.  يعتمد معظم عالم روبي على مزيج من خلال codice_42. يتم تطبيق مفهوم mixins في Ruby من خلال codice_43 الكلمة الرئيسية التي نمرر عليها اسم الوحدة كمعلمة.  مثال:   الكائن الحرفي codice_44 النهج | The Object-Literal and codice_44 Approach  من الممكن تقنيًا إضافة سلوك إلى كائن من خلال ربطbinding الوظائف بالمفاتيح الموجودة في الكائنobject. ومع ذلك، فإن عدم الفصل بين الحالة والسلوك له عيوب:   يتم استخدام دالة التمديدextend function لخلط السلوك في: امزج Mixin باستخدام ()Object.assign الوظيفة النقية والتفويض القائم "على نهج خلط الطيران Flight-Mixin"  على الرغم من أن النهج الموصوف أولاً منتشر في الغالب، فإن النهج التالي أقرب إلى ما يقدمه جوهر لغة جافا سكريبت بشكل أساسي - التفويض.  هناك نوعان من أنماط الوظائف الوظيفية يقومان بالفعل بالخدعة دون الحاجة إلى تنفيذ طرف ثالث codice_44.   في لغة محتوى الويب Curl، يتم استخدام الوراثة المتعددة كاصناف classes مع عدم وجود كائنات قد تنفذ طرقًاmethods. وتشمل mixins المشتركة عن سكينبل codice_47 الصورة وراثة من codice_48، وكائنات واجهة المستخدم المفوضuser interface delegate التي تتطلب القوائم المنسدلة dropdown menus وراثة من StandardBaseDropdownUI classوهذا اسمه صراحة خلطmixin كما codice_49، codice_50 و codice_51 الاصناف classes. أضاف الإصدار 7.0 إمكانية الوصول إلى المكتبة بحيث لا يحتاج المزيج إلى أن يكون في نفس الحزمة أو أن يكون مجرد ملخص عام. يُعد مُنشئو التمويجات المصانع التي تسهل استخدام الوراثة المتعددة multiple-inheritanceدون التصريح الصريح interfaces or mixinsبالواجهات أو الخلطات.   تقدم Java 8 ميزة جديدة في شكل طرق افتراضية للواجهاتdefault methods for interfaces. بشكل أساسي، يسمح بتعريف طريقة method في واجهة interface مع تطبيق في السيناريو عند إضافة طريقة طريقةmethod جديدة إلى واجهة interface بعد الانتهاء من إعداد برمجة صنف الواجهة interface class. إن إضافة وظيفة جديدة إلى الواجهة تعني تنفيذ الطريقة method في كل صنف class تستخدم الواجهة interface. تساعد الطرق الافتراضية Default methods في هذه الحالة حيث يمكن تقديمها إلى واجهة interface في أي وقت ولها بنية منفذة يتم استخدامها بعد ذلك من قبل الاصناف المرتبطة associated classes. ومن ثم تضيف الطرق الافتراضية default methodsإمكانية لتطبيق المفهوم بطريقة من النوع المختلطmixin.  يمكن للواجهاتInterfaces المدمجة مع البرمجة الموجهة إلى الجوانب أن تنتج أيضًا مزيجًا متكاملًا باللغات التي تدعم هذه الميزات، مثل C # أو Java. بالإضافة إلى ذلك، من خلال استخدام نمط واجهة العلامة والبرمجة العامة , , وطرق التمديدextension methods، فإن C # 3.0 لديه القدرة على محاكاة الخلطات. مع الإصدار 3.0 من C #، تم تقديم طرق التمديدExtension Methods [2] ويمكن تطبيقها، ليس فقط على الاصناف classes ولكن أيضًا على الواجهاتclasses. توفر طرق التمديدExtension Methods وظائف إضافية في فصل دراسي موجود بدون تعديل الصنف. ثم يصبح من الممكن إنشاء فئة مساعد ثابتة static helper classلوظائف محددة تحدد طرق التمديدextension methods. نظرًا لأن الاصناف تطبق الواجهة (حتى إذا لم تحتوي الواجهة الفعلية على أي طرق أو خصائص لتطبيقها)، فستلتقط جميع طرق الامتداد أيضًا.  لا يحتاج ECMAScript (في معظم الحالات التي يتم تنفيذها كجافا سكريبت) إلى محاكاة تكوين الكائن عن طريق نسخ الحقول تدريجيًا من كائن إلى آخر. وهو يدعم في الأساس خاصية Trait و mixin تعتمد على تكوين العناصر عبر الكائنات الوظيفية التي تنفذ سلوكًا إضافيًا ثم يتم تفويضها عبر codice_52 أو codice_53 على الكائنات التي تحتاج إلى مثل هذه الوظائف الجديدة.  سكالا لديها نظام غني من النوع والسماتtype system and Traits جزء منه مما يساعد على تنفيذ سلوك الخلطmixin. كما يظهر اسمها، يتم استخدام Traits السمات عادة لتمثيل ميزة أو سمة مميزة عادة ما تكون متعامدة مع مسؤولية نوع ملموس أو على الأقل في حالة معينة. على سبيل المثال، تم تصميم القدرة على الغناء على أنها سمة متعامدة: يمكن تطبيقها على الطيور والأشخاص وما إلى ذلك. هنا، اختلط Bird في جميع طرقmethods السمة trait في تعريفه الخاص كما لو كانت صنف Bird قد حددت طريقة الغناء () بمفردها.  كما codice_54 يستخدم أيضا ليرث من صنفsuper class، إذا لم يرق أي صنف superclass في حالة استخدام trait سمة codice_54 وفقط لmixin في سمة traitالأولى. يتم خلط جميع السمات التالية في استخدام الكلمة الأساسية codice_56. Scala يسمح بالاختلاط في سمة trait (إنشاء نوع مجهول) عند إنشاء كائن جديد لصنف instance of a class. في حالة كائن من صنف الشخص، لا يمكن لجميع الكائنات الغناءsing. هذه الميزة تأتي ثم استخدام:   يمكن تحقيق Mixin في Swift باستخدام ميزة لغة تسمى التنفيذ الافتراضي في ملحق البروتوكولProtocol Extension.