حدث أبل

أحداث Apple هي آلية الاتصال بين العمليات القائمة على الرسائل في نظام macOS ، وقد ظهرت لأول مرة في نظام System 7 ، وتدعمها جميع إصدارات نظام macOS الكلاسيكي منذ ذلك الحين، بالإضافة إلى نظام macOS . تصف أحداث Apple أحداثًا "عالية المستوى" مثل "فتح مستند" أو "طباعة ملف"، بينما كانت أنظمة التشغيل السابقة تدعم أحداثًا أبسط بكثير، مثل "النقر" و"الضغط على مفتاح". تشكل أحداث Apple أساس نظام البرمجة النصية لنظام macOS، وهو بنية البرمجة النصية المفتوحة (لغة AppleScript هي اللغة الأساسية لهذا النظام ).

نقطة البداية هي صيغة وصفية ديناميكية قابلة للتوسيع تُسمى AEDesc ، وهي عبارة عن رمز OSType يُحدد نوع البيانات، بالإضافة إلى كتلة من البيانات التي تعتمد على النوع. على سبيل المثال، inteيُشير رمز OSType إلى أن البيانات كانت عددًا صحيحًا مُوقّعًا من أربعة بايتات بتنسيق big-endian .

إلى جانب رموز الأنواع المُعرَّفة مسبقًا لأنواع البيانات البسيطة الشائعة، يوجد نوعان مُعرَّفان مسبقًا من واصفات البيانات المُهيكلة: AERecord ، الذي يكون نوع بياناته reco(سجل)، و AEList، الذي يكون نوع بياناته list(قائمة أو مصفوفة). يحتوي الهيكل الداخلي لهذين النوعين على وصف بيانات مُتداخلة بشكل متكرر، كما يربط AERecord كل عنصر بمعرّف حقل سجل فريد، وهو نوع نظام التشغيل (OSType). يوفر مدير أحداث Apple استدعاءات واجهة برمجة التطبيقات (API) لإنشاء هذه الهياكل، بالإضافة إلى استخراج محتوياتها والاستعلام عن نوع المحتوى الذي تحتويه.

يدعم مدير أحداث Apple أيضًا عمليات التحويل ، التي تحوّل بيانات AEDescs من نوع بيانات إلى آخر. بالإضافة إلى عمليات التحويل القياسية، مثل التحويل بين الأعداد الصحيحة والحقيقية، يمكن للتطبيقات تثبيت دوال رد نداء خاصة بها لمعالجة عمليات التحويل ، والتي تتولى التحويل من وإلى أنواع بيانات مخصصة.

يُعدّ حدث Apple سجلاً (AERecord) يحتوي على حقول تعتمد على غرض الحدث. بالإضافة إلى ذلك، يتضمن سمات (تختلف عن حقول السجل، والتي تُسمى الآن معلمات الحدث) من مجموعة مُحددة مسبقًا بواسطة مدير أحداث Apple. تُحدد هذه السمات وظيفة الحدث (من خلال فئة الحدث ومعرّف الحدث )، وعنوان الوجهة الذي سيُرسل إليه الحدث (والذي قد يكون عملية على الجهاز المحلي أو البعيد)، وخيارات أخرى متنوعة للتعامل معه. في البداية، كان لا بد من توصيل الأجهزة البعيدة عبر AppleTalk ، ولكن نظام التشغيل Mac OS 9 أضاف خيار الاتصال عبر TCP/IP .

بعد إرسال حدث Apple إلى العملية المستهدفة، يمكن للعملية المُرسِلة اختيار استلام رد على هذا الحدث. قد يحتوي هذا الرد على معلومات متنوعة مُسترجعة من العملية المستهدفة حول معالجة الحدث الأصلي، بما في ذلك رمز خطأ يُشير إلى النجاح أو الفشل، وأي معلومات طلبها الحدث الأصلي، و/أو أي معلومات أخرى مناسبة.

تُعدّ أحداث Apple أساس نموذج كائن AppleEvent ، والذي بدوره يُشكّل أساس OSA و AppleScript . اعتبارًا من عام 2016تتوفر النسخة الرسمية من واجهة برمجة تطبيقات Apple Event Manager بلغة C ومشتقاتها، بما في ذلك C++ . كما تتوفر روابط رسمية للغتين Objective-C و Swift عبر واجهة برمجة تطبيقات Cocoa . وتوجد روابط غير رسمية للغات أخرى (بدرجات متفاوتة من القيود)، مثل Perl و UserTalk و Ruby و Python .

نموذج الكائن

