JavaRush /مدونة جافا /Random-AR /الاختلافات بين الربط المبكر والمتأخر في Java

الاختلافات بين الربط المبكر والمتأخر في Java

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

الربط المبكر والمتأخر في جاوة

هناك العديد من الاختلافات بين الربط الثابت والديناميكي في Java، ولكن الأهم هو كيفية استخدام JVM لهما. هل تساءلت يومًا كيف يقرر JVM الطريقة التي سيتم الاتصال بها عندما يكون هناك أكثر من طريقة بنفس الاسم في النطاق؟ إذا سبق لك استخدام طريقة التحميل الزائد أو التجاوز، فأنت تعلم أنه في Java يمكن أن يكون لديك طرق متعددة بنفس الاسم. في حالة Java، يستخدم JVM الربط الثابت والديناميكي لتحديد الطريقة المطلوبة.

مثال على الربط الثابت والديناميكي في Java

في هذا البرنامج، سترى أن ربط الأساليب الافتراضية لا يحدث في وقت الترجمة باستخدام الربط الثابت، لأن هذا قد يستدعي أسلوبًا من الفئة الفائقة، كما يحدث مع الطرق الثابتة التي تم ربطها مبكرًا. إذا تم استدعاء أسلوب من فئة فرعية، فسيتم استخدام كائن معين لربط الوظيفة في وقت التشغيل، وبالتالي يتم استخدام الربط الديناميكي لربط الوظائف الافتراضية.
public class Main {
  public static void main(String[] args) {

    // Пример статического и динамического связывания в Java
    Insurance current = new CarInsurance();

    // Динамическое связывание на основе an object
    int premium = current.premium();

    // Статическое связывание на основе класса
    String category = current.category();

    System.out.println("premium : " + premium);
    System.out.println("category : " + category);
  }
}

class Insurance{
  public static final int LOW = 100;

  public int premium(){
    return LOW;
  }

  public static String category(){
    return "Insurance";
  }

}

class CarInsurance extends Insurance{
  public static final int HIGH = 200;

  public int premium(){
    return HIGH;
  }

  public static String category(){
    return "Car Insurance";
  }

}
Результаты выполнения:

premium : 200
category : Insurance
كما ترى، premium()أدى استدعاء الطريقة إلى تنفيذ طريقة من الفئة الفرعية، بينما category()أدى استدعاء الطريقة إلى تنفيذ طريقة من الفئة الفائقة. وذلك لأن premium()- هي طريقة افتراضية، والتي يتم حلها باستخدام الربط المتأخر، بينما category()- هي طريقة ثابتة، والتي يتم حلها باستخدام الربط الثابت في وقت الترجمة حسب اسم الفئة.
هل أنت مهتم بالقراءة عن جافا؟ انضم إلى مجموعة مطوري جافا !

الاختلافات بين الربط المبكر والمتأخر في Java

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

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

  3. يتم استخدام الربط الثابت في لغة Java لحل الطرق المحملة بشكل زائد بينما يتم استخدام الربط الديناميكي في لغة Java لحل الطرق التي تم تجاوزها.

  4. وبالمثل، يتم حل الطرق الخاصة والثابتة والطرفية باستخدام الربط الثابت لأنه لا يمكن تجاوزها، بينما يتم حل جميع الطرق الافتراضية باستخدام الربط الديناميكي.

  5. في حالة الارتباط الثابت، لا يتم استخدام كائنات محددة، ولكن معلومات النوع، أي يتم استخدام نوع المتغير المرجعي لاكتشاف الطريقة المطلوبة. من ناحية أخرى، يستخدم الربط الديناميكي كائنًا محددًا للعثور على الطريقة المطلوبة في Java.
فيما يلي تمرين جيد يعتمد على مفاهيم الربط الثابت والديناميكي في Java. هل يمكنك الإجابة على السؤال: "ما الذي سيتم إخراجه عند تنفيذ البرنامج التالي؟"
الاختلافات بين الربط المبكر والمتأخر في Java - 2
ماذا سيخرج هذا البرنامج؟ Collection، Setأو HashSet؟ هذا كل ما أردنا إخبارك به حول الاختلافات بين الربط المبكر (الثابت) والمتأخر (الديناميكي) في Java. يعد هذا أحد أفضل أسئلة المقابلات عبر الهاتف باستخدام Java لأنه يوفر عددًا لا بأس به من الفرص لاختبار مدى عمق معرفة المرشح. تذكر دائمًا أن الطرق الخاصة والثابتة والنهائية يتم ربطها باستخدام الارتباط الثابت ، بينما يتم ربط الطرق الافتراضية باستخدام الارتباط الديناميكي . وبالمثل، فإن أفضل مثال على الربط الثابت هو التحميل الزائد للطريقة، في حين أن التجاوز ديناميكي. مصدر
تعليقات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION