وراثة متعددة
بدايةً، وراثة متعددة هو سمة من سمات بعض لغات البرمجة كائنية التوجه التي هي عبارة عن وراثة الكائن أو الصنف لخصائص وسمات من كائن أو أكثر من الكائنات الأصل أو الأصناف الأصل. وهي تختلف عن الوراثة الفردية، حيث قد يرث كائن أو صنف فقط من كائن أو صنف معين. وتعرض الأقسام التالية جوانب أخرى من الموضوع.
ومن جهة أخرى، لقد كان الميراث المتعدد مسألة حساسة لسنوات عديدة، حيث أشار المعارضون إلى زيادة تعقيدها وغموضها في حالات مثل «مشكلة الألماس» diamond problem، حيث قد تكون غامضة حول من أي صنف من الأصناف الأصل تورث الميزة معينة ما إذا كان هناك أكثر من صنف من الأصناف الأصل تنفذ الميزة المذكورة. يمكن معالجة ذلك بطرق مختلفة، بما في ذلك استخدام الوراثة الافتراضية. كما تم اقتراح طرق بديلة لتكوين الكائن لا تعتمد على الميراث مثل الخلطات والسمات لمعالجة الغموض.
مشكلة الألماس
علاوةً على ذلك، يطلق عليها «مشكلة الألماس» بسبب شكل مخطط وراثة الأصناف في هذه الحالة. لذلك، يكون الصنف A في الأعلى، كل من B و C بشكل منفصل تحتها، و D تربط الاثنين معًا في الأسفل لتشكيل شكل ألماسي.
ومن جهة أخرى، مثلًا، في سياق تطوير برامج واجهة المستعمل الرسومية، قد يرث Button الصنف من كلا الفئتين Rectangle (للمظهر) Clickable (للوظائف / معالجة الإدخال)، Rectangle Clickable من صنف Object . الآن إذا تم استدعاء طريقة equals لكائن Button وليس هناك مثل هذه الطريقة في صنف Button ولكن هناك طريقة equals متجاوزة في Rectangle أو Clickable (أو كليهما)، ما هي الطريقة التي يجب استدعاؤها في النهاية؟
من جهة ثانية، «مشكلة الماس» (يشار إليها أحيانًا باسم «الألماس المميت للموت» "Deadly Diamond of Death" ) هي غموض ينشأ عندما يرث صنفان B و C من A ، ويرث الصنف D من كل من B و C.إذا وُجدت الطريقة في A والتي تقوم في B و C بتجاوزها، وD لا يتجاوزها، ونتج عن ذلك السؤال التالي أي نسخة من الطريقة تلك يجب أن يرثها الصنف D: أن من B، أو أن من C؟
مخطط موجه
انظر كذلك
تعليمي حول استخدام الميراث في إيفل
دروس حول الاستخدام الفعال للميراث المتعدد في بيثون
📝 هل في هذه المقالة خطأ؟
إذا وجدت معلومة تحتاج تصحيحاً أو إضافة، أو أردت حذف المقالة، أرسل لنا طلباً وسنراجعه.
ما رأيك في هذه المقالة؟