كان نموذج كائنات أحداث Apple ( AEOM ) عبارة عن مجموعة من البروتوكولات المبنية على أحداث Apple ، والتي تُمكّن التطبيقات العاملة على نظامي التشغيل Mac OS الكلاسيكي و macOS من التحكم في وظائف بعضها البعض. تُسمى التطبيقات التي تُطبّق جزءًا من نموذج AEOM بالتطبيقات القابلة للبرمجة النصية ، لأنها قابلة للتحكم عبر AppleScript . لسوء الحظ، ظل دعم البرمجة النصية متقطعًا وغير متسق طوال تاريخ نظام التشغيل Mac OS الكلاسيكي.

وفرت AEOM طبقةً نحويةً تُمكّن أي تطبيق من نشر كائناته الداخلية، مما يسمح بمعالجة هذه الكائنات بطريقة موحدة. وعلى عكس مفاهيم أخرى مشابهة في اللفظ مثل ToolTalk ، كان هناك تمييز واضح ومستقل بين الأسماء والأفعال ؛ فبدلاً من توفير أوامر منفصلة لـ "إغلاق المستند" و"إغلاق النافذة"، كان هناك فعل "إغلاق " واحد يمكنه الإشارة إلى كائنات "المستند" أو "النافذة"، أو أي كائن آخر ينشره التطبيق.

تم تنظيم الكائنات التي يوفرها التطبيق من خلال دعمه لنموذج كائن التطبيق (AEOM) في تسلسل هرمي. في أعلى الهرم، كان التطبيق نفسه، ويُشار إليه عبر مُعرِّف كائن فارغ. أما الكائنات الأخرى، فكانت تُشار إليها بتحديد الكائن الأصل (بشكل متكرر)، بالإضافة إلى معلومات أخرى تُعرّفها ككائن تابع لذلك الأصل، وكل ذلك مُجمّع في سجل AERecord . يُوفّر الأصل مُكرِّرًا لحصر الكائنات التابعة له، أو الكائنات التابعة لفئة مُحددة، مما يسمح للتطبيقات بالوصول إلى مجموعة من العناصر. كان النظام مُشابهًا بشكل عام لنموذج كائن المستند المُستخدم في لغة XML ، مع بعض الاختلافات في أنماط الوصول.

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

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

تعتمد بنية AppleEvent بأكملها على رموز OSType المكونة من أربعة بايتات لتحديد العناصر ، متجنبةً استخدام الكلمات أو العبارات الإنجليزية (أو أي لغة أخرى). وبدلاً من ذلك، يتم تحديد العلاقة بين رموز AppleEvent الداخلية والأوصاف الخارجية باللغة الطبيعية من خلال مورد aete ( امتداد مصطلحات AppleEvent ) ، وهو امتداد للمصطلحات القياسية المدمجة في AppleScript نفسه. ويمكن للتطبيق توفير موارد aete متعددة للغات متعددة، بما يتماشى مع التصميم الأصلي متعدد اللغات لـ AppleScript.

على سبيل المثال، ضع في اعتبارك تسلسل AppleScript التالي الذي يتحكم في تطبيق رسم وهمي:

أخبر تطبيق "ScriptableDraw" بتعيين لون خلفية نافذة " الرسم الجديد" إلى لون خلفية نافذة " الرسم القديم" .

يتضمن هذا في الواقع إرسال حدثين من نوع AppleEvents إلى التطبيق المستهدف (واستلام ردودهما المقابلة): أولاً، يتم إرسال حدث get-data لاسترداد خاصية لون الخلفية للنافذة المحددة بالاسم "Old Drawing"؛ ثم يتم إرسال حدث set-data لتطبيق القيمة التي تم إرجاعها كخاصية لون الخلفية للنافذة المسماة "New Drawing".

نظرًا لأن نمط الوصول هذا كان شائعًا، فقد استخدمت لغة AppleScript على نطاق واسع عبارة `---` tell، التي تُبدّل السياق إلى الكائن المُسمى بطريقة مشابهة لعبارة with`---` الموجودة في Visual Basic أو Pascal . تُرسل جميع الأوامر التي tellتلي `---` إلى الكائن المُسمى في `--- `، بدلًا من الكائن الافتراضي، وهو التطبيق الحالي.end telltell

أتاحت مُعرّفات الكائنات تحديد الكائنات بطرقٍ مُتعددة. وكان أبرزها استخدام عبارة "where" (والتي تُترجم في مصطلحات AppleScript إلى تعبير تصفية ). على سبيل المثال، احتوت حزمة تطوير البرامج AppleScript 1.0 على شفرة مصدرية لتطبيق تجريبي يُسمى "محرر النصوص القابل للبرمجة"، والذي كان يستجيب لنصوص برمجية مثل:

أخبر تطبيق "محرر النصوص البرمجية" أخبر نافذة "مستند المثال" اجعل نمط نص كل كلمة يزيد طولها عن 7 غامقًا. انتهى الأمر . انتهى الأمر .

