logo

أنواع الواجهات في جافا

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

واجهات العلامة

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

واجهات وظيفية

كجزء من التحسينات على تعبيرات لامدا والبرمجة الوظيفية، تمت إضافة الواجهات الوظيفية إلى Java 8. ويقال إن الواجهة التي تحتوي على طريقة مجردة واحدة على وجه التحديد هي وظيفية. بالإضافة إلى ذلك، الأساليب الافتراضية والثابتة ممكنة. تستفيد العديد من إمكانيات البرمجة الوظيفية في Java، مثل تعبيرات lambda ومراجع الأساليب، من الواجهات الوظيفية. المسند والمستهلك والوظيفة والمورد ليست سوى عدد قليل من الواجهات الوظيفية المضمنة التي تقدمها الحزمة java.util.function.

واجهات الطريقة المجردة الفردية (SAM).

قبل Java 8، كانت هناك أنواع معينة من الواجهات الوظيفية تسمى واجهات SAM. يمكن أن تحتوي هذه الواجهات على أي عدد من الأساليب الافتراضية أو الثابتة، ولكن طريقة مجردة واحدة فقط. Runnable، وComparator، وMouseListener هي بعض واجهات برمجة التطبيقات السابقة لـ Java 8 والتي تحتوي على أمثلة لواجهة SAM. مع تقديم الواجهات الوظيفية في Java 8، يمكن استخدام واجهات SAM مع تعبيرات lambda واعتبارها واجهات وظيفية.

تعدد مؤشرات الترابط في جافا

واجهات عادية

النوع الأكثر شيوعًا من الواجهات في Java هو الواجهات العادية. لديهم واحد أو أكثر من الأساليب المجردة التي يجب على الفئات التي تنفذ الواجهة تنفيذها. بدءًا من Java 8، يمكن أن تحتوي الواجهات العادية أيضًا على أساليب افتراضية وثابتة. يتم استخدام الواجهات العادية من قبل المطورين لتحديد القواعد أو المتطلبات التي يجب أن تتبعها الفئات. القائمة، والتعيين، والخريطة، والتي تم العثور عليها جميعًا في الحزمة java.util، هي أمثلة لواجهات Java النموذجية.

واجهات الوراثة المتعددة

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

فيما يلي أمثلة على التعليمات البرمجية لكل نوع من أنواع الواجهات في Java بالإضافة إلى المخرجات المقابلة لها:

عفوا في جافا

واجهات العلامة

MarkerInterfaceExample.java

 import java.io.Serializable; // Marker Interface interface MyMarkerInterface extends Serializable { } public class MarkerInterfaceExample { public static void main(String[] args) { MyMarkerInterface obj = new MyMarkerInterface() { }; System.out.println(obj instanceof Serializable); // true } } 

انتاج:

 true 

واجهات وظيفية

FunctionalInterfaceExample.java

 import java.util.function.Predicate; public class FunctionalInterfaceExample { public static void main(String[] args) { Predicate isLengthGreaterThan5 = str -> str.length() > 5; System.out.println(isLengthGreaterThan5.test('Hello')); // false System.out.println(isLengthGreaterThan5.test('OpenAI')); // true } } 

انتاج:

 false true 

واجهات الطريقة المجردة الفردية (SAM):

SAMInterfaceExample.java

 interface MySAMInterface { void performAction(); } public class SAMInterfaceExample { public static void main(String[] args) { MySAMInterface obj = () -> System.out.println('Performing action'); obj.performAction(); // Performing action } } 

انتاج:

تعليم شلوكا ميهتا
 Performing action 

واجهات عادية

NormalInterfaceExample.java

 import java.util.List; import java.util.ArrayList; interface MyInterface { void printMessage(); } class MyClass implements MyInterface { @Override public void printMessage() { System.out.println('Hello, World!'); } } public class NormalInterfaceExample { public static void main(String[] args) { MyInterface obj = new MyClass(); obj.printMessage(); // Hello, World! } } 

انتاج:

الاختبار اليدوي
 Hello, World! 

واجهات الوراثة المتعددة:

MultiInheritanceInterfaceExample.java

 interface Interface1 { void method1(); } interface Interface2 { void method2(); } class MyClass implements Interface1, Interface2 { @Override public void method1() { System.out.println('Method 1'); } @Override public void method2() { System.out.println('Method 2'); } } public class MultipleInheritanceInterfaceExample { public static void main(String[] args) { MyClass obj = new MyClass(); obj.method1(); // Method 1 obj.method2(); // Method 2 } } 

انتاج:

 Method 1 Method 2 

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

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