C ++: تجنب الصيانة المزدوجة في التسلسلات الهرمية الميراث
-
23-09-2019 - |
سؤال
عند إنشاء بنية وراثة C ++ ، يجب عليك تحديد وظائف الأعضاء كما هو بالضبط في أماكن متعددة:
إذا كانت B عبارة عن فئة أساسية مجردة ، و D و E و F جميعها ترث من B ، فقد يكون لديك هذا:
class B
{
virtual func A( ... params ) = 0;
};
class D : public B
{
func A( ... params );
};
/* ... etc... similar implementations for E and F */
لذلك ، من الواضح أن هناك بعض الازدواجية هنا. إذا كانت الواجهة إلى B كبيرة ، فقد يكون لديك العديد من الأماكن للتغيير إذا كانت الواجهة بحاجة إلى تغيير.
اقترح زميل في العمل بعض الخداع مع #includes تم إنشاؤه الحرفي ، ala:
class D: public B
{
#include "B_Interface.h" // B_Interface.h is a specially crafted .h file
}
هذا يبدو كلودجي قليلا؟ فعلا؟ هل هناك حل أفضل لتجنب الصيانة المزدوجة؟
أيضًا ، ربما يكون الحل هنا هو أدوات أفضل حقًا لدعم اللغة ، مثل Visual Assist X؟
تحرير: افترض أن الفئات المشتقة يجب أن يكون لها تطبيقات فريدة.
المحلول
في الواقع ، فإن أكبر مشكلة في تغيير الواجهة عادة ما تكون كل الشفرة الاستخدامات إنه ، وليس الكود الذي ينفذه. إذا كان من السهل تغييره للمنفذ ، فمن المحتمل أن يجعل الحياة أكثر صعوبة للمستخدمين.
نصائح أخرى
أنه من المؤلم تغيير الواجهة المستخدمة على نطاق واسع ليست خطأ ؛ إنها ميزة.
أيضًا ، ربما يكون الحل هنا هو أدوات أفضل حقًا لدعم اللغة ، مثل Visual Assist X؟
بالضبط. تغيير توقيعات الطريقة هو أ الميزة الرئيسية من أدوات إعادة التهيئة.
إذا كان عليك تنفيذها مرارًا وتكرارًا مع بعض السلوك الافتراضي ، فربما يجب أن تكون افتراضية وليست افتراضية خالصة.
بدلاً من استخدام المعالج المسبق بطريقة أخرى ، لا ينبغي استخدامها ، سأجرب المحرر الخاص بي (أو IDE ، إذا كان هذا هو ما تتخيله.)