حتى اليوم، من النادر العثور على هذا النوع من القوة في لغات البرمجة النصية للأغراض العامة خارج لغة SQL .

كانت إضافة دعم نموذج الكائنات المتقدم (AEOM) في نظام التشغيل Mac OS الكلاسيكي عمليةً معقدة. إذ كان على مطوري التطبيقات تحديد كائناتهم وكتابة التعليمات البرمجية يدويًا لتمكين الوصول إليها. وكان هذا عادةً ما يتخذ شكل تعليمات برمجية لإرجاع الكائن "التالي" من نوع معين، مما يسمح لبرنامج AppleScript بالتكرار عليها. ولكن نظرًا لأن نظام التشغيل لم يكن يحتوي على نموذج كائنات، فقد تُرك هذا العمل بالكامل للمطورين، الذين لم يقم الكثير منهم بتنفيذه. ومن الغريب أن إطار عمل تطبيقات Apple نفسه ، MacApp ، لم يُوفر نموذجًا كهذا باستثناء كائنات واجهة المستخدم الرسومية التي كان يدعمها، مما جعل المطور مرة أخرى يقوم بمعظم عمل كتابة البرامج النصية للكائنات التي تُمثل البيانات نفسها. ولهذه الأسباب مجتمعة، لم يكن دعم AppleScript واسع الانتشار.

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

توفر التطبيقات المطورة باستخدام Cocoa ، النظام المعروف سابقًا باسم OpenStep ، بيئة تشغيل كائنات غنية يمكن الاستعلام عنها من أي تطبيق آخر. هذا يُسهّل بشكل كبير تطبيق AEOM، مما يقلل بشكل ملحوظ من حجم التعليمات البرمجية المطلوبة في التطبيق العادي. بالإضافة إلى ذلك، تُبنى غالبية تطبيقات Cocoa بشكل أساسي من كائنات Cocoa القياسية، والتي تم تحديثها جميعًا لتوفير إمكانية برمجة نصية واسعة النطاق. لا يقتصر هذا على كائنات واجهة المستخدم الرسومية كما هو الحال في MacApp، بل يشمل أيضًا كائنات البيانات الموجودة بداخلها، بما في ذلك النصوص والجداول وقوائم العناصر المختلفة. يُستخدم ملف نصي لربط الأسماء الداخلية "الشبه كائنية" بنسخ قابلة للقراءة البشرية ، وفي معظم الحالات، يكون إنشاء هذا الملف كافيًا لإضافة إمكانية برمجة نصية كبيرة إلى معظم البرامج.

على الرغم من أن تطبيقات Cocoa ليست قائمة على AEOM، وغالبًا ما تستخدم كائنات مختلفة بشكل طفيف عن الكائنات القياسية التي حددتها Apple في الأصل، إلا أن تطبيقات Cocoa بشكل عام أكثر قابلية للبرمجة من نظيراتها "الكلاسيكية" - في الواقع، من غير الشائع العثور على تطبيق Cocoa غير قابل للبرمجة إلى حد ما.

جسر البرمجة

جسر البرمجة النصية هو إطار عمل لنظام macOS يسمح للتطبيقات بالتواصل فيما بينها دون استخدام لغة برمجة نصية وسيطة مثل AppleScript . ومثل AppleScript، يستخدم جسر البرمجة النصية أحداث Apple للتواصل بين التطبيقات . [ 1 ]

يتم استخدام جسر البرمجة النصية عادةً من Objective-C ، [ 1 ] ولكن يمكن استخدامه في لغات برمجة أخرى من خلال جسر Objective-C مثل MacRuby [ 2 ] و PyObjC .

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

  • كوك، ويليام ر. (29 سبتمبر 2006)، "AppleScript" (ملف PDF) ، وقائع المؤتمر الثالث لجمعية ACM SIGPLAN حول تاريخ لغات البرمجة ، جامعة تكساس في أوستن، الصفحات  1-1-1-21، CiteSeerX 10.1.1.76.6993 ، doi : 10.1145/1238844.1238845 ، ISBN  9781595937667، S2CID 220938191 ، تم استرجاعه في 9 مايو 2009 {{citation}}: CS1 maint: location missing publisher ( link ) . على وجه الخصوص، انظر القسم 2.3 "أحداث Apple" (الصفحات 9-13)، على الرغم من أن تاريخ وأهمية أحداث Apple قد نوقشت أيضًا في مكان آخر من الورقة.

مراجع

  1. 1 2 "Scripting Bridge" . وثائق مطوري Apple . تم الاطلاع عليها بتاريخ 2023-02-04 .
  2. بول، رايان (27-09-2011). "دليل تعليمي: أتمتة نظام التشغيل OS X باستخدام MacRuby و Scripting Bridge" . Ars Technica . تم الاطلاع عليه بتاريخ 04-02-2023 .