المفاضلة بين الوراثة والتركيب
قارن بين الوراثة والتركيب، واختر الأداة المناسبة للتصميم.
المفاضلة بين الوراثة والتركيب درس مجاني في C++ Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في C++ Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة C++ Academy 4 دروس في المجموع.
طريقتان لإعادة استخدام الشيفرة
يمكنك إعادة استخدام الشيفرة عبر الوراثة من فئة أخرى، أو عبر تركيبها بوصفها عضوًا. ولكلتا الطريقتين استخداماتهما.
الوراثة: «هو نوع من»
استخدم الوراثة عندما تكون الفئة المشتقة فعلًا نوعًا خاصًا من الفئة الأساسية.
class Vehicle {};
class Car : public Vehicle {}; // a Car IS a Vehicle
class SportsCar : public Car {};التركيب: «يمتلك»
استخدم التركيب عندما تكون العلاقة «يمتلك» أو «يستخدم».
class Engine {};
class Car {
Engine engine_; // a Car HAS an Engine
};مفاضلة الاقتران
تنشئ الوراثة اقترانًا وثيقًا — إذ تعتمد الفئات المشتقة على تفاصيل الفئة الأساسية الداخلية. أما التركيب فيحافظ على استقلالية الوحدات، ويجعل تغييرها أسهل.
المرونة
يتيح التركيب تغيير السلوك وقت التشغيل — إذ يمكنك تبديل الكائن المركَّب. أما الوراثة فتربط السلوك وقت الترجمة.
class Logger {
std::unique_ptr<LogSink> sink_; // can swap implementations
public:
void setSink(std::unique_ptr<LogSink> s) { sink_ = std::move(s); }
};الاختبار
يمكن استبدال الكائنات المركَّبة بكائنات وهمية لأغراض الاختبار. أما الفئات الأساسية الموروثة فمن الأصعب إنشاء كائنات وهمية منها من دون دوال افتراضية أو قوالب.
مشكلة الفئة الأساسية الهشة
قد تؤدي التغييرات في الفئة الأساسية إلى كسر العديد من الفئات المشتقة. ويعزل التركيب التغيير داخل الفئة التي تستخدمه.
متى تختار الوراثة
تناسب الوراثة الحالات التالية:
- وجود علاقة واضحة من نوع «هو نوع من»
- الحاجة إلى تعدد الأشكال عبر واجهة أساسية
- كون الفئة الأساسية مصممة صراحةً للوراثة
متى تختار التركيب
يناسب التركيب الحالات التالية:
- رغبتك في مرونة تبديل التنفيذات
- كون العلاقة «يمتلك» أو «يستخدم»
- رغبتك في اقتران ضعيف واختبار أسهل
نمط Strategy
اجمع بين التركيب وتعدد الأشكال: خزّن مؤشّرًا إلى فئة أساسية يشير إلى كائن استراتيجية تركّبه الفئة المضيفة.
class Sorter {
std::unique_ptr<SortStrategy> strategy_;
public:
void sort(std::vector<int>& v) { strategy_->execute(v); }
};Mixins وفئات السياسات
للتخصيص وقت الترجمة، استخدم فئات سياسات قالبية — أي تركيبًا على مستوى النوع. إنها قوية ولا تضيف أي تكلفة وقت تشغيل.
الواجهة + التركيب
نمط حديث شائع: عرّف واجهة (فئة أساسية مجردة)، ثم ركّب فئات فعلية تنفذها. استخدم الوراثة للواجهة، والتركيب للتنفيذ.
تحقق سريع
أي نهج يمنح عمومًا مرونة أكبر واقترانًا أضعف؟
مراجعة
تمثّل الوراثة علاقة «هو نوع من»، بينما يمثّل التركيب علاقة «يمتلك». والتركيب أكثر مرونة وأقل اقترانًا، لذا فَضِّله لإعادة استخدام الشيفرة. استخدم الوراثة لتعدد الأشكال عبر واجهة، وغالبًا ادمجها مع تنفيذات مركَّبة.
الأسئلة الشائعة
هل درس «المفاضلة بين الوراثة والتركيب» مجاني؟
نعم — نص درس «المفاضلة بين الوراثة والتركيب» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة C++ Academy، انتقل إلى CoddyKit PRO. تتضمن دورة C++ Academy 4 دروس في المجموع.
ماذا ستتعلم في «المفاضلة بين الوراثة والتركيب»؟
قارن بين الوراثة والتركيب، واختر الأداة المناسبة للتصميم. تتمرن على C++ Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ C++ Academy؟
لا تُشترط خبرة سابقة. C++ Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «المفاضلة بين الوراثة والتركيب»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس C++ Academy هذا؟
نعم. كل درس في C++ Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الوراثة المفردة والمتعددة
- الدوال الافتراضية وvtable
- الأصناف المجرّدة والطرائق الافتراضية الخالصة
- المفاضلة بين الوراثة والتركيب