इवेंट-संचालित प्रोग्रामिंग

From alpha
Jump to navigation Jump to search

कंप्यूटर प्रोग्रामिंग में, इवेंट-संचालित प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जिसमें नियंत्रण प्रवाह घटना (कंप्यूटिंग) जैसे उपयोगकर्ता क्रियाओं (कम्प्यूटर का माउस क्लिक, कुंजी प्रेस), सेंसर आउटपुट, या अन्य प्रोग्राम या थ्रेड से गुजरने वाले संदेश द्वारा निर्धारित किया जाता है। कंप्यूटर विज्ञान)। इवेंट-संचालित प्रोग्रामिंग ग्राफिकल यूज़र इंटरफ़ेस और अन्य अनुप्रयोगों (उदाहरण के लिए, जावास्क्रिप्ट वेब अनुप्रयोग) में उपयोग किया जाने वाला प्रमुख प्रतिमान है जो इनपुट/आउटपुट के जवाब में कुछ क्रियाएं करने पर केंद्रित है। यह डिवाइस ड्राइवरों के लिए प्रोग्रामिंग के लिए भी सच है (उदाहरण के लिए, यूएसबी डिवाइस ड्राइवर स्टैक में पी (प्रोग्रामिंग भाषा)[1]).

इवेंट-संचालित एप्लिकेशन में, आम तौर पर एक इवेंट लूप होता है जो घटनाओं को सुनता है और फिर उनमें से एक घटना का पता चलने पर कॉलबैक (कंप्यूटर प्रोग्रामिंग) ट्रिगर करता है। अंतः स्थापित प्रणाली में, लगातार चलने वाले मुख्य लूप के बजाय हार्डवेयर व्यवधान का उपयोग करके इसे प्राप्त किया जा सकता है। इवेंट-संचालित प्रोग्राम किसी भी प्रोग्रामिंग भाषा में लिखे जा सकते हैं, हालाँकि यह कार्य उन भाषाओं में आसान है जो अमूर्तता (कंप्यूटर विज्ञान) | उच्च-स्तरीय अमूर्तता प्रदान करते हैं, जैसे कि एसिंक/प्रतीक्षा और समापन (कंप्यूटर प्रोग्रामिंग)

इवेंट हैंडलर

एक तुच्छ ईवेंट हैंडलर

क्योंकि घटनाओं की जांच के लिए कोड और मुख्य लूप अनुप्रयोगों के बीच आम हैं, कई प्रोग्रामिंग फ्रेमवर्क उनके कार्यान्वयन का ख्याल रखते हैं और उम्मीद करते हैं कि उपयोगकर्ता केवल इवेंट हैंडलर के लिए कोड प्रदान करेगा। इस सरल उदाहरण में, किसी ईवेंट हैंडलर को कॉल किया जा सकता है OnKeyEnter() जिसमें ENTER कुंजी दबाने से पहले उपयोगकर्ता द्वारा टाइप किए गए अक्षरों के अनुरूप वर्णों की एक स्ट्रिंग के साथ एक तर्क शामिल है। दो नंबर जोड़ने के लिए, इवेंट हैंडलर के बाहर स्टोरेज का उपयोग किया जाना चाहिए। कार्यान्वयन नीचे जैसा दिख सकता है।

globally declare the counter K and the integer T.
OnKeyEnter(character C)
{
   convert C to a number N
   if K is zero store N in T and increment K
   otherwise, add N to T, print the result and reset K to zero
}

जबकि अनुक्रमिक कार्यक्रम में इतिहास का ट्रैक रखना आम तौर पर तुच्छ होता है क्योंकि ईवेंट हैंडलर बाहरी घटनाओं के जवाब में निष्पादित होते हैं, किसी भी क्रम में बुलाए जाने पर काम करने के लिए हैंडलर को सही ढंग से संरचित करने के लिए ईवेंट-संचालित प्रोग्राम में विशेष ध्यान और योजना की आवश्यकता हो सकती है।

इवेंट हैंडलर बनाना

इवेंट-संचालित प्रोग्राम विकसित करने में पहला कदम सबरूटीन्स, या विधि (कंप्यूटर विज्ञान) की एक श्रृंखला लिखना है, जिसे इवेंट-हैंडलर रूटीन कहा जाता है। ये रूटीन उन घटनाओं को संभालते हैं जिन पर मुख्य कार्यक्रम प्रतिक्रिया देगा। उदाहरण के लिए, ग्राफिकल यूजर इंटरफेस प्रोग्राम में कमांड बटन पर एक सिंगल लेफ्ट-बटन माउस-क्लिक एक रूटीन को ट्रिगर कर सकता है जो एक और विंडो खोलेगा, डेटा को डेटाबेस में सेव करेगा या एप्लिकेशन से बाहर निकल जाएगा। कई आधुनिक प्रोग्रामिंग वातावरण प्रोग्रामर को इवेंट टेम्पलेट प्रदान करते हैं, जिससे प्रोग्रामर को इवेंट कोड लिखने पर ध्यान केंद्रित करने की अनुमति मिलती है।

दूसरा चरण ईवेंट हैंडलर्स को ईवेंट से बांधना है ताकि ईवेंट होने पर सही फ़ंक्शन कॉल किया जा सके। ग्राफिकल संपादक पहले दो चरणों को जोड़ते हैं: एक बटन पर डबल-क्लिक करें, और संपादक बटन पर क्लिक करने वाले उपयोगकर्ता से जुड़ा एक (खाली) ईवेंट हैंडलर बनाता है और एक टेक्स्ट विंडो खोलता है ताकि आप ईवेंट हैंडलर को संपादित कर सकें।

इवेंट-संचालित प्रोग्राम विकसित करने में तीसरा चरण मुख्य लूप लिखना है। यह एक फ़ंक्शन है जो घटनाओं की घटना की जांच करता है, और फिर इसे संसाधित करने के लिए मिलान करने वाले ईवेंट हैंडलर को कॉल करता है। अधिकांश इवेंट-संचालित प्रोग्रामिंग वातावरण पहले से ही यह मुख्य लूप प्रदान करते हैं, इसलिए इसे एप्लिकेशन प्रोग्रामर द्वारा विशेष रूप से प्रदान करने की आवश्यकता नहीं है। आईबीएम आरपीजी, आईबीएम की एक प्रारंभिक प्रोग्रामिंग भाषा, जिसकी 1960 के दशक की डिज़ाइन अवधारणा ऊपर चर्चा की गई इवेंट-संचालित प्रोग्रामिंग के समान थी, एक अंतर्निहित मुख्य I/O लूप (प्रोग्राम चक्र के रूप में जाना जाता है) प्रदान करता है जहां गणना 'संकेतकों' के अनुसार प्रतिक्रिया देती है। ' (ध्वज (कंप्यूटिंग)) जो पहले चक्र में स्थापित किए गए थे।

पीएल/आई में अपवाद हैंडलर

पीएल/आई में, भले ही कोई प्रोग्राम मुख्य रूप से इवेंट-संचालित न हो, कुछ असामान्य घटनाएं जैसे हार्डवेयर त्रुटि, ओवरफ़्लो (सॉफ़्टवेयर) या प्रोग्राम जांच हो सकती हैं जो संभवतः आगे की प्रक्रिया को रोकती हैं। समाप्ति से पहले बाद में सफाई करने के लिए हाउसकीपिंग (कंप्यूटिंग) रूटीन प्रदान करने, या पुनर्प्राप्ति संचालन करने और बाधित प्रक्रिया पर वापस लौटने के लिए (अनदेखे) कॉलर्स में ओएन स्टेटमेंट द्वारा अपवाद हैंडलिंग प्रदान की जा सकती है।

सामान्य उपयोग

अधिकांश मौजूदा जीयूआई विकास उपकरण और आर्किटेक्चर इवेंट-संचालित प्रोग्रामिंग पर निर्भर करते हैं।[2] जावा एडब्ल्यूटी फ्रेमवर्क सभी यूआई परिवर्तनों को एक ही थ्रेड पर संसाधित करता है, जिसे इवेंट प्रेषण धागा कहा जाता है। इसी प्रकार, जावा फ्रेमवर्क जावाएफएक्स में सभी यूआई अपडेट जावाएफएक्स एप्लिकेशन थ्रेड पर होते हैं।[3] इसके अलावा, Node.js जैसे सिस्टम भी इवेंट-संचालित होते हैं।[4]


आलोचना

उन प्रोग्रामों के डिज़ाइन की आलोचना की गई है जो इवेंट-एक्शन मॉडल पर निर्भर हैं, और यह सुझाव दिया गया है कि इवेंट-एक्शन मॉडल प्रोग्रामर्स को त्रुटि-प्रवण, विस्तार करने में मुश्किल और अत्यधिक जटिल एप्लिकेशन कोड बनाने की ओर ले जाता है।[2]एक व्यवहार्य विकल्प के रूप में टेबल-संचालित राज्य मशीनों की वकालत की गई है।[5] दूसरी ओर, टेबल-संचालित राज्य मशीनें स्वयं राज्य विस्फोट समस्या#कंप्यूटिंग घटना सहित महत्वपूर्ण कमजोरियों से ग्रस्त हैं।[6] इसका एक समाधान पेट्री डिश का उपयोग करना है।

स्टैकलेस थ्रेडिंग

हार्डवेयर विवरण भाषाओं में इवेंट-संचालित दृष्टिकोण का उपयोग किया जाता है। किसी इवेंट को सक्रिय रूप से संसाधित करते समय थ्रेड संदर्भ को केवल सीपीयू स्टैक की आवश्यकता होती है; एक बार हो जाने के बाद, सीपीयू अन्य इवेंट-संचालित थ्रेड्स को संसाधित करने के लिए आगे बढ़ सकता है, जो बहुत बड़ी संख्या में थ्रेड्स को संभालने की अनुमति देता है। यह मूलतः एक परिमित-राज्य मशीन दृष्टिकोण है।

यह भी देखें

संदर्भ

  1. Vivek Gupta; Ethan Jackson; Shaz Qadeer; Sriram Rajamani (November 2012). "P: Safe Asynchronous Event-Driven Programming". Microsoft Research. Retrieved 20 February 2017.
  2. 2.0 2.1 Samek, Miro (April 1, 2013). "Who Moved My State?". Dr. Dobb's. Retrieved 2018-01-28.
  3. Fedortsova, Irina (June 2012). "Concurrency in JavaFX". JavaFX Documentation Home. Oracle. Retrieved 4 January 2018. 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.
  4. Event-Driven Programming in Node.js.
  5. Samek, Miro (11 March 2009). "इवेंट-संचालित सिस्टम के लिए राज्य मशीनें". Retrieved 19 March 2013.
  6. Patrick Schaumont (2012-11-27). A Practical Introduction to Hardware/Software Codesign. ISBN 978-1-4614-3737-6.


बाहरी संबंध