موصى به, 2024

اختيار المحرر

الفرق بين الميراث وتعدد الأشكال

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

رسم بياني للمقارنة

أساس للمقارنةميراثتعدد الأشكال
الأساسيةوراثة إنشاء فئة جديدة باستخدام خصائص الطبقة الموجودة بالفعل.تعدد الأشكال هو في الأساس واجهة مشتركة لشكل متعدد.
التنفيذيتم تطبيق الميراث بشكل أساسي على الفصول الدراسية.يتم تنفيذ تعدد الأشكال أساسا على وظيفة / الأساليب.
استعماللدعم مفهوم reusability في OOP ويقلل من طول التعليمات البرمجية.يسمح الكائن بالبت في شكل الوظيفة المطلوب استدعاؤها عندما يكون وقت التجميع (التحميل الزائد) وكذلك وقت التشغيل (overriding).
إستماراتقد يكون الميراث ميراثًا واحدًا ، وراثة متعددة ، ووراثة متعددة المستويات ، وميراثًا هرميًا ، وميراثًا هجينًا.قد يكون تعدد الأشكال عبارة عن تعدد الأشكال وقت التجميع (التحميل الزائد) أو تعدد الأشكال وقت التشغيل (overriding).
مثاليمكن أن يرث "جدول" الصف ميزة "أثاث" الفصل ، لأن "الطاولة" هي "أثاث".يمكن أن يكون للصف الدراسي 'study_table' أيضًا وظيفة 'set_color ()' ويمكن أن يكون للفئة 'Dining_table' أيضًا وظيفة 'set_color ()' ، لذلك يمكن تحديد شكل الدالة set_color () التي يجب استدعاؤها في كل من وقت التجميع و وقت التشغيل.

تعريف الوراثة:

الميراث هو أحد الملامح الرئيسية لـ OOP ، والتي تدعم بقوة "إعادة الاستخدام". يمكن وصف إعادة الاستخدام على أنها إنشاء فئة جديدة من خلال إعادة استخدام خصائص الطبقة الموجودة. في الوراثة ، هناك فئة أساسية ، موروثة بالفئة المشتقة. عندما يرث فئة أي فئة أخرى ، يصبح عضو (أعضاء) الفئة الأساسية عضوًا (أعضاء) فئة مشتقة.

