logo

واجهة العلامة في جافا

في هذا القسم سنتحدث عن واجهة علامة في جافا ، إنه الاستخدامات، المدمج في ( قابل للتسلسل , قابل للاستنساخ والواجهات البعيدة ) و واجهة علامة مخصصة مع الأمثلة.

ما هي واجهة العلامة؟

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

إن إعلان واجهة العلامة هو نفس الواجهة في Java ولكن يجب أن تكون الواجهة فارغة. على سبيل المثال:

 public interface Serializable { } 

هناك بديلان لواجهة العلامة التي تنتج نفس نتيجة واجهة العلامة.

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

استخدامات واجهة العلامة

يتم استخدام واجهة Marker كعلامة تُعلم مترجم Java برسالة حتى يتمكن من إضافة بعض السلوكيات الخاصة إلى الفصل الذي يقوم بتنفيذها. تعد واجهة علامة Java مفيدة إذا كانت لدينا معلومات حول الفصل الدراسي ولم تتغير هذه المعلومات أبدًا، وفي مثل هذه الحالات، نستخدم واجهة العلامة لتمثيل نفس الشيء. تنفيذ واجهة فارغة يخبر المترجم بالقيام ببعض العمليات.

يتم استخدامه لتقسيم الكود بشكل منطقي وطريقة جيدة لتصنيف الكود. إنه أكثر فائدة لتطوير واجهة برمجة التطبيقات (API) وفي أطر عمل مثل Spring.

واجهة ماركر مدمجة

في جافا واجهات العلامات المضمنة هي الواجهات الموجودة بالفعل في JDK وجاهزة للاستخدام. هناك العديد من واجهات العلامات المضمنة، بعض منها:

  • واجهة قابلة للاستنساخ
  • واجهة قابلة للتسلسل
  • واجهة عن بعد

دعونا نناقش واحدا تلو الآخر بالتفصيل.

واجهة قابلة للاستنساخ

واجهة قابلة للتنظيف في Java هي أيضًا واجهة علامة تنتمي إليها java.lang طَرد. يقوم بإنشاء نسخة طبق الأصل (نسخة) من كائن باسم مختلف. يمكننا تنفيذ الواجهة في فئة كائن الفئة المراد استنساخها. ويشير إلى استنساخ () طريقة فئة الكائن. إذا لم نقم بتنفيذ الواجهة القابلة للاستنساخ في الفصل واستدعاء طريقة clone()، فسيتم طرح الأمر ClassNotSupportedException.

لاحظ أن الفئة التي تطبق الواجهة القابلة للاستنساخ يجب أن تتجاوز طريقة clone() بطريقة عامة. دعونا نرى مثالا.

