[Binding] ما هو الفرق بين الربط المبكر و المتأخر؟


Answers

في اللغات المترجمة، الفرق هو صارخ.

جافا:

//early binding:
public create_a_foo(*args) {
 return new Foo(args)
}
my_foo = create_a_foo();

//late binding:
public create_something(Class klass, *args) {
  klass.new_instance(args)
}
my_foo = create_something(Foo);

في المثال الأول، يمكن للمترجم القيام بجميع أنواع الأشياء الأنيقة في وقت التحويل البرمجي. في الثانية، عليك فقط أن نأمل أن كل من يستخدم طريقة يفعل ذلك بمسؤولية. (بطبيعة الحال، أحدث جفمس تدعم Class<? extends Foo> klass هيكل Class<? extends Foo> klass ، والتي يمكن أن تقلل كثيرا من هذا الخطر.)

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

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

Question

ما هو الفرق بين الربط المبكر والتأخر؟




جواب مماثل ولكن أكثر تفصيلا من هربرت شيلدت C ++ كتاب: -

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

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




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




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

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