الفارق بين الفئة المجردة والواجهة هو أحد الأسئلة الشائعة في المقابلات. الفئة المجردة والواجهة هما جزء أساسي من لغة برمجة جافا. ما إذا كان يجب اختيار واجهة أو فئة مجردة هو قرار تصميم يواجهه كل مهندس معماري. في مقالاتي الأخيرة، قدمت قدر الإمكان تفاصيل عن واجهة جافا و فئة مجردة. في هذا المنشور، سنتعلم الفارق بين الفئة المجردة والواجهة ومتى يجب أن نستخدم الواجهة عوضًا عن الفئة المجردة والعكس.
الفارق بين الفئة المجردة والواجهة
abstract
يستخدم لإنشاء فئة مجردة ويمكن استخدامه مع الطرق أيضًا بينما يستخدمinterface
لإنشاء واجهة ولا يمكن استخدامه مع الطرق.- تستخدم الفئات الفرعية الكلمة المفتاحية
extends
لتمديد الفئة المجردة ويجب عليها توفير تنفيذ لجميع الطرق المعلنة في الفئة المجردة ما لم تكن الفئة الفرعية أيضًا فئة مجردة بينما تستخدم الفئات الفرعية الكلمة المفتاحيةimplements
لتنفيذ الواجهات ويجب أن توفر تنفيذًا لجميع الطرق المعلنة في الواجهة. - تصف الفصول الفنية واجهة التطبيق لديك مع طريقة تنفيذ الطرق، بينما توفر الواجهة تجريدًا تامًا ولا يمكن أن تحتوي على أي تنفيذ للطرق. يجب مراعاة أنه اعتبارًا من جافا 8 فصاعدًا، يمكننا إنشاء طرق افتراضية وثابتة في واجهة تحتوي على تنفيذ الطرق.
- يمكن أن تحتوي الفصول الفنية على بناة ولكن الواجهات لا يمكن أن تحتوي على بناة.
- الفصل الفني يحتوي على جميع ميزات فصل جافا العادي باستثناء أنه لا يمكننا إنشاء مثيل له. يمكننا استخدام الكلمة الرئيسية
abstract
لجعل الفصل فنيًا ولكن الواجهات هي نوع مختلف تمامًا ويمكن أن تحتوي فقط على ثوابت عامة ثابتة وإعلانات طرق. - يمكن أن تحتوي طرق الفصول الفنية على محددات وصول مثل public و private و protected و static ولكن طرق الواجهة عمومًا هي عامة ومجردة، لا يمكننا استخدام أي محددات وصول أخرى مع طرق الواجهة.
- A subclass can extend only one abstract class but it can implement multiple interfaces.
- يمكن للفصول الفنية أن تمتد من فصل آخر وتنفذ واجهات، لكن الواجهة يمكنها فقط تمديد واجهات أخرى.
- يمكننا تشغيل فصل فني إذا كان يحتوي على طريقة
main()
ولكن لا يمكننا تشغيل واجهة لأنها لا يمكن أن تحتوي على تنفيذ لطريقة main. - تستخدم الواجهات لتحديد العقد للفصول الفرعية بينما تعرف الفصول الفنية أيضًا على العقد ولكن يمكنها توفير تنفيذات لطرق أخرى لاستخدام الفصول الفرعية.
هذا كل شيء بالنسبة لفرق بين واجهة وفصل فني، الآن يمكننا المضي قدمًا لمعرفة متى يجب علينا استخدام الواجهة بدلاً من الفصل الفني والعكس.
واجهة أو صف مجرد
ما إذا كان يجب اختيار واجهة أو صف مجرد لتوفير عقد للفصائل هو قرار تصميمي ويعتمد على عدة عوامل. دعونا نرى متى تكون الواجهات الخيار الأفضل ومتى يمكننا استخدام الصفوف المجردة.
- لا تدعم جافا الوراثة على مستوى الفصل المتعدد، لذا يمكن لكل فصل أن يمتد فقط من فصيلة أحد أصول. ولكن يمكن لفئة تنفيذ واجهات متعددة. لذا في معظم الأحيان، الواجهات هي الخيار الأمثل لتوفير الأساس لتسلسل الفئات والعقود. أيضًا، البرمجة بالمصطلحات الواجهات هي واحدة من أفضل الممارسات لبرمجة جافا.
- إذا كان هناك الكثير من الطرق في العقد، فإن الصف المجرد أكثر فائدة لأنه يمكننا توفير تنفيذ افتراضي لبعض الطرق التي هي مشتركة بين جميع الفصائل. أيضًا إذا لم تحتاج الفصائل إلى تنفيذ طريقة معينة، يمكنها تجنب توفير التنفيذ ولكن في حالة الواجهة، سيتعين على الفصيلة توفير التنفيذ لجميع الطرق حتى لو لم تكن لها فائدة والتنفيذ مجرد كتلة فارغة.
- إذا كان عقدنا الأساسي يتغير باستمرار فإن الواجهات يمكن أن تسبب مشاكل لأنه لا يمكننا إعلان طرق إضافية إلى الواجهة دون تغيير جميع فئات التنفيذ، مع الصف المجرد يمكننا توفير التنفيذ الافتراضي وتغيير فقط فئات التنفيذ التي ستستخدم فعليًا الطرق الجديدة.
استخدم الفئات المجردة والواجهة معًا
استخدام الواجهات والفئات المجردة معًا هو أفضل نهج لتصميم نظام. على سبيل المثال، في JDK، java.util.List
هي واجهة تحتوي على العديد من الطرق، لذا هناك فئة مجردة java.util.AbstractList
تقدم تنفيذًا هيكليًا لجميع طرق واجهة List بحيث يمكن لأي فئة فرعية تمديد هذه الفئة وتنفيذ الطرق المطلوبة فقط. يجب علينا دائمًا البدء بواجهة كقاعدة وتعريف الطرق التي يجب على كل فئة فرعية تنفيذها، ثم إذا كانت هناك بعض الطرق التي يجب تنفيذها فقط بواسطة بعض الفئات الفرعية، يمكننا تمديد الواجهة الأساسية وإنشاء واجهة جديدة بها تلك الطرق. ستكون لدى الفئات الفرعية الخيار لاختيار بين الواجهة الأساسية أو الواجهة الفرعية للتنفيذ وفقًا لاحتياجاتها. إذا كان عدد الطرق يزيد كثيرًا، فإن فكرة توفير فئة مجردة هي فكرة جيدة لتقديم تنفيذ هيكلي للواجهة الفرعية وتوفير مرونة للفئات الفرعية للاختيار بين الواجهة والفئة المجردة.
تغييرات واجهة Java 8
من جافا 8 فصاعدًا ، يمكننا أن نقدم تنفيذات الطرق في الواجهات. يمكننا إنشاء طرق افتراضية وكذلك طرق ساكنة في الواجهات وتوفير تنفيذ لها. لقد جسر هذا الفجوة بين الفئات المجردة والواجهات والآن الواجهات هي الطريقة للذهاب لأنه يمكننا تمديد ذلك بشكل أكبر عن طريق توفير تنفيذات افتراضية للطرق الجديدة. لمزيد من التفاصيل ، تحقق من طرق واجهة جافا 8 الافتراضية الثابتة.