الشكل العام لوراثة الفصل الدراسي هو كما يلي:

 class-class-name class: access-specifier base-class-name {// body of the class}؛ 

هنا ، يوفر محدد الوصول وضع الوصول (خاص ، عام ، محمي) إلى العضو (الأعضاء) في الفئة الأساسية إلى الفئة المشتقة. في حالة عدم وجود محدد وصول ، يعتبر بشكل افتراضي "خاص". في C ++ ، إذا كانت الطبقة المشتقة هي "struct" ، فسيكون محدد الوصول "عام" بشكل افتراضي.

في C ++ ، يمكن تحقيق الميراث في خمسة أشكال. يمكن تصنيفها على النحو التالي: -

  • الوراثة الواحدة (فئة واحدة ممتازة)
  • الوراثة المتعددة (عدة فئات مميزة)
  • الوراثة الهرمية (فئة واحدة ممتازة ، العديد من الفئات الفرعية)
  • الوراثة المتعددة (مشتقة من فئة مشتقة)

في Java ، يرث الفصل الفئة الأخرى باستخدام الكلمة "extends". في Java ، تتم الإشارة إلى الفئة الأساسية على أنها فئة فائقة ، ويتم الإشارة إلى الفئة المشتقة على أنها فئة فرعية. لا يمكن للفئة الفرعية الوصول إلى أعضاء الفئة الأساسية ، والتي يتم تعريفها على أنها "خاصة". الشكل العام الموروث للفئة في Java هو كما يلي.

 اسم الفئة المشتقة من الفئة يمتد اسم الفئة الأساسية {// body of the class}؛ 

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

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

 // أول شكل من أشكال استدعاء المنشئ. فئة supper_class {supper_class (argument_list) {..} / / منشئ سوبر الفئة}؛ يوسع sub_class فئة supper_class {sub_class (argument_list) {..} / / منشئ sub_class super (argument_list)؛ // sub_class يستدعي منشئ الطبقة الفائقة}}؛ 
 // second for of 'super' class supper_class {int i؛ } الفئة sub_class تمتد supper_class {int i؛ sub_class (int a، int b) {super.i = a؛ // 'i' of super class i = b؛ // 'i' من فئة فرعية}}؛ 

تعريف تعدد الأشكال

مصطلح "تعدد الأشكال" يعني ببساطة "وظيفة واحدة ، وأشكال متعددة". يتحقق تعدد الأشكال في كل من وقت التجميع ووقت التشغيل. ويتحقق تعدد أشكال التجميع من خلال "التحميل الزائد" ، بينما يتحقق تعدد أشكال وقت التشغيل من خلال "overriding".

ويسمح تعدد الأشكال للهدف بأن يقرر الكائن "أي شكل من أشكال الدالة يتم استدعاؤه عند" في كل من وقت التجميع ووقت التشغيل.
دعونا نناقش المفهوم الأول للحمولة الزائدة. في التحميل الزائد ، نحدد وظيفة في الفئة أكثر من مرة بنوع بيانات مختلف وعدد المعلمات بينما يجب أن يكون للوظيفة المراد تحميلها الزائد نفس نوع الإرجاع. في معظم الأحيان ، تكون الوظائف المحمّلة فوق طاقتها من منشئي الصف.

 الطبقة الزائدة {int a، b؛ public: int overload (int x) {/ first overload () constructor a = x؛ عودة } int overload (int x، int y) {/ second overload () constructor a = x؛ ب = ذ؛ ارجع a * b؛ }}؛ int main () {overload O1؛ O1.overload (20)؛ // first overload () constructor call O1.overload (20،40)؛ // second overload () constructor call} 

الآن ، دعونا نناقش الشكل الثاني من تعدد الأشكال ، أي تجاوز. لا يمكن تطبيق مفهوم التغلب على وظيفة الطبقات التي تنفذ أيضًا مفهوم الميراث. في C ++ ، تسبق الدالة التي سيتم تجاوزها الكلمة الأساسية "virtual" في الفئة الأساسية وإعادة تعريفها في الطبقة المشتقة بنفس النموذج الأولي باستثناء الكلمة "virtual".

 class class {public: virtual void funct () {// virtual function of base class cout << "This is a base class's funct ()"؛ }}؛ فئة مشتقة 1: قاعدة عامة {public: void funct () {/ / virtual function of bas class redefined in derived1 class cout 

الاختلافات الرئيسية بين الميراث وتعدد الأشكال

  1. ينشئ الوراثة فئة تستمد ميزتها من فئة موجودة بالفعل. من ناحية أخرى ، فإن تعدد الأشكال هو واجهة يمكن تعريفها في أشكال متعددة.
  2. يتم تنفيذ التوريث في الفصول بينما يتم تنفيذ تعدد الأشكال على الأساليب / الوظائف.
  3. بما أن الوراثة تسمح لفئة مشتقة باستخدام العناصر والطرق المحددة في الفئة الأساسية ، فلا تحتاج الطبقة المشتقة إلى تعريف تلك العناصر أو الطريقة مرة أخرى ، يمكننا القول أنها تزيد من إعادة استخدام الكود وبالتالي ، تقلل من طول الشفرة . من ناحية أخرى ، يجعل تعدد الأشكال من الممكن للكائن أن يقرر شكل الطريقة التي يريد أن يستدعيها في وقت التجميع ووقت التشغيل.
  4. يمكن تصنيف الميراث كميراث واحد ، وراثة متعددة ، ووراثة متعددة المستويات ، ووراثة تراتبية ، وميراث هجين. من ناحية أخرى ، يتم تصنيف تعدد الأشكال كما الحمولة الزائدة وتجاوز.

استنتاج:

الوراثة وتعدد الأشكال مفاهيم مترابطة ، حيث ينطبق تعدد الأشكال الديناميكي على الطبقات التي تنفذ أيضًا مفهوم الميراث.

Top