مرحبا انا الان اتعلم لغة java ووصلت للبرمجة كائنية التوجه وبالتحديد الى ال interface وقد فهمت طريقة عمله ولكن لدي سؤال لماذا علي استخدام الinterface بينما يمكنني تعريف الدالة في الكلاس الذي سينفذ الانترفيس اي لماذا يجب علي ان اضع الدالة بالانترفيس اولا ثم اجعل الكلاس الذي سوف ينفذه ان يقوم ب override لل دالة بينما يمكنني تعريفها فورا في الكلاس بدون الحاجة الى استخدام ال interface
ال interface
يتم إستخدام الinterface لإستخدام أصناف عامة ترث تلك الواجهة دون الحاجة لتعريف نوع معين من الصنف, هذا المثال قد يوضح لك
نفترض أننا نقوم بإنشاء نظام للجامعة ولدينا مجموعة من الطلاب منقسمين كالتالي: طالب مغترب, طالب من أهل المدينة, طالب من ذوي الظروف الخاصة
ونريد دالة تقوم بحساب المصاريف الجامعية لكل طالب, وبالطبع كل طالب سيقوم بدفع مصاريف مختلفة حيث يتم توفير خصم 20% للطلاب المغتربين وخصم 50% للطالاب ذوي الظروف الخاصة ولا يوجد خصم للطلاب من أهل المدينة
ولدينا صنف (class) خاص بالشؤن الإدارية يوجد به دالة خاصة بحساب المصاريف الخاصة بالطالب, لو لم نستخدم الواجهات سنضطر إذًا أن نقوم بإنشاء ثلاث دوال لحساب المصاريف واحدة لكل نوع من الطلاب, لكن بما أننا نستخدم الواجهات يمكننا كتابة شفرة كالتالي
public double calculateStudentFees(Student s){ return s.calculateFee() }
حيث أن الدالة تستقبل طالب لا يهم نوعه فهي تستقبل الinterface التي تسمى Student ومن ثم تقوم بنداء الدالة calculateFee التي يختلف الimplementation خاصتها الخاص بكل صنف من الأصناف التي ترث الواجهة Student
مثال أخر إن كنا نقوم بإنشاء دالة تستقبل قائمة List وتقوم ببعض العمليات عليها, لا يهمنا إن كانت القائمة من النوع LinedList أو ArrayList فنقوم إذًا بتعريف الدالة أنها تقوم بإستقبال الواجهة List بغض النظر عن نوع الList
public void manibulateList(List l){ ///بعض الأكواد } public void main(){ List l1 = new ArrayList(); List l2 = new LinkedList(); manibulateList(l1); manibulateList(l2); }
لولا الواجهات لإضطررنا لإنشاء دالتين مختلفين واحدة لمعالجة الArrayList والأخرى لمعالجة الLinkedList
قد تفيدك أيضًا تلك المقالة من موقع حسوب على فهمة الأمر بصورة أكبر
التعليقات