نمط واجهة العلامة
نمط واجهة العلامات هو نمط تصميم في علوم الحاسوب ، يُستخدم مع اللغات التي توفر معلومات عن أنواع الكائنات أثناء التشغيل. وهو يوفر وسيلة لربط البيانات الوصفية بفئة ما عندما لا تدعم اللغة هذه البيانات الوصفية بشكل صريح.
لاستخدام هذا النمط، تُطبّق فئةٌ واجهةً مُؤشِّرة [ 1 ] (تُسمى أيضًا واجهة الوسم )، وهي واجهة فارغة [ 2 ] ، وتختبر الطرق التي تتفاعل مع مثيلات تلك الفئة وجود هذه الواجهة. في حين أن الواجهة التقليدية تُحدِّد وظائف (في شكل تعريفات طرق) يجب على الفئة المُطبِّقة دعمها، فإن الواجهة المُؤشِّرة ليست مُلزمة بذلك. يُشير وجود هذه الواجهة إلى سلوك مُحدَّد من جانب الفئة المُطبِّقة. الواجهات الهجينة، التي تعمل كواجهات مُؤشِّرة وتُحدِّد الطرق المطلوبة، ممكنة، ولكنها قد تُسبِّب التباسًا إذا استُخدمت بشكل غير صحيح.
مثال
من الأمثلة على تطبيق واجهات العلامات من لغة برمجة جافا الواجهة التالية Serializable:
package java.io ;واجهة عامة قابلة للتسلسل { }تُطبّق فئةٌ ما هذه الواجهة للإشارة إلى إمكانية كتابة أعضاء بياناتها غير العابرةObjectOutputStream إلى كائن . يحتوي ObjectOutputStreamالأسلوب الخاص writeObject0(Object,boolean)على سلسلة من instanceofالاختبارات لتحديد إمكانية الكتابة، أحدها يبحث عن Serializableالواجهة. إذا فشل أيٌّ من هذه الاختبارات، يُطلق الأسلوب استثناءً NotSerializableException.
نقد
إحدى مشكلات واجهات العلامات هي أنه بما أن الواجهة تُعرّف عقدًا لتنفيذ الفئات، وهذا العقد موروث من جميع الفئات الفرعية، فلا يمكن "إلغاء تنفيذ" العلامة. في المثال المذكور، يجب على أي فئة فرعية غير مُخصصة للتسلسل (ربما تعتمد على حالة عابرة) أن تُطلق استثناءات NotSerializableException صراحةً (وفقًا ObjectOutputStreamللوثائق).
يتمثل حل آخر في أن تدعم اللغة البيانات الوصفية بشكل مباشر:
- يدعم كل من إطار عمل .NET ولغة جافا (ابتداءً من جافا 5 (1.5)) هذه البيانات الوصفية. في .NET، تُسمى "السمات المخصصة" ، وفي جافا تُسمى " التعليقات التوضيحية " . على الرغم من اختلاف التسمية، إلا أنهما متطابقان من حيث المفهوم. يمكن تعريفها على الأصناف، ومتغيرات الأعضاء، والأساليب، ومعاملات الأساليب، ويمكن الوصول إليها باستخدام الانعكاس . يُضيف C++26 دعمًا مشابهًا للتعليقات التوضيحية إلى لغة C++ .
- في لغة بايثون ، يُستخدم مصطلح "واجهة العلامة" بشكل شائع في Zope و Plone . تُعرّف الواجهات كبيانات وصفية، ويمكن للفئات الفرعية استخدامها
implementsOnlyللإعلان عن أنها لا تُنفّذ كل شيء من فئاتها الأصلية.
انظر أيضاً
- صمم علامات لتوسيع هذا النمط.
مراجع
- ↑ بلوخ، جوشوا (2008). "البند 37: استخدام واجهات العلامات لتعريف الأنواع" . جافا الفعالة (الطبعة الثانية ). أديسون - ويسلي. ص 179. ISBN 978-0-321-35668-0.
- ↑ "واجهة العلامات في جافا" . GeeksforGeeks . 2017-03-06 . تم الاطلاع عليه بتاريخ 2022-05-01 .
للمزيد من القراءة
جافا الفعالة [ 1 ] بقلم جوشوا بلوخ .
- ↑ بلوخ، جوشوا (2018). جافا الفعالة ( الطبعة الثالثة). بوسطن. ISBN 978-0-13-468599-1. OCLC 1018432176 .
{{cite book}}: CS1 maint: موقع الناشر مفقود ( رابط )
- أنماط تصميم البرمجيات
- جافا (لغة برمجة)
