أنواع الوراثة في لغة ++ C ما الذي يجب أن تعرفه؟
نشرت: 2023-04-05هل تساءلت يومًا كيف يتم إنشاء بعض أنظمة البرامج الشائعة؟ كل ذلك بفضل آلية قوية تسمى الوراثة في البرمجة الشيئية (OOP). يسمح الوراثة للمبرمجين بإنشاء فئات جديدة مبنية على الفئات الموجودة ، مما يتيح إعادة استخدام الكود وتطوير البرامج بكفاءة. تخيل أنك تبني نظامًا يتطلب عدة فئات ، كل منها تشترك في بعض السمات والسلوكيات المشتركة.
بدلاً من كتابة نفس الرمز بشكل متكرر ، يمكنك استخدام الوراثة لإنشاء فئة أساسية واشتقاق فئات جديدة منها ، مما يوفر لك الوقت والجهد.
الوراثة ليست فعالة فقط ولكنها متعددة الاستخدامات أيضًا. في لغة ++ C ، هناك عدة أنواع من الميراث ، ولكل منها مزايا فريدة وحالات استخدام.
في هذه المقالة ، سنلقي نظرة كاملة على الأنواع المختلفة للميراث في C ++ ، مع توفير الرموز ذات الصلة ، والشروحات وأمثلة من الحياة الواقعية في جميع أنحاء المقالة.
جدول المحتويات
أنواع الوراثة المختلفة في C ++
تقدم لغة البرمجة C ++ خمسة أنواع مختلفة من خيارات الوراثة لمبرمجيها. اعتمادًا على السياق والمتطلبات ، يمكن للمطورين والمبرمجين العمل مع أي من هذه الأنواع من الميراث.
الميراث الواحد
الوراثة المنفردة هي أكثر أنواع الوراثة شيوعًا في لغة ++ C. في الوراثة الفردية ، ترث الفئة المشتقة من فئة أساسية واحدة. هذا يعني أن الفئة ترث جميع أعضاء البيانات العامة والمحمية ووظائف الأعضاء من الفئة الأساسية مع القدرة على إضافة أعضاء البيانات الخاصة بها ووظائف الأعضاء.
تحقق من مقتطف الشفرة أدناه للحصول على بنية وفهم الميراث الفردي:
// الفئة الأساسية
فئة الحيوان {
عام:
أكل باطل () {
std :: cout << "الحيوان يأكل" << std :: endl؛
}
} ؛
// فئة مشتقة
فئة الكلب: حيوان عام {
عام:
لحاء باطل () {
الأمراض المنقولة جنسيا :: cout << "الكلب ينبح" << std :: endl؛
}
} ؛
في هذا المثال ، لدينا فئة أساسية تسمى Animal مع وظيفة عضو واحد eat ().ثم نقوم بتعريف فئة مشتقة منالكلب والتي ترث علنًا من Animal. لدىالكلب أيضًا وظيفة عضويته الخاصة النباح ().باستخدام الميراث الفردي ، يمكنللكلب الوصول إلى وظيفة الأكل ()لفئةالحيواناتوإضافة سلوكها الخاص معوظيفة اللحاء ().
متى تستخدم الوراثة الفردية في C ++
يمكن للمبرمجين استخدام الوراثة الفردية لإنشاء فئة مشتقة تضيف وظائف إلى الفئة الأساسية.
على سبيل المثال ، يمكنك استخدام الميراث الفردي عند إنشاء لعبة تتضمن شخصيات مختلفة ، مثل المحاربين والسحرة والرماة. تشترك كل هذه الشخصيات في بعض السمات والسلوكيات الشائعة ، مثل النقاط الصحية وقوة الهجوم وسرعة الحركة. باستخدام الوراثة الفردية ، يمكنك إنشاء فئة أساسية تسمى الحرف تحتوي على السمات والسلوكيات المشتركة واشتقاق كل فئة حرف منها لإضافة وظائفها الفريدة.
في الوراثة المتعددة ، يمكن لفئة مشتقة واحدة أن ترث من عدة فئات أساسية. هذا يعني أنه يمكن للفصل أن يحتوي على أكثر من فصل أصلي مباشر. نتيجة لذلك ، ترث الفئة المشتقة جميع أعضاء البيانات العامة والمحمية ووظائف الأعضاء لكل فئة أساسية.
فيما يلي مثال على الميراث المتعدد:
// الفئة الأساسية 1
شكل الفصل {
عام:
منطقة مزدوجة افتراضية () = 0 ؛
} ؛
// الفئة الأساسية 2
لون الصف {
عام:
الظاهري std :: string getColor () = 0 ؛
} ؛
// فئة مشتقة
فئة مستطيل: الشكل العام واللون العام {
عام:
منطقة مزدوجة () تجاوز {
عرض الإرجاع * الارتفاع ؛
}
std :: string getColor () تجاوز {
عودة اللون
}
خاص:
عرض مزدوج = 5.0 ؛
ارتفاع مزدوج = 3.0 ؛
std :: string color = "blue" ؛
} ؛
في هذا المثال ، لدينا فئتان أساسيتان ، الشكل واللون ، لكل منهما وظيفته الافتراضية.ثم نحدد فئةمستطيلة مشتقة ترث من كل من الشكل واللون.يتجاوزالمستطيل الوظائف الافتراضية لكلا الفئتين الأساسيتين لتوفير التنفيذ الخاص به.باستخدام الوراثة المتعددة ،يمكن أن يرث المستطيلخصائص كل من الفئات الأساسية ،الشكلواللون ، لإنشاء مستطيل بلون ومساحة محددين.
متى تستخدم الوراثة المتعددة في C ++
استخدم وراثة متعددة عندما تريد دمج الوظائف من فئات أساسية متعددة. على سبيل المثال ، ضع في اعتبارك تطبيق واجهة المستخدم الرسومية الذي يتطلب أنواعًا مختلفة من عناصر التحكم ، مثل الأزرار ومربعات الاختيار ومربعات النص. لكل نوع عنصر تحكم وظيفته وسلوكه ، لكنهما يشتركان أيضًا في بعض الوظائف الشائعة ، مثل التعامل مع أحداث المستخدم وعرض النص.
باستخدام الوراثة المتعددة ، يمكنك إنشاء فئة أساسية تسمىالتحكم تحتوي على الوظيفة العامة ، واشتقاق كل نوع عنصر تحكم منها ، بالإضافة إلى الفئات الأساسية الأخرى التي تحتوي على وظائفها المحددة.
في الوراثة الهرمية ، يتم توريث فئة أساسية واحدة بواسطة فئات مشتقة متعددة. مثل الوراثة المتعددة ، تحصل الفئات المشتقة في الوراثة الهرمية على جميع أعضاء البيانات العامة والمحمية ووظائف الأعضاء في الفئة الأساسية.
إليك مقتطف التعليمات البرمجية لمساعدتك في فهم تنفيذ التوريث الهرمي في C ++:
// الفئة الأساسية
فئة الحيوان {
عام:
makeSound الفراغ الظاهري () = 0 ؛
} ؛
// مشتقة من الدرجة 1
فئة القط: الحيوانات العامة {
عام:
تجاوز makeSound () باطل {
std :: cout << “Meow” << std :: endl؛
}
} ؛
// مشتقة من الدرجة 2
فئة الكلب: حيوان عام {
عام:
تجاوز makeSound () باطل {
std :: cout << “Woof” << std :: endl؛
}
} ؛
في هذا المثال ، لدينا فئة أساسية تسمى Animal مع وظيفة افتراضية makeSound ().ثم نحدد فئتين مشتقتين ،القطوالكلب ، وكلاهما يرث منالحيوان. تتجاوز كل فئة مشتقة وظيفةmakeSound () لتوفير التنفيذ الخاص بها.باستخدام الميراث الهرمي ، يمكننا إنشاء أنواع مختلفة من الحيوانات تشترك في سلوكيات مشتركة ، مثل إصدار صوت.
متى تستخدم الوراثة الهرمية في C ++
استخدم التوريث الهرمي عندما تريد إنشاء فئات مشتقة متعددة تشترك في وظائف مشتركة. على سبيل المثال ، ضع في اعتبارك تطبيقًا مصرفيًا يتطلب أنواعًا مختلفة من الحسابات ، مثل حسابات التوفير وحسابات التحقق وحسابات بطاقات الائتمان. تشترك جميع أنواع الحسابات هذه في بعض السمات والسلوكيات الشائعة ، مثل رقم الحساب والرصيد ومعدل الفائدة.
باستخدام التوريث الهرمي ، يمكنك إنشاء فئة أساسية تسمى الحساب تحتوي على السمات والسلوكيات العامة واشتقاق كل نوع حساب منه لإضافة وظائفه الفريدة.
الوراثة متعددة المستويات
الوراثة متعددة المستويات في C ++ هي نوع من الوراثة حيث يتم توريث فئة مشتقة بواسطة فئة مشتقة أخرى. في هذا السيناريو ، ترث الفئة المشتقة جميع أعضاء البيانات العامة والمحمية ووظائف الأعضاء لفئتها الأصلية المباشرة ، والتي بدورها ترث من صنفها الأصلي ، وما إلى ذلك.
إليك كيفية تنفيذ الوراثة متعددة المستويات برمجيًا في C ++:
// الفئة الأساسية
فئة مركبة {
عام:
بداية باطلة () {
std :: cout << “السيارة قيد التشغيل” << std :: endl؛
}
} ؛
// متوسط الدرجة
فئة السيارة: مركبة عامة {
عام:
محرك باطل () {
std :: cout << “السيارة تقود” << std :: endl؛
}
} ؛
// فئة مشتقة
class SportsCar: سيارة عامة {
عام:
تسريع باطل () {
std :: cout << "تسارع السيارة الرياضية" << std :: endl؛
}
} ؛
متى تستخدم الوراثة متعددة المستويات في C ++
استخدم الوراثة متعددة المستويات عندما تريد إنشاء فئة مشتقة ترث من فئة مشتقة أخرى وتضيف وظائفها. على سبيل المثال ، ضع في اعتبارك نظام برمجي يتطلب أنواعًا مختلفة من المركبات ، مثل السيارات والشاحنات والدراجات النارية. تشترك أنواع المركبات هذه في بعض السمات والسلوكيات الشائعة ، مثل السرعة والتسارع والفرملة.
باستخدام الوراثة متعددة المستويات ، يمكنك إنشاء فئة أساسية تسمى السيارة تحتوي على السمات والسلوكيات المشتركة واشتقاق فئات وسيطة مثل السيارة والشاحنةمنها لإضافة وظائفها المحددة. بعد ذلك ، يمكنك اشتقاقفئة SportsCar من فئة السياراتلإضافة وظائفها الفريدة.
الوراثة الهجينة هي مزيج من نوعين أو أكثر من أنواع الميراث. يشار إليها أيضًا باسم الوراثة الافتراضية ، وهي فئة مشتقة في الوراثة الهجينة من فئات أساسية متعددة ، بعضها موروث من خلال مسارات متعددة. يمكن أن يؤدي ذلك إلى إنشاء تسلسلات هرمية معقدة للوراثة ويمكن أن يكون من الصعب فهمها والحفاظ عليها.
تحقق مندورات تطوير البرمجياتupGradلتطوير مهاراتك.
فيما يلي مثال على الوراثة الهجينة في C ++:
// الفئة الأساسية 1
فئة الحيوان {
عام:
makeSound الفراغ الظاهري () = 0 ؛
} ؛
// الفئة الأساسية 2
فئة CanFly {
عام:
طيران الفراغ الظاهري () = 0 ؛
} ؛
// الفئة الأساسية 3
فئة CanSwim {
عام:
السباحة الفراغية الافتراضية () = 0 ؛
} ؛
// فئة مشتقة
فئة الخفافيش: الحيوانات العامة ، CanFly العامة {
عام:
تجاوز makeSound () باطل {
الأمراض المنقولة جنسيا :: cout << “صراخ!”<< std :: endl؛
}
ذبابة باطلة () تجاوز {
std :: cout << “Bat is fly” << std :: endl؛
}
} ؛
// فئة مشتقة
فئة البطريق: الحيوانات العامة ، CanSwim العامة {
عام:
تجاوز makeSound () باطل {
std :: cout << “Hooonk!”<< std :: endl؛
}
السباحة الباطلة () تجاوز {
std :: cout << "البطريق يسبح" << std :: endl؛
}
} ؛
استكشف دوراتنا التدريبية الشهيرة في هندسة البرمجيات
ماجستير العلوم في علوم الكمبيوتر من جامعة جون مورس بليفربول و IIITB | برنامج شهادة الأمن السيبراني من معهد كاليفورنيا للتكنولوجيا CTME |
برنامج تدريب تطوير المكدس الكامل | برنامج PG في Blockchain |
برنامج PG التنفيذي في تطوير Full Stack | |
عرض جميع دوراتنا أدناه | |
دورات هندسة البرمجيات |
متى تستخدم الوراثة المختلطة في C ++
بالإضافة إلى الأنواع الأربعة للميراث التي تمت مناقشتها سابقًا ، يمكن أن تكون الوراثة المختلطة مفيدة في سيناريوهات معينة تتطلب أنواعًا متعددة من الميراث. استخدم الميراث المختلط للجمع بين فوائد أنواع الوراثة المتعددة.
على سبيل المثال ، فكر في نظام برمجي يتطلب أنواعًا مختلفة من الحيوانات ، بعضها يمكنه الطيران بينما يمكن للآخرين السباحة. يمكنك استخدام الوراثة المختلطة لإنشاء فئة أساسية تسمى Animal واشتقاق فئتين وسيطتين ، CanFlyوCanSwim، منها. أخيرًا ، باستخدام الوراثة الهجينة ، يمكنك اشتقاق فئتيBat و Penguinمن كلا الفئتين الوسيطة. سترث فئةالخفافيش من AnimalوCanFly، بينما ترث فئةPenguinمنAnimalوCanSwim. بهذه الطريقة ، يمكنك إنشاء أنواع مختلفة من الحيوانات بتوليفات فريدة من القدرات.
يمكن أن تكون الوراثة الهجينة في C ++ مفيدة في أنظمة البرامج المعقدة التي تتطلب أنواعًا متعددة من الوراثة. ومع ذلك ، يمكن أيضًا إنشاء تسلسلات هرمية وراثية معقدة يمكن أن يكون من الصعب فهمها والحفاظ عليها. كما هو الحال مع الأنواع الأخرى من الميراث ، يعد اختيار النوع المناسب لمتطلبات مشروع تطوير البرامج وأهداف التصميم الخاصة بك أمرًا بالغ الأهمية.
اقرأ مقالاتنا الشهيرة المتعلقة بتطوير البرمجيات
تحقق مندوراتنا التكنولوجية المجانية لتتفوق على المنافسة.
أمور مهمة يجب مراعاتها عند استخدام الميراث:
في حين أن الوراثة هي آلية قوية في C ++ ، إلا أن لها أيضًا بعض العوامل التي يجب مراعاتها عند التنفيذ.
- تجنب التسلسلات الهرمية للوراثة العميقة : يمكن أن تؤدي التدرجات الهرمية للوراثة العميقة إلى تعليمات برمجية يصعب قراءتها وفهمها وصيانتها.حافظ على التسلسلات الهرمية للميراث ضحلة قدر الإمكان لتحسين قابلية قراءة الكود وقابلية صيانته.
- استخدم معدِّلات الوصول بحكمة: تتحكم معدِّلات الوصول (العامة والمحمية والخاصة) في رؤية أعضاء البيانات ووظائف الأعضاء في الفصل الدراسي.استخدمها بحكمة لتجنب الكشف عن تفاصيل التنفيذ التي يجب ألا تكون مرئية خارج الفصل.
- تجنب الميراث الماسي: تحدث وراثة الماس عندما ترث فئة من فئتين ترثان من نفس الفئة الأساسية.يمكن أن يؤدي هذا إلى الغموض ومن الأفضل تجنبه بشكل عام.
- تجنب الإفراط في استخدام الميراث: في حين أن الوراثة يمكن أن تكون مفيدة ، من المهم تجنب الإفراط في استخدامها.في بعض الحالات ، قد يكون التركيب أو أنماط التصميم الأخرى خيارًا أفضل.
استكشف دوراتنا المجانية في تطوير البرمجيات
أساسيات الحوسبة السحابية | أساسيات JavaScript من البداية | هياكل البيانات والخوارزميات |
تقنية Blockchain | رد فعل للمبتدئين | أساسيات Java الأساسية |
جافا | Node.js للمبتدئين | جافا سكريبت متقدم |
يبعد
للتلخيص ، يعد الوراثة مفهومًا مهمًا في برمجة C ++ يجب على كل طالب برمجة إتقانه. من خلال فهم الأنواع المختلفة للوراثة وحالات استخدامها ، يمكنك إنشاء كود فعال ومنظم وقابل للصيانة ، وبالتالي تصبح مطور برامج أفضل.
إذا وجدت هذه المقالة مثيرة للاهتمام ، فيمكنك زيادة تعزيز معرفتك بتطوير البرامج من خلال التسجيل في برنامج شهادة DevOps التابع لشركة upGrad والذي يتم تقديمه بالتعاون مع IIIT Bangalore. يغطي هذا البرنامج جوانب مختلفة من تطوير البرامج ، بما في ذلك الترميز والاختبار والنشر ، ويمكن أن يساعدك في أن تصبح مطور برامج ماهرًا في الصناعة.
لماذا تعتبر الوراثة مهمة في برمجة C ++؟
باستخدام الميراث ، يمكن للمبرمجين توفير الوقت والجهد في تطوير البرامج لبناء أنظمة برمجية معقدة بطريقة منظمة. نظرًا لأن المبرمجين يعملون على إنشاء أكواد أكثر قابلية للقراءة ، فإن عملية الترميز تبسط إلى متشعبات.
ما هي الأشياء المهمة التي يجب تذكرها عند استخدام الوراثة في برمجة C ++؟
عند استخدام الوراثة في برمجة C ++ ، من الضروري مراعاة بعض الأشياء الحاسمة ، مثل تجنب التسلسلات الهرمية للميراث العميقة ، واستخدام مُعدِّلات الوصول بحكمة ، وتجنب وراثة الماس ، وعدم الإفراط في استخدام الميراث.
ما نوع الميراث الذي يجب أن أستخدمه لمشروع تطوير البرامج الخاص بي؟
يعتمد اختيار النوع الصحيح للوراثة على متطلبات مشروع تطوير البرمجيات وأهداف التصميم الخاصة بك. يعتمد الاختيار من بين أنواع مختلفة من الميراث كليًا على متطلبات مشروعك. ومن ثم ، قم بإجراء تحليل مفصل قبل الشروع في ذلك.