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

مؤلف: Laura McKinney
تاريخ الخلق: 1 أبريل 2021
تاريخ التحديث: 4 قد 2024
Anonim
درس2: الوراثة وتعدد الاشكال في فيجوال بيسك
فيديو: درس2: الوراثة وتعدد الاشكال في فيجوال بيسك

المحتوى


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

  1. رسم بياني للمقارنة
  2. فريف
  3. الاختلافات الرئيسية
  4. استنتاج

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

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


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

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

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

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

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

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

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

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


يمتد class-class-name إلى اسم الفئة الأساسية {// body of the class}؛

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

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

// النموذج الأول من استدعاء المنشئ. class supper_class {supper_class (argument_list) {..} // constructor of super class}؛ الفئة الفرعية فئة تمتد supper_class {sub_class (argument_list) {..} // constructor of sub_class super (argument_list)؛ // sub_class calls the constructor of super class}}؛

// second for super class supper_class {int i؛ } الفئة الفرعية فئة تمتد supper_class {int i؛ فئة فرعية (int a، int b) {super.i = a؛ // أنا من الدرجة الأولى ط = ب ؛ // i of sub class}}؛

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

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

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

التحميل الزائد للفئة {int a، b؛ public: int overload (int x) {// first overload () constructor a = x؛ إرجاع } overload (int x، int y) {// second overload () constructor a = x؛ ب = ذ؛ إرجاع * ب ؛ }} ؛ int main () {overload O1؛ O1.overload (20)؛ // first overload () constructor call O1.overload (20،40)؛ // الثانية الزائد () استدعاء منشئ}

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

class base {public: virtual void funct () {// virtual function of cout class cout << "This is a class class funct ()"؛ }} ؛ class المشتق 1: public base {public: void funct () {// دالة ظاهرية لفئة الأساس المعاد تعريفها في cout المشتقة من الفئة 1 << "هذا هو funct (1) فئات مشتقة ()"؛ }} ؛ int main () {base * p، b؛ مشتقة 1 د 1 ؛ * ص = & ب. P-> وظي ()؛ / / استدعاء الفئة الأساسية funct (). * ص = & D1. عودة 0 ؛ }

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

استنتاج:

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