متى يتم استخدام التفويض بدلا من الميراث؟[مغلق]

StackOverflow https://stackoverflow.com/questions/832536

  •  07-07-2019
  •  | 
  •  

سؤال

هل يمكن لأحد أن يشرح لي متى أرغب في استخدام التفويض بدلاً من الميراث؟

هل كانت مفيدة؟

المحلول

عندما تريد "نسخ"/كشف واجهة برمجة التطبيقات للفئة الأساسية، فإنك تستخدم الميراث.عندما تريد فقط "نسخ" الوظيفة، استخدم التفويض.

أحد الأمثلة على ذلك:تريد إنشاء مكدس من القائمة.المكدس يحتوي فقط على البوب ​​والدفع والنظرة الخاطفة.لا يجب عليك استخدام الوراثة نظرًا لأنك لا تريد وظائف Push_back وpush_front وremoveAt وما إلى ذلك في المكدس.

نصائح أخرى

لا علاقة لهم ببعضهم البعض. التفويض هو سلوك. الميراث هو تقنية نموذج.

الميراث هو النمذجة "IS-A". جهاز كمبيوتر "IS-A".

التفويض هو كيف توفر الأساليب النتائج. في بعض الأحيان ، يقوم كائن واحد بتفويض العمل إلى كائن آخر. يمكن أن يكون التفويض عن طريق أي علاقة - يمكنك التفويض إلى فئة فائقة ، إلى عضو في مركب أو إجمالي ، أو أي علاقة.

يمكنك استخدام التفويض إلى مثيلات فئة داخلية متعددة لتبسيط وظائفها في تجميع مشترك. إذا كانت لغتك لا تنفذ ميراثًا متعدد على سبيل المثال ، فقد ترث من إحدى القواعد ولف الآخر ، وتفويض الوظائف التي تريد تعريضها للتنفيذ الأساسي. يربط الميراث أيضًا صفك في التسلسل الهرمي للصفوف التي ترثها من حيث يمكنك الحفاظ على مكانك في التسلسل الهرمي الخاص بك وتفويض المكالمات إلى أخرى.

افترض أن الفصل الخاص بك يسمى B ويطلق على الفوضى المشتقة إلى الفصل أ.

فيما يلي بعض الأمثلة عند استخدام الميراث أو التفويض:
إذا

  • تريد التعبير عن العلاقة (IS-A) ثم تريد استخدام الميراث.
  • تريد أن تكون قادرًا على تمرير فصلك إلى واجهة برمجة تطبيقات موجودة تتوقع A ثم تحتاج إلى استخدام الميراث.
  • تريد تعزيز A ، ولكن A نهائي ولا يمكن أن يتم فئاته الفرعية ، ثم تحتاج إلى استخدام التكوين والتفويض.

في رأيي ، يمكن استدعاء التفويض عندما يحين وقت الاستخدام والميراث مضمنًا على الإطلاق.

يأخذ الجوهرة in_threads على سبيل المثال ، يستخدم Inthreads Pepepator لتنفيذ مؤشرات الترابط لأي وحدة Ruby Enumerable. مع هذا ، فقط اتصل على أساليب in_threads على صفيف ، وسيتم تشغيله في مؤشرات الترابط.

وأنا أتفق مع anzurio. فقط لشرح ذلك بكلمات بسيطة:

استخدم الميراث فقط عندما تشعر أن الفئة الجديدة هي امتداد طبيعي للفئة الحالية. تفضل استخدام التكوين/التفويض لجميع الأغراض الأخرى مثل استخدام طريقة محددة ، إلخ.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top