برمجة مبنية على الأحداث
هذه مقالة غير مراجعة.(مايو 2025) |
في برمجة الكمبيوتر ، تُعرف البرمجة الموجهة بالأحداث (event-driven programming) نموذج برمجة يتم فيه تحديد سير البرنامج بواسطة أحداث خارجية. تشمل الأمثلة الشائعة لهذه الأحداث مدخلات واجهة المستخدم من الفئران،ولوحات المفاتيح، ولوحات اللمس، وشاشات اللمس، بالإضافة إلى مدخلات المستشعرات الخارجية. يمكن أيضًا إنشاء الأحداث برمجيًا، مثل الرسائل القادمة من برامج أخرى، الإشعارات من خيوط تنفيذ أخرى، أو أحداث الشبكة المتنوعة.
ان البرمجة الموجهة بالأحداث هي النموذج السائد المستخدم في تطبيقات واجهات المستخدم الرسومية وخوادم الشبكة .
في التطبيقات التي تعتمد على الأحداث، عادةً ما توجد <b>حلقة أحداث</b> تستمع للأحداث، ثم تقوم بتشغيل وظيفة استدعاء (callback function) عند اكتشاف أي من هذه الأحداث.
يمكن كتابة البرامج التي تعتمد على الأحداث بأي لغة برمجة، على الرغم من أن المهمة تكون أسهل في اللغات التي توفر تجريدات عالية المستوى.
على الرغم من أنها لا تتناسب تمامًا مع نموذج توجيه الأحداث، فإن معالجة المقاطعات ومعالجة الاستثناءات لهما العديد من أوجه التشابه. مممممممممممم على الرغم من أنها لا تتناسب تمامًا مع نموذج توجيه الأحداث (event-driven model)، إلا أن معالجة المقاطعات (interrupt handling) ومعالجة الاستثناءات (exception handling) تشتركان في العديد من أوجه التشابه.
من المهم التمييز بين النماذج التي تعتمد على الأحداث وتلك التي تعتمد على الرسائل (أو التي تُعرف أيضًا بالنماذج التي تعتمد على قائمة الانتظار). الخدمات القائمة على الأحداث (مثل AWS SNS) تكون منفصلة عن مستهلكيها. في المقابل، الخدمات التي تعتمد على قوائم الانتظار/الرسائل (مثل AWS SQS) تكون مقترنة بمستهلكيها.. [1]
حلقة الحدث
[عدل]نظرًا لأن <b>حلقة الحدث</b> التي تستقبل وترسل الأحداث شائعة في مختلف التطبيقات، فإن العديد من أطر البرمجة تتولى مهمة تنفيذها. وبذلك، يُتوقع من المستخدم توفير الكود الخاص بـمعالجات الأحداث فقط.
كانت لغة البرمجة RPG، وهي لغة مبكرة من شركة IBM، تتميز بمفهوم تصميم في ستينيات القرن الماضي يشبه البرمجة القائمة على الأحداث التي ناقشناها أعلاه. فقد قدمت حلقة إدخال/إخراج رئيسية مدمجة (تُعرف باسم "دورة البرنامج") حيث كانت العمليات الحسابية تستجيب وفقًا "للمؤشرات" (<b>الأعلام</b>) التي يتم تعيينها في وقت سابق من الدورة.
معالجات الأحداث
[عدل]يتضمن المنطق الفعلي داخل روتينات معالجة الأحداث (event-handling routines). تتعامل هذه الروتينات مع الأحداث التي سيستجيب لها البرنامج الرئيسي. على سبيل المثال، قد يؤدي النقر بزر الفأرة الأيسر مرة واحدة على زر أمر في برنامج واجهة المستخدم الرسومية إلى تشغيل روتين يفتح نافذة أخرى، أو يحفظ البيانات في قاعدة بيانات، أو ينهي التطبيق. توفر العديد منبيئات التطوير المتكاملة(IDEs) للمبرمج قوالب لأحداث واجهة المستخدم الرسومية، مما يسمح للمبرمج بالتركيز على كتابة كود معالجة الحدث.
في البرامج المتسلسلة، يكون تتبع سير الأحداث سهلاً عادةً. أما في البرامج الموجهة بالأحداث، ولأن معالجات الأحداث تُنفذ استجابةً لأحداث خارجية، فإن هيكلة هذه المعالجات بشكل صحيح لتعمل بأي ترتيب استدعاء قد يتطلب اهتمامًا خاصًا وتخطيطًا دقيقًا.
بالإضافة إلى كتابة معالجات الأحداث (event handlers)، يجب أيضًا ربط هذه المعالجات بالأحداث؛ وذلك لضمان استدعاء الدالة الصحيحة عند وقوع الحدث. بالنسبة لأحداث واجهة المستخدم، تجمع العديد من بيئات التطوير المتكاملة (IDEs) بين هاتين الخطوتين: فبمجرد النقر المزدوج على زر، يقوم المحرر بإنشاء معالج حدث (فارغ) مرتبط بنقرة المستخدم على الزر، ثم يفتح نافذة نصية لتتمكن من تعديل معالج الحدث.
الاستخدامات الشائعة
[عدل]تعتمد غالبية هياكل واجهات المستخدم الرسومية (GUI) الحديثة على البرمجة الموجهة بالأحداث. فمثلاً، يحتوي نظام Windows على <b>حلقة حدث</b> (event loop) خاصة به. وبالمثل، يقوم إطار عمل Java AWT بمعالجة جميع تغييرات واجهة المستخدم على خيط واحد، يُعرف بـ<b>خيط إرسال الحدث</b> (Event Dispatch Thread). وبطريقة مشابهة، تحدث جميع تحديثات واجهة المستخدم في إطار عمل JavaFXعلى خيط تطبيق JavaFX (JavaFX Application Thread). [2]
تعتمد معظم خوادم الشبكة (network servers) وأطر العمل (frameworks)، مثل Node.js، أيضًا على الأحداث..
معالجة المقاطعات والاستثناءات
[عدل]انظر أيضا
[عدل]- التشغيل الطرفي المستقل
- برمجة تدفق البيانات
- أحداث DOM
- الهندسة المعمارية الموجهة للأحداث
- معالجة تدفق الأحداث (مفهوم مشابه)
- لغة وصف الأجهزة
- مقاطعة
- انقلاب السيطرة
- برامج وسيطة موجهة للرسائل
- نموذج البرمجة
- نمط النشر والاشتراك
- نمط المفاعل
- برمجة الإشارة (مفهوم مشابه)
- الهندسة المعمارية الموجهة بالأحداث على مراحل (SEDA)
- نظام التشغيل المؤقت (هندسة بديلة لأنظمة الكمبيوتر)
- التزامن الافتراضي ، نموذج تنفيذ موزع للبرمجة المعتمدة على الأحداث
مراجع
[عدل]- ^ Chandrasekaran، Premanand؛ Krishnan، Karthik؛ Ford، Neal؛ Byars، Brandon؛ Buijze، Allard (2022). Domain-Driven Design with Java - A Practitioner's Guide. Packt Publishing. ISBN:9781800564763.
- ^ Fedortsova، Irina (يونيو 2012). "Concurrency in JavaFX". JavaFX Documentation Home. Oracle. مؤرشف من الأصل في 2024-11-10. اطلع عليه بتاريخ 2018-01-04.
The JavaFX scene graph, which represents the graphical user interface of a JavaFX application, is not thread-safe and can only be accessed and modified from the UI thread also known as the JavaFX Application thread.
روابط خارجية
[عدل]- تم تقديم أنماط التزامن في scaleconf
- البرمجة القائمة على الأحداث: المقدمة، البرنامج التعليمي، التاريخ ، البرنامج التعليمي من تأليف ستيفن فيرج
- البرمجة الموجهة بالأحداث ، برنامج تعليمي من إعداد آلان جولد
- التعاون في الأحداث ، مقال بقلم مارتن فاولر
- إعادة التفكير في خيوط التأرجح ، مقال بقلم جوناثان سيمون
- أسلوب البرمجة الموجه بالأحداث نسخة محفوظة 2005-02-20 على موقع واي باك مشين. ، مقال بقلم كريس ماكدونالد
- البرمجة الموجهة بالأحداث باستخدام تخصص القالب ، مقال بقلم كريستوفر ديجينز
- البرمجة القائمة على الأحداث والوكلاء ، الفصل
- موارد LabWindows/CVI
- نظام نشر/اشتراك الأحداث الموزع ، وهو مثال مفتوح المصدر قيد الإنتاج على MSN.com وMicrosoft.com