logo

رد الاتصال باستخدام واجهات في جافا

رد الاتصال في C/C++: تسمى آلية استدعاء دالة من دالة أخرى رد الاتصال. يتم تمثيل عنوان الذاكرة الخاص بالوظيفة على أنه "مؤشر الوظيفة" في لغات مثل C وC++. لذلك يتم تحقيق رد الاتصال عن طريق تمرير مؤشر function1() إلى function2().
رد الاتصال في جافا: لكن مفهوم وظيفة رد الاتصال غير موجود في Java لأن Java لا تحتوي على مفهوم المؤشر. ومع ذلك، هناك حالات يمكن فيها الحديث عن كائن رد اتصال أو واجهة رد اتصال. بدلاً من تمرير عنوان الذاكرة الخاص بالوظيفة يتم تمرير الواجهة التي تشير إلى موقع الوظيفة.
 

مثال


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



static void calculateTax(address of stateTax() function) { ct = 1000.0 st = calculate state tax depending on the address total tax = ct+st; }


في الكود السابق، تم تمرير عنوان StateTax() إلى CalculTax(). ستستخدم طريقة CalculatorTax () هذا العنوان لاستدعاء طريقة StateTax () لحالة معينة ويتم حساب ضريبة الولاية "st". 
نظرًا لأن كود طريقةstateTax() يتغير من حالة إلى حالة أخرى، فمن الأفضل الإعلان عنها كطريقة مجردة في الواجهة على النحو التالي: 
 

interface STax { double stateTax(); }


فيما يلي تنفيذ StateTax() لولاية البنجاب: 
 

class Punjab implements STax{ public double stateTax(){ return 3000.0; } }


فيما يلي تنفيذ StateTax() لحالة HP: 
 

class HP implements STax { public double stateTax() { return 1000.0; } }


الآن يمكن تصميم طريقة CalculateTax() على النحو التالي: 
 

static void calculateTax(STax t) { // calculate central tax double ct = 2000.0; // calculate state tax double st = t.stateTax(); double totaltax = st + ct; // display total tax System.out.println(Total tax =+totaltax); }

لاحظ هنا المعلمة "STAx t" في طريقة countTax(). "t" هو مرجع لواجهة "STAx" التي يتم تمريرها كمعلمة للطريقة. باستخدام هذا المرجع، يتم استدعاء طريقةstateTax() على النحو التالي: 
 

double st = t.stateTax();


هنا إذا كانت كلمة 't' تشير إلى طريقة StateTax()‎ لفئة Punjab، فسيتم استدعاء هذه الطريقة ويتم حساب الضريبة الخاصة بها. وبالمثل بالنسبة لفئة HP. بهذه الطريقة، من خلال تمرير مرجع الواجهة إلى أسلوب CalculateTax()، من الممكن استدعاء أسلوب StateTax() لأي ولاية. وهذا ما يسمى آلية رد الاتصال.
من خلال تمرير مرجع الواجهة الذي يشير إلى أسلوب ما، من الممكن استدعاء هذا الأسلوب واستخدامه من أسلوب آخر.
 

Java
// Java program to demonstrate callback mechanism // using interface is Java // Create interface import java.util.Scanner; interface STax {  double stateTax(); } // Implementation class of Punjab state tax class Punjab implements STax {  public double stateTax()  {  return 3000.0;  } } // Implementation class of Himachal Pradesh state tax class HP implements STax {  public double stateTax()  {  return 1000.0;  } } class TAX {  public static void main(String[] args)  throws ClassNotFoundException IllegalAccessException InstantiationException  {  Scanner sc = new Scanner(System.in);  System.out.println('Enter the state name');  String state = sc.next(); // name of the state  // The state name is then stored in an object c  Class c = Class.forName(state);  // Create the new object of the class whose name is in c  // Stax interface reference is now referencing that new object  STax ref = (STax)c.newInstance();  /*Call the method to calculate total tax  and pass interface reference - this is callback .  Here ref may refer to stateTax() of Punjab or HP classes  depending on the class for which the object is created  in the previous step  */  calculateTax(ref);  }  static void calculateTax(STax t)  {  // calculate central tax  double ct = 2000.0;  // calculate state tax  double st = t.stateTax();  double totaltax = st + ct;  // display total tax  System.out.println('Total tax =' + totaltax);  } } 

الإخراج: 
 

Enter the state name Punjab Total tax = 5000.0


مراجع: 
كيفية تنفيذ وظائف رد الاتصال في جافا؟  
جافا الأساسية: نهج متكامل

إنشاء اختبار