البرمجة الكائنية oop بدون وراثةٍ متعددة multiple inheritance تماماً كزوجةٍ مُتدينةٍ جميلةٍ و لكنها لا تُنجب؛ بالتأكيد وجودها أفضل بكثيرٍ جداً من عدم وجودها، و لكن لا يُمكنك أن تُنكر أنه لا أحد يرغب في البقاء بلا أبناء.
فهمي للوراثة المتعددة هو أن يكون هُناك أكثر من أب للكائن الواحد. والوراثة العادية هي أن يكون للكائن أب واحد فقط ويمكن أن نتحدر السلالة بفعل الوراثة إلى كائنات لها خصائص كثيرة.
بالفعل هذا صحيح. الوراثة المتعددة لها قوةٌ كبيرةٌ تضيع علي مستخدمي اللغات التي فيها وراثة أُحادية، و حتي الواجهات interfaces لا تستطيع محاكاة هذه القوة. و رغم أن لها مشاكلها الخاصة إلا أنها حيوية للغاية بالنسبة لي عند تصميم لغةٍ تحتوي إمكانيات البرمجة الكائنية.
الواجهات بالفعل افضل من الوراثة المتعددة ، وانا اقول لك لماذا :
الوراثة المتعددة تستخدم في اضافة الإمكانية للمتغيرات المرجعية من حمل كائنات من المستويات الوراثية العليا بغض النظر عن الأب .. فيكون جزء من الكائن يحمل صفات الأب الأول ، والجزء الأخر يحمل صفات الأب الثاني ..
مثال
لنفرض ان لدينا لعبة "البوكيمون" كل كائن "بوكيمون" يرث من ابوين هما "حيوان" و "إنسان" ،، الحيوان له خصائصه العدوانية والغرائزية وطريقة المشي وغيرها ،، والإنسان له خاصية التفكير واللغة والعقل والنطق ..
سيتكون لدينا بوكيمون يحمل نفس خصائص ابويه "الحيوان والإنسان" ..
فتارة نستطيع ان نعرّف متغيرًا من نوع انسان ونجعله يؤشر على كائن من نوع بوكيمون ،، وتارة نستطيع ان نعرّف متغيرًا من نوع حيوان ونجعله يؤشر نفس الكائن ..
ولكن الحل بإستخدام الواجهات هو . بالأمكان ان نعرف واجهات (إنسان ،، حيوان) ،، ثم نعرف فئة من نوع بوكيمون تقوم بتطبيق تلك الواجهات وبهذا نستطيع ان نعرف متغيرات مرجعية من نوع الواجهة (حيوان أو انسان) ونجعلها تؤشر على الكائن بوكيمون ...
لا أتخيل ان هناك مشكلة برمجية لن يتم حلها إلا بإستخدام الوراثة المتعددة ،، الأفضل هو التماشي مع الطبيعة وان يكون لكل انسان أب واحد فقط ولكن بإمكانه أن يتقمص (بالواجهات) اي طبيعة كينونية اخرى :)
فهمي للوراثة المتعددة هو أن يكون هُناك أكثر من أب للكائن الواحد. والوراثة العادية هي أن يكون للكائن أب واحد فقط ويمكن أن نتحدر السلالة بفعل الوراثة إلى كائنات لها خصائص كثيرة.
ردحذفبالفعل هذا صحيح.
ردحذفالوراثة المتعددة لها قوةٌ كبيرةٌ تضيع علي مستخدمي اللغات التي فيها وراثة أُحادية، و حتي الواجهات interfaces لا تستطيع محاكاة هذه القوة.
و رغم أن لها مشاكلها الخاصة إلا أنها حيوية للغاية بالنسبة لي عند تصميم لغةٍ تحتوي إمكانيات البرمجة الكائنية.
طيب كيف تغلبت على هذه المشكلة عند استخدامك للجافا وهي لاتدعم الوراثة المتعددة إلا بإستخدام الـ Interfaces وهي يمكن أن لا تُعتبر وراثة متعددة حقيقية
ردحذفأنا حتي الآن لم أقع في مثل هذه الورطة بحمد الله تعالي، لكن متي وقعتُ فيها فسأضطر لاستخدام الواجهات بكل أسف.
ردحذفالواجهات بالفعل افضل من الوراثة المتعددة ، وانا اقول لك لماذا :
ردحذفالوراثة المتعددة تستخدم في اضافة الإمكانية للمتغيرات المرجعية من حمل كائنات من المستويات الوراثية العليا بغض النظر عن الأب .. فيكون جزء من الكائن يحمل صفات الأب الأول ، والجزء الأخر يحمل صفات الأب الثاني ..
مثال
لنفرض ان لدينا لعبة "البوكيمون" كل كائن "بوكيمون" يرث من ابوين هما "حيوان" و "إنسان" ،، الحيوان له خصائصه العدوانية والغرائزية وطريقة المشي وغيرها ،، والإنسان له خاصية التفكير واللغة والعقل والنطق ..
سيتكون لدينا بوكيمون يحمل نفس خصائص ابويه "الحيوان والإنسان" ..
فتارة نستطيع ان نعرّف متغيرًا من نوع انسان ونجعله يؤشر على كائن من نوع بوكيمون ،، وتارة نستطيع ان نعرّف متغيرًا من نوع حيوان ونجعله يؤشر نفس الكائن ..
ولكن الحل بإستخدام الواجهات هو .
بالأمكان ان نعرف واجهات (إنسان ،، حيوان) ،، ثم نعرف فئة من نوع بوكيمون تقوم بتطبيق تلك الواجهات وبهذا نستطيع ان نعرف متغيرات مرجعية من نوع الواجهة (حيوان أو انسان) ونجعلها تؤشر على الكائن بوكيمون ...
لا أتخيل ان هناك مشكلة برمجية لن يتم حلها إلا بإستخدام الوراثة المتعددة ،، الأفضل هو التماشي مع الطبيعة وان يكون لكل انسان أب واحد فقط ولكن بإمكانه أن يتقمص (بالواجهات) اي طبيعة كينونية اخرى :)