نمط واجهة العلامة

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

لاستخدام هذا النمط، تُطبّق فئةٌ واجهةً مُؤشِّرة [ 1 ] (تُسمى أيضًا واجهة الوسم )، وهي واجهة فارغة [ 2 ] ، وتختبر الطرق التي تتفاعل مع مثيلات تلك الفئة وجود هذه الواجهة. في حين أن الواجهة التقليدية تُحدِّد وظائف (في شكل تعريفات طرق) يجب على الفئة المُطبِّقة دعمها، فإن الواجهة المُؤشِّرة ليست مُلزمة بذلك. يُشير وجود هذه الواجهة إلى سلوك مُحدَّد من جانب الفئة المُطبِّقة. الواجهات الهجينة، التي تعمل كواجهات مُؤشِّرة وتُحدِّد الطرق المطلوبة، ممكنة، ولكنها قد تُسبِّب التباسًا إذا استُخدمت بشكل غير صحيح.

مثال

من الأمثلة على تطبيق واجهات العلامات من لغة برمجة جافا الواجهة التالية Serializable:

package java.io ;واجهة عامة قابلة للتسلسل { }

تُطبّق فئةٌ ما هذه الواجهة للإشارة إلى إمكانية كتابة أعضاء بياناتها غير العابرةObjectOutputStream إلى كائن . يحتوي ObjectOutputStreamالأسلوب الخاص writeObject0(Object,boolean)على سلسلة من instanceofالاختبارات لتحديد إمكانية الكتابة، أحدها يبحث عن Serializableالواجهة. إذا فشل أيٌّ من هذه الاختبارات، يُطلق الأسلوب استثناءً NotSerializableException.

نقد

إحدى مشكلات واجهات العلامات هي أنه بما أن الواجهة تُعرّف عقدًا لتنفيذ الفئات، وهذا العقد موروث من جميع الفئات الفرعية، فلا يمكن "إلغاء تنفيذ" العلامة. في المثال المذكور، يجب على أي فئة فرعية غير مُخصصة للتسلسل (ربما تعتمد على حالة عابرة) أن تُطلق استثناءات NotSerializableException صراحةً (وفقًا ObjectOutputStreamللوثائق).

يتمثل حل آخر في أن تدعم اللغة البيانات الوصفية بشكل مباشر:

انظر أيضاً

مراجع

  1. بلوخ، جوشوا (2008). "البند 37: استخدام واجهات العلامات لتعريف الأنواع" . جافا الفعالة (الطبعة الثانية ). أديسون - ويسلي. ص 179. ISBN   978-0-321-35668-0.
  2. "واجهة العلامات في جافا" . GeeksforGeeks . 2017-03-06 . تم الاطلاع عليه بتاريخ 2022-05-01 .

للمزيد من القراءة

جافا الفعالة [ 1 ] بقلم جوشوا بلوخ .

  1. بلوخ، جوشوا (2018). جافا الفعالة ( الطبعة الثالثة). بوسطن. ISBN  978-0-13-468599-1. OCLC 1018432176 . {{cite book}}: CS1 maint: موقع الناشر مفقود ( رابط )