الكائن الفوقي
في علم الحاسوب ، يُعرَّف الكائن الفوقي بأنه كائن يُعالج الكائنات الأخرى، أو يُنشئها، أو يصفها، أو يُنفِّذها (بما في ذلك نفسه). يُسمى الكائن الذي ينتمي إليه الكائن الفوقي بالكائن الأساسي. تتضمن بعض المعلومات التي قد يُحددها الكائن الفوقي نوع الكائن الأساسي ، وواجهته ، وفئته ، وأساليبه ، وخصائصه ، وشجرة تحليله ، وما إلى ذلك. تُعد الكائنات الفوقية أمثلة على مفهوم الانعكاس في علم الحاسوب ، حيث يمتلك النظام إمكانية الوصول (عادةً أثناء التشغيل) إلى بنيته الداخلية. يُمكّن الانعكاس النظام من إعادة كتابة نفسه أثناء التنفيذ، وتعديل تنفيذه أثناء تشغيله. [ 1 ]
بروتوكول الكائن الفوقي
يوفر بروتوكول الكائنات الفوقية ( MOP ) المصطلحات ( البروتوكول ) اللازمة للوصول إلى بنية وسلوك أنظمة الكائنات ومعالجتها. تشمل الوظائف النموذجية لبروتوكول الكائنات الفوقية ما يلي: [ 2 ]
- إنشاء أو حذف فئة جديدة
- إنشاء خاصية أو طريقة جديدة
- جعل فئة ما ترث من فئة أخرى ("تغيير بنية الفئة")
- قم بإنشاء أو تغيير الكود الذي يحدد أساليب فئة ما
يتعارض بروتوكول الكائنات الوصفية مع مبدأ الانفتاح/الإغلاق لبرتراند ماير ، الذي ينص على أن أنظمة الكائنات البرمجية يجب أن تكون مفتوحة للتوسيع ولكنها مغلقة للتعديل . يميز هذا المبدأ فعليًا بين توسيع الكائن بإضافة عناصر إليه، وتعديله بإعادة تعريفه، مقترحًا أن الأولى صفة مرغوبة ("يجب أن تكون الكائنات قابلة للتوسيع لتلبية متطلبات حالات الاستخدام المستقبلية")، بينما الثانية غير مرغوبة ("يجب أن توفر الكائنات واجهة مستقرة غير قابلة للمراجعة السريعة"). على النقيض من ذلك، يكشف بروتوكول الكائنات الوصفية بشفافية عن التركيب الداخلي للكائنات ونظام الكائنات بأكمله من خلال النظام نفسه. عمليًا، هذا يعني أن المبرمجين قد يستخدمون الكائنات لإعادة تعريف نفسها، ربما بطرق معقدة للغاية.
علاوة على ذلك، فإن بروتوكول الكائن الفائق ليس مجرد واجهة لتنفيذ "أساسي"؛ بل يتم من خلال بروتوكول الكائن الفائق تنفيذ نظام الكائنات بشكل متكرر من حيث نظام الكائن الفائق ، والذي يتم تنفيذه نظريًا من حيث نظام الكائن الفائق الفائق ، وهكذا حتى يتم تحديد حالة أساسية عشوائية ( حالة متسقة لنظام الكائنات)، مع كون البروتوكول على هذا النحو هو العلاقة الوظيفية المتكررة بين مستويات التنفيذ هذه.
يُتيح تطبيق أنظمة الكائنات بهذه الطريقة إمكانية إعادة تصميم جذرية اختيارية، مما يوفر مرونة كبيرة ولكنه قد يُثير مشكلات عدم استقرار معقدة أو يصعب فهمها (على سبيل المثال، يجب ألا يُحدّث نظام الكائنات بروتوكول الكائن الفائق الخاص به - وهو تمثيله الذاتي الداخلي - بشكل مُدمّر، ولكن من الصعب التنبؤ بالتأثير المُدمّر المحتمل لبعض التحديثات، وقد يصعب تفسيره منطقيًا)، وذلك اعتمادًا على عمق التكرار الذي تنتشر إليه التعديلات المطلوبة. [ 3 ] لهذا السبب، يُستخدم بروتوكول الكائن الفائق، عند وجوده في لغة برمجة، عادةً باعتدال ولأغراض مُتخصصة مثل البرامج التي تُحوّل برامج أخرى أو نفسها بطرق مُعقدة، على سبيل المثال في الهندسة العكسية. [ 4 ]
وقت التشغيل ووقت التجميع
عندما لا تتوفر عملية الترجمة أثناء التشغيل، تظهر تعقيدات إضافية في تطبيق بروتوكول الكائنات الوصفية. على سبيل المثال، من الممكن تغيير تسلسل الأنواع باستخدام هذا البروتوكول، ولكن قد يتسبب ذلك في مشاكل للتعليمات البرمجية المُترجمة باستخدام تعريف بديل لنموذج الفئة. وقد وجدت بعض البيئات حلولًا مبتكرة لهذه المشكلة، مثل معالجة مشكلات الكائنات الوصفية أثناء الترجمة. ومن الأمثلة الجيدة على ذلك OpenC++ . [ 5 ] يتميز نموذج الويب الدلالي الموجه للكائنات بديناميكية أكبر من معظم أنظمة الكائنات القياسية، ويتوافق مع بروتوكولات الكائنات الوصفية أثناء التشغيل. فعلى سبيل المثال، من المتوقع أن تُغير الفئات في نموذج الويب الدلالي علاقاتها ببعضها البعض، وهناك محرك استدلال خاص يُعرف باسم المصنف، والذي يمكنه التحقق من صحة نماذج الفئات المتطورة وتحليلها. [ 6 ]
الاستخدام
The first metaobject protocol was in the Smalltalk object-oriented programming language developed at Xerox PARC. The Common Lisp Object System (CLOS) came later and was influenced by the Smalltalk protocol as well as by Brian C. Smith's original studies on 3-Lisp as an infinite tower of evaluators.[7] The CLOS model, unlike the Smalltalk model, allows a class to have more than one superclass; this raises additional complexity in issues such as resolving the lineage of the class hierarchy on some object instance. CLOS also allows for dynamic multimethod dispatch, which is handled via generic functions rather than message passing like in Smalltalk's single dispatch.[8] The most influential book describing the semantics and implementation of the metaobject protocol in Common Lisp is The Art of the Metaobject Protocol by Gregor Kiczales et al.[9]
Metaobject protocols are also extensively used in software engineering applications. In virtually all commercial CASE, re-engineering, and Integrated Development Environments there is some form of metaobject protocol to represent and manipulate the design artifacts.[10][11][12]
A metaobject protocol is one way to implement aspect-oriented programming. Many of the early founders of MOPs, including Gregor Kiczales, have since moved on to be the primary advocates for aspect-oriented programming. Kiczales et al. of PARC were hired to design AspectJ for Java, a language which does not possess a native metaobject protocol.
See also
References
- ↑Smith, Brian C (1982-01-01). "Procedural Reflection In Programming Languages". MIT Technical Report (MIT-LCS-TR-272). Archived from the original on 13 December 2015. Retrieved 16 December 2013.
- ↑Foote, Brian; Ralph Johnson (1–6 October 1989). "Reflective facilities in Smalltalk-80". Conference proceedings on Object-oriented programming systems, languages and applications. pp. 327–335. doi:10.1145/74877.74911. ISBN 0897913337تم الاطلاع عليه بتاريخ 16 ديسمبر 2013 .
- ↑ فن بروتوكول الكائن الفائق ، الملحق ج - التعايش مع الدائرية
- ↑ فافر، ليليانا؛ ليليانا مارتينيز؛ كلوديا بيريرا (2009). "الهندسة العكسية للبرمجيات الموجهة للكائنات باستخدام MDA". نمذجة المؤسسات، وعمليات الأعمال، ونظم المعلومات . سلسلة محاضرات في معالجة معلومات الأعمال. المجلد 29. سبرينغر. الصفحات 251-263 . doi : 10.1007/978-3-642-01862-6_21 . ISBN 978-3-642-01861-9.
- ↑ تشيبا، شيغيرو (1995). "بروتوكول الكائنات الوصفية للغة C++" . وقائع المؤتمر السنوي العاشر حول أنظمة ولغات وتطبيقات البرمجة كائنية التوجه . الصفحات 285-299 . doi : 10.1145/217838.217868 . ISBN 978-0897917032. S2CID 3090058 . تم الاسترجاع في 27 ديسمبر 2013 .
- ↑ كنوبلاوخ، هولجر؛ أوبرلي، دانيال؛ تيتلو، فيل؛ والاس، إيفان (9 مارس 2006). "مقدمة في الويب الدلالي لمطوري البرمجيات الموجهة للكائنات" . اتحاد شبكة الويب العالمية . تم الاطلاع عليه بتاريخ 30 يوليو 2008 .
- ↑ دانيال ب. فريدمان؛ ميتشل واند (1988). "كشف لغز البرج: وصف غير عاكس للبرج العاكس". وقائع مؤتمر ACM لعام 1986 حول لغة LISP والبرمجة الوظيفية - LFP '86 . الصفحات 298-307 . doi : 10.1145/319838.319871 . ISBN 978-0897912006. S2CID 7974739 .
- ↑ "دمج البرمجة الكائنية والبرمجة الوظيفية" (ملف PDF) . تم الاطلاع عليه بتاريخ 7 يوليو 2016 .
- ↑ كيتزاليس، غريغور؛ جيم دي ريفيير؛ دانيال ج. بوبرو (30 يوليو 1991). فن بروتوكول الكائن الميتا . مطبعة معهد ماساتشوستس للتكنولوجيا. ISBN 978-0262610742.
- ↑ جونسون، لويس؛ ديفيد ر. هاريس؛ كيفن م. بينر؛ مارتن س. فيذر (أكتوبر 1992). "أريس: جانب المتطلبات/المواصفات لـ KBSA". التقرير الفني النهائي لمختبر روما . RL-TR-92-248.
- ↑ "أصل التحسين" (ملف PDF) . www.metaware.fr . ورقة بيضاء من Metaware. مؤرشفة من الأصل (ملف PDF) بتاريخ 7 يناير 2014. تم الاطلاع عليها بتاريخ 6 يناير 2014 .
- ↑ "مرفق الكائنات الوصفية التابع لمجموعة إدارة الكائنات" . omg.org . مجموعة إدارة الكائنات . تم الاطلاع عليه بتاريخ 7 يناير 2014 .
روابط خارجية
- مواصفات Guile MOP (GOOPS، المستندة إلى Tiny CLOS)
- الكائنات الفوقية وبروتوكول الكائنات الفوقية
- بروتوكول الكائنات الوصفية لنظام كائنات Common Lisp (يحتوي على فصلين من كتاب فن بروتوكول الكائنات الوصفية )
- البرمجة الوصفية في بايثون 2.6
- كائن (علوم الحاسوب)