Product.java

 import java.util.Scanner; public class Product implements Cloneable { int pid; String pname; double pcost; //Product class constructor public Product (int pid, String pname, double pcost) { this.pid = pid; this.pname = pname; this.pcost = pcost; } //method that prints the detail on the console public void showDetail() { System.out.println('Product ID: '+pid); System.out.println('Product Name: '+pname); System.out.println('Product Cost: '+pcost); } public static void main (String args[]) throws CloneNotSupportedException { //reading values of the product from the user Scanner sc = new Scanner(System.in); System.out.print('Enter product ID: '); int pid = sc.nextInt(); System.out.print('Enter product name: '); String pname = sc.next(); System.out.print('Enter product Cost: '); double pcost = sc.nextDouble(); System.out.println('-------Product Detail--------'); Product p1 = new Product(pid, pname, pcost); //cloning the object of the Product class using the clone() method Product p2 = (Product) p1.clone(); //invoking the method to print detail p2.showDetail(); } } 

انتاج:

 Enter product ID: 139872 Enter product name: Printer Enter product Cost: 3459.67 -------Product Detail-------- Product ID: 139872 Product Name: Printer Product Cost: 3459.67 

واجهة قابلة للتسلسل

إنها واجهة علامة في Java تم تعريفها في ملف java.io طَرد. إذا أردنا جعل الفصل قابلاً للتسلسل، فيجب علينا تنفيذ الأمر قابل للتسلسل واجهه المستخدم. إذا قامت إحدى الفئات بتطبيق واجهة قابلة للتسلسل، فيمكننا إجراء تسلسل أو إلغاء تسلسل حالة كائن من تلك الفئة.

التسلسل (تحويل كائن إلى دفق بايت) هو آلية يتم من خلالها تتم قراءة حالة الكائن من الذاكرة وكتابتها في ملف أو قاعدة بيانات . إلغاء التسلسل (تحويل دفق البايت إلى كائن) هو عكس التسلسل الذي يعني ذلك قراءة حالة الكائن من ملف أو قاعدة بيانات وإعادتها إلى الذاكرة يسمى إلغاء تسلسل الكائن.

واجهة العلامة في جافا

يمكن تحقيق التسلسل (الكتابة) باستخدام ObjectOutputStream يمكن تحقيق الفصل وإلغاء التسلسل (القراءة) باستخدام ملف ObjectInputStream فصل.

دعونا نرى مثال على التسلسل وإلغاء التسلسل.

مثال على التسلسل

الموظف.جافا

 import java.io.Serializable; public class Employee implements Serializable { int empid; String empname; public Employee(int empid, String empname) { this.empid = empid; this.empname = empname; } } 

SerializationExample.java

 import java.io.*; class SerializationExample { public static void main(String args[]) { try { //Creating the object Employee emp =new Employee(1187345,'Andrew'); //Creating stream and writing the object FileOutputStream fout=new FileOutputStream('employee data.txt'); ObjectOutputStream out=new ObjectOutputStream(fout); out.writeObject(emp); out.flush(); //closing the stream out.close(); System.out.println('Data has been read from the file.'); } catch(Exception e) { e.printStackTrace(); } } } 

انتاج:

 Data has been read from the file. 

مثال على إلغاء التسلسل

دعونا نقوم بإلغاء تسلسل حالة الكائن.

إلغاء التسلسلExample.java

 import java.io.*; class DeserializationExample { public static void main(String args[]) { try { //Creating stream to read the object ObjectInputStream in=new ObjectInputStream(new FileInputStream('employee data.txt')); Employee emp=(Employee)in.readObject(); //printing the data of the serialized object System.out.println(emp.empid+' '+emp.empname); //closing the stream in.close(); } catch(Exception e) { e.printStackTrace(); } } } 

انتاج:

 1187345 Andrew 

واجهة عن بعد

واجهة عن بعد هي واجهة العلامة التي تنتمي إليها java.rmi طَرد. فهو يضع علامة على كائن ما على أنه بعيد ويمكن الوصول إليه من جهاز آخر (مضيف). يجب علينا تنفيذ الواجهة البعيدة إذا أردنا جعل الكائن بعيدًا. يحدد الواجهات التي يمكن استدعاء أساليبها من JVM غير محلي. يجب على أي كائن بعيد تنفيذ الواجهة بشكل مباشر أو غير مباشر.

دعونا نحدد الواجهة البعيدة وننفذها في برنامج Java.

تعريف الواجهة البعيدة

 import java.rmi.*; public interface AddAll extends Remote { public int add(int r, int s)throws RemoteException; } 

تنفيذ الواجهة البعيدة

هناك طريقتان لتنفيذ الواجهة البعيدة:

  • عن طريق توسيع فئة UnicastRemoteObject
  • باستخدام طريقة ExportObject() لفئة UnicastRemoteObject

AddAllRemote.java

 import java.rmi.*; import java.rmi.server.*; public class AddAllRemote extends UnicastRemoteObject implements Adder { AddAllRemote()throws RemoteException { super(); } public int add(int r, int s) { return r+s; } 

إنشاء وبدء التطبيق البعيد

خادم.جافا

com.myflixr
 import java.rmi.*; import java.rmi.registry.*; public class Server { public static void main(String args[]) { try { AddAll stub=new AddAllRemote(); Naming.rebind('rmi://localhost:5000/sak',stub); } catch(Exception e) { System.out.println(e); } } } 

إنشاء وبدء تشغيل تطبيق العميل

Client.java

 import java.rmi.*; public class Client { public static void main(String args[]) { try { AddAll stub=(AddAll)Naming.lookup('rmi://localhost:5000/sak'); System.out.println(stub.add(29,18)); } catch(Exception e) { } } } 

واجهة العلامة المخصصة

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

CustomMarkerInterfaceExample.java

 //custom marker interface interface Car { } //custom marker interface interface Engine { } //class that implements the Car marker interface class Vehicle implements Car { static void isVehicle() { System.out.println('Car is a vehicle.'); } } //class that implements the Engine marker interface class Status implements Engine { static void isWorking() { System.out.println('Yes, engine is working.'); } } //main class public class CustomMarkerInterfaceExample { public static void main(String args[]) { //invoking the methods of the class Vehicle.isVehicle(); Status.isWorking(); } } 

انتاج:

 Car is a vehicle. Yes, engine is working.