الانتقال إلى المحتوى الرئيسي

ما هو الفرق بين مكالمة افتراضية ودائرة افتراضية? شرح مفصل

وظائف افتراضية هي واحدة من المفاهيم الهامة في ج programming البرمجة. إنها تسمح لك بإنشاء تسلسل هرمي للفئات مع إعادة تعريف الأساليب في الفئات المشتقة. ومع ذلك ، وظائف افتراضية في ج can يمكن تنفيذها بطريقتين مختلفتين: استخدام مكالمة افتراضية وسلسلة افتراضية.

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

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

الفرق بين المكالمة الافتراضية والسلسلة الافتراضية هو أن المكالمة الافتراضية تسمح لك باستدعاء دالة فئة أساسية من سياق كائن من فئة مشتقة ، بينما تسمح لك السلسلة الافتراضية بتحديد التسلسل الهرمي للوظائف الافتراضية في الفئات المشتقة.

  1. ما هو الفرق بين مكالمة افتراضية ودائرة افتراضية?
  2. الاختلافات في طريقة نقل البيانات
  3. الاختلافات في نطاق التطبيق
  4. الاختلافات في الأداء والسرعة
  5. الاختلافات في مستوى الأمن
  6. سؤال وجواب
  7. ما هو الفرق بين مكالمة افتراضية ودائرة افتراضية?
  8. كيف مكالمة افتراضية وسلسلة افتراضية العمل في ج language لغة البرمجة?

ما هو الفرق بين مكالمة افتراضية ودائرة افتراضية?

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

المكالمة الافتراضية هي آلية يمكن من خلالها تجاوز طريقة معلنة على أنها افتراضية في فئة رئيسية في الفصول الفرعية. توفر المكالمة الافتراضية تنفيذ طريقة تتوافق مع النوع الحقيقي للكائن المسمى.

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

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

مثال:

قاعدة الطبقة {

العامة:

الظاهري الفراغ فو () {

الأمراض المنقولة جنسيا:: كوت < < "قاعدة فو ()" < < الأمراض المنقولة جنسيا:: إندل;

}

};

الطبقة المشتقة: القاعدة العامة {

العامة:

الفراغ فو () تجاوز {

الأمراض المنقولة جنسيا:: كوت < < "المشتقة فو ()" < < الأمراض المنقولة جنسيا:: إندل;

}

};

كثافة العمليات الرئيسية () {

قاعدة * كائن = جديد مشتق ();

أوبج- > فو () ؛ / / مكالمة افتراضية

مشتقة * مشتقة أوبج = ديناميك_كاست (أوبج);

ديريفيدوبج- > فو () ؛ / / سلسلة افتراضية

حذف الكائن;

العودة 0;

}

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

وبالتالي ، تستخدم المكالمة الافتراضية نوع الكائن الحقيقي لتحديد الطريقة التي يتم استدعاؤها ، بينما تستخدم السلسلة الافتراضية نوع المؤشر أو المرجع الذي يتم من خلاله استدعاء الطريقة.

الاختلافات في طريقة نقل البيانات

الاستدعاء الظاهري والسلسلة الافتراضية هما آليتان مختلفتان تستخدمان في البرمجة الشيئية لنقل البيانات في التسلسل الهرمي للفئة. أنها تختلف في الطريقة التي تحدد واستدعاء الأساليب.

  • المكالمة الافتراضية هي آلية تسمح لك باستدعاء طريقة كائن بناء على نوعه الديناميكي. تستخدم المكالمة الافتراضية الكلمة الأساسية الافتراضية عند الإعلان عن طريقة أساسية والكلمة الأساسية للتجاوز عند إعادة تعريفها في فئة مشتقة. يتم استخدام مؤشر أو مرجع إلى الفئة الأساسية لاستدعاء الطريقة.
  • السلسلة الافتراضية هي آلية تسمح لك باستدعاء طريقة كائن في تسلسل هرمي للفئة بناء على ترتيبها في هذا التسلسل الهرمي. تستخدم السلسلة الافتراضية الكلمات الرئيسية افتراضية وتجاوز بنفس طريقة المكالمة الافتراضية. ومع ذلك ، عند استدعاء الطريقة ، يتم استخدام عامل دقة النطاق (::) واسم الفئة الأساسية.

مثال على استخدام مكالمة افتراضية:

قاعدة الطبقة {

العامة:

طريقة الفراغ الظاهري () {

// تنفيذ الطريقة الأساسية

}

};

الطبقة المشتقة: القاعدة العامة {

العامة:

طريقة الفراغ () تجاوز {

// تنفيذ الطريقة التي تم تجاوزها

}

};

كثافة العمليات الرئيسية () {

قاعدة * كائن = جديد مشتق ();

أوبج - > الأسلوب () ؛ / / استدعاء طريقة تجاوز عبر مؤشر إلى الفئة الأساسية

حذف الكائن;

العودة 0;

}

مثال على استخدام سلسلة افتراضية:

قاعدة الطبقة {

العامة:

طريقة الفراغ الظاهري () {

// تنفيذ الطريقة الأساسية

}

};

الطبقة المشتقة: القاعدة العامة {

العامة:

طريقة الفراغ () تجاوز {

// تنفيذ الطريقة المعاد تعريفها

}

};

كثافة العمليات الرئيسية () {

كائن مشتق;

كائن.القاعدة:: الطريقة () ؛ / / استدعاء الطريقة الأساسية عبر مشغل دقة النطاق

كائن.الطريقة () ؛ / / استدعاء الطريقة المعاد تعريفها

العودة 0;

}

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

الاختلافات في نطاق التطبيق

التحدي الافتراضي والسلسلة الافتراضية هما نهجان مختلفان لتنفيذ تعدد الأشكال في البرمجة. كل واحد منهم له خصائصه الخاصة ويستخدم في حالات مختلفة.

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

يرتبط الاختلاف في النطاق بخصائص كل نهج:

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

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

الاختلافات في الأداء والسرعة

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

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

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

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

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

الاختلافات في مستوى الأمن

أحد الاختلافات الرئيسية بين المكالمة الافتراضية والسلسلة الافتراضية هو مستوى الأمان الذي توفره.

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

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

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

سؤال وجواب

ما هو الفرق بين مكالمة افتراضية ودائرة افتراضية?

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

كيف مكالمة افتراضية وسلسلة افتراضية العمل في ج language لغة البرمجة?

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