سؤال

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

هل كانت مفيدة؟

المحلول

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

على مستوى أعلى ، إذا كان لديك سطر من التعليمات البرمجية:

foo(bar) //Calls a funciton

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

نصائح أخرى

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

فمثلا:

class Animal
{
void talk();
}

class Dog extends Animal
{
public void talk() { System.out.println("woof"); }
}

class Cat extends Animal
{
public void talk() { System.out.println("meow"); }
}

....
Animal zoo[2];
zoo[0] = new Dog();
zoo[1] = new Cat();

for(Animal animalToggle: zoo)
{
animalToggle.talk();
}

سوف يطبع: Woof Meow

تفسيري نأمل أن يساعد.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top