डेटा-संचालित प्रोग्रामिंग: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
 
(7 intermediate revisions by 3 users not shown)
Line 2: Line 2:
{{Programming paradigms}}
{{Programming paradigms}}


[[कंप्यूटर प्रोग्रामिंग]] में, '''डेटा-संचालित प्रोग्रामिंग''' एक प्रोग्रामिंग प्रतिमान है जिसमें प्रोग्राम स्टेटमेंट उठाए जाने वाले चरणों के अनुक्रम को परिभाषित करने के बजाय मिलान किए जाने वाले डेटा और आवश्यक प्रसंस्करण का वर्णन करता है।<ref name="awk">{{Cite web |url=http://www.ibm.com/developerworks/aix/tutorials/au-gawk/section2.html |title=Get started with GAWK: AWK language fundamentals |last=Stutz |first=Michael |date=September 19, 2006 |website=developerWorks |publisher=[[IBM]] |archive-url=https://web.archive.org/web/20110520232835/http://www.ibm.com/developerworks/aix/tutorials/au-gawk/section2.html |archive-date=20 May 2011 |access-date=2010-10-23 |quote=[AWK is] often called a data-driven language -- the program statements describe the input data to match and process rather than a sequence of program steps}}</ref> डेटा-संचालित लैंग्वेज के मानक उदाहरण टेक्स्ट-प्रोसेसिंग भाषाएं [[sed]] और [[AWK]] हैं,<ref name="awk" /> और डॉक्यूमेंट ट्रांसफॉर्मेशन लैंग्वेज [[XSLT|XSL]], जहां डेटा एक इनपुट स्ट्रीम में लाइनों का एक अनुक्रम है - इसलिए इन्हें लाइन-ओरिएंटेड लैंग्वेज के रूप में भी जाना जाता है-और पैटर्न मिलान मुख्य रूप से रेगुलर एक्सप्रेशन या लाइन नंबर के माध्यम से किया जाता है।
[[कंप्यूटर प्रोग्रामिंग]] में, '''डेटा-संचालित प्रोग्रामिंग''' एक प्रोग्रामिंग प्रतिमान है जिसमें प्रोग्राम स्टेटमेंट डेटा का मिलान करने के लिए वर्णन करता है और आवश्यक चरणों के अनुक्रम को परिभाषित करने के लिए आवश्यक प्रसंस्करण होता है।<ref name="awk">{{Cite web |url=http://www.ibm.com/developerworks/aix/tutorials/au-gawk/section2.html |title=Get started with GAWK: AWK language fundamentals |last=Stutz |first=Michael |date=September 19, 2006 |website=developerWorks |publisher=[[IBM]] |archive-url=https://web.archive.org/web/20110520232835/http://www.ibm.com/developerworks/aix/tutorials/au-gawk/section2.html |archive-date=20 May 2011 |access-date=2010-10-23 |quote=[AWK is] often called a data-driven language -- the program statements describe the input data to match and process rather than a sequence of program steps}}</ref> डेटा-संचालित लैंग्वेज के मानक उदाहरण टेक्स्ट-प्रोसेसिंग भाषाएं [[sed]] और [[AWK]] हैं,<ref name="awk" /> और डॉक्यूमेंट ट्रांसफॉर्मेशन लैंग्वेज [[XSLT|XSL]], जहां डेटा एक इनपुट स्ट्रीम में लाइनों का एक अनुक्रम है - इसलिए इन्हें लाइन-ओरिएंटेड लैंग्वेज के रूप में भी जाना जाता है-और पैटर्न मिलान मुख्य रूप से रेगुलर एक्सप्रेशन या लाइन नंबर के माध्यम से किया जाता है।


== संबंधित प्रतिमान ==
== संबंधित प्रतिमान ==


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


[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में एब्स्ट्रैक्ट डेटा प्रकार डिज़ाइन विधियों को अपनाने से डेटा-संचालित डिज़ाइन प्राप्त होता है।<ref name="responsibility">{{Cite journal |last1=Wirfs-Brock |first1=Rebecca |author-link=Rebecca Wirfs-Brock |last2=Wilkerson |first2=Brian |year=1989 |title=Object-oriented design: a responsibility-driven approach |journal=Conference Proceedings on Object-Oriented Programming Systems, Languages and Applications |location=New York |publisher=[[Association for Computing Machinery|ACM]] |pages=71–75 |doi=10.1145/74877.74885|isbn=0897913337 |s2cid=7372657 }}</ref> सॉफ़्टवेयर के एक अंश की अवधारणा के दौरान क्लास को परिभाषित करने के लिए इस प्रकार के डिज़ाइन का उपयोग कभी-कभी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में किया जाता है।
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]] में एब्स्ट्रैक्ट डेटा प्रकार डिज़ाइन विधियों को अपनाने से डेटा-संचालित डिज़ाइन प्राप्त होता है।<ref name="responsibility">{{Cite journal |last1=Wirfs-Brock |first1=Rebecca |author-link=Rebecca Wirfs-Brock |last2=Wilkerson |first2=Brian |year=1989 |title=Object-oriented design: a responsibility-driven approach |journal=Conference Proceedings on Object-Oriented Programming Systems, Languages and Applications |location=New York |publisher=[[Association for Computing Machinery|ACM]] |pages=71–75 |doi=10.1145/74877.74885|isbn=0897913337 |s2cid=7372657 }}</ref> सॉफ़्टवेयर के एक अंश की अवधारणा के दौरान क्लास को परिभाषित करने के लिए इस प्रकार के डिज़ाइन का उपयोग कभी-कभी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में किया जाता है।
Line 12: Line 12:
== अनुप्रयोग ==
== अनुप्रयोग ==


डेटा-संचालित प्रोग्रामिंग आमतौर पर संरचित डेटा की स्ट्रीम पर फ़िल्टरिंग, ट्रांसफ़ॉर्मिंग, एकत्रीकरण (जैसे कंप्यूटिंग सांख्यिकी) या अन्य प्रोग्रामों को कॉल करने के लिए लागू की जाती है। विशिष्ट धाराओं में [[कंप्यूटर डेटा लॉगिंग]], [[सीमांकक-पृथक मान]] या ईमेल संदेश शामिल हैं, विशेष रूप से [[ईमेल फ़िल्टरिंग]] के लिए। उदाहरण के लिए, एक AWK प्रोग्राम इनपुट के रूप में लॉग स्टेटमेंट की एक स्ट्रीम ले सकता है, और उदाहरण के लिए सभी को कंसोल पर भेज सकता है, WARNING से शुरू होने वाले स्टेटमेंट को WARNING फ़ाइल में लिख सकता है, और यदि कोई लाइन ERROR से शुरू होती है तो [[sysadmin]] को एक ईमेल भेज सकता है। यह यह भी रिकॉर्ड कर सकता है कि प्रतिदिन कितनी चेतावनियाँ लॉग की जाती हैं। वैकल्पिक रूप से, कोई सीमांकक-पृथक मूल्यों की धाराओं को संसाधित कर सकता है, प्रत्येक पंक्ति या एकत्रित लाइनों को संसाधित कर सकता है, जैसे कि योग या अधिकतम। ईमेल में, [[promail]] जैसी भाषा कुछ ईमेल पर मिलान करने के लिए शर्तों को निर्दिष्ट कर सकती है, और क्या कार्रवाई करनी है (डिलीवर, बाउंस, त्यागें, अग्रेषित, आदि)।
डेटा-संचालित प्रोग्रामिंग को सामान्यतः संरचित डेटा स्ट्रीम फ़िल्टरिंग, ट्रांसफॉर्मिंग, एकत्रीकरण (जैसे कंप्यूटिंग सांख्यिकी) या अन्य प्रोग्रामों को कॉल करने के लिए लागू किया जाता है। विशिष्ट स्ट्रीम में लॉग फ़ाइलें, सीमांकक-पृथक मान, या ईमेल संदेश सम्मिलित हैं, विशेष रूप से [[ईमेल फ़िल्टरिंग]] के लिए। उदाहरण के लिए, एक AWK प्रोग्राम इनपुट के रूप में लॉग स्टेटमेंट की एक स्ट्रीम ले सकता है, और उदाहरण के लिए सभी को कंसोल पर भेज सकता है, चेतावनी से प्रारम्भ होने वाले को "WARNING" फ़ाइल में लिख सकता है, और यदि कोई लाइन "ERROR" से प्रारम्भ होती है तो सिस्टम एडमिन को एक ईमेल भेजें। यह यह भी रिकॉर्ड कर सकता है कि प्रति दिन कितनी चेतावनियां लॉग की जाती हैं। वैकल्पिक रूप से, कोई सीमांकक-पृथक मानों की धाराओं को संसाधित कर सकता है, प्रत्येक पंक्ति या एकत्रित पंक्तियों को संसाधित कर सकता है, जैसे कि योग या अधिकतम। ईमेल में, प्रोमेल जैसी भाषा कुछ ईमेलों पर मिलान करने के लिए शर्तों को निर्दिष्ट कर सकती है, और क्या कार्रवाई करनी है (डिलीवर, डिस्कार्ड, फॉरवर्ड आदि)।


कुछ डेटा-संचालित भाषाएँ [[ट्यूरिंग-पूर्ण]] हैं, जैसे AWK और यहां तक ​​कि sed, जबकि अन्य जानबूझकर बहुत सीमित हैं, विशेष रूप से फ़िल्टरिंग के लिए। उत्तरार्द्ध का एक चरम उदाहरण [[pcap]] है, जिसमें केवल फ़िल्टरिंग शामिल है, जिसमें एकमात्र क्रिया "कैप्चर" है। कम अत्यंत, [[छलनी (मेल फ़िल्टरिंग भाषा)]] में फ़िल्टर और क्रियाएं होती हैं, लेकिन आधार मानक में कोई चर या लूप नहीं होता है, केवल स्टेटलेस फ़िल्टरिंग स्टेटमेंट की अनुमति देता है: प्रत्येक इनपुट तत्व को स्वतंत्र रूप से संसाधित किया जाता है। वेरिएबल स्थिति की अनुमति देते हैं, जो ऐसे संचालन की अनुमति देते हैं जो एक से अधिक इनपुट तत्वों पर निर्भर करते हैं, जैसे एकत्रीकरण (इनपुट का योग) या [[थ्रॉटलिंग प्रक्रिया (कंप्यूटिंग)]] (प्रत्येक प्रेषक से प्रति घंटे अधिकतम 5 मेल की अनुमति देना, या बार-बार लॉग संदेशों को सीमित करना)।
कुछ डेटा-संचालित भाषाएँ ट्यूरिंग-कम्पलीट हैं, जैसे कि AWK और यहां तक कि sed, जबकि अन्य जानबूझकर बहुत सीमित हैं, विशेष रूप से फ़िल्टरिंग के लिए. उत्तरार्द्ध का एक चरम उदाहरण [[pcap]] है, जिसमें केवल फ़िल्टरिंग सम्मिलित है, एकमात्र कार्रवाई “कैप्चर” है। कम अत्यंत, सीव में फिल्टर और क्रियाएं होती हैं, लेकिन आधार मानक में कोई वेरिएबल या लूप नहीं होता है, केवल स्टेटलेस फ़िल्टरिंग स्टेटमेंट की अनुमति देता है: प्रत्येक इनपुट तत्व स्वतंत्र रूप से संसाधित होता है। वेरिएबल्स स्टेट की अनुमति देते हैं, जो एक से अधिक इनपुट तत्व पर निर्भर संचालन की अनुमति देते हैं, जैसे कि एकत्रीकरण (समिंग इनपुट) (या थ्रॉटलिंग प्रत्येक प्रेषक से प्रति घंटे अधिकतम 5 मेल की अनुमति दें, या दोहराया लॉग संदेशों को सीमित करना)।  


डेटा-संचालित लैंग्वेज में अक्सर एक डिफ़ॉल्ट क्रिया होती है: यदि कोई शर्त मेल नहीं खाती है, तो लाइन-ओरिएंटेड भाषाएं लाइन को प्रिंट कर सकती हैं (जैसे कि sed में), या एक संदेश वितरित कर सकती हैं (जैसा कि छलनी में)। कुछ अनुप्रयोगों में, जैसे कि फ़िल्टरिंग, मिलान विशेष रूप से किया जा सकता है (इसलिए केवल पहला मिलान कथन), जबकि अन्य मामलों में सभी मिलान कथन लागू होते हैं। किसी भी मामले में, किसी भी पैटर्न से मेल खाने में विफलता डिफ़ॉल्ट व्यवहार हो सकती है या इसे एक त्रुटि के रूप में देखा जा सकता है, जिसे अंत में कैच-ऑल स्टेटमेंट द्वारा पकड़ा जा सकता है।
डेटा-संचालित भाषाओं में प्रायः एक डिफ़ॉल्ट क्रिया होती है: यदि कोई शर्त मेल नहीं खाती है, तो लाइन-ओरिएंटेड लैंग्वेज लाइन को प्रिंट कर सकती हैं (जैसे कि sed में), या एक मैसेज वितरित कर सकती हैं (जैसा कि सीव में)। कुछ अनुप्रयोगों में, जैसे कि फ़िल्टरिंग, मैचिंग विशेष रूप से किया जा सकता है (इसलिए केवल ''पहला मैचिंग स्टेटमेंट''), जबकि अन्य स्तिथियों में ''आल'' मैचिंग स्टेटमेंट लागू होते हैं। किसी भी स्तिथि में, ''किसी भी'' पैटर्न से मेल खाने में विफलता "डिफ़ॉल्ट बिहेवियर" हो सकती है या इसे एक एरर के रूप में देखा जा सकता है, जिसे अंत में कैच-ऑल स्टेटमेंट द्वारा ज्ञात किया जा सकता है।


== लाभ और मुद्दे ==
== लाभ और समस्याएँ ==


हालांकि कार्यान्वयन के बीच लाभ और मुद्दे भिन्न हो सकते हैं, इस प्रतिमान के कुछ बड़े संभावित लाभ और समस्याएं हैं। कार्यक्षमता के लिए बस यह आवश्यक है कि वह जिन चरों के साथ काम कर रहा है उनके अमूर्त डेटा प्रकार को जानता हो। फ़ंक्शंस और [[प्रोग्रामिंग इंटरफ़ेस]] का उपयोग समान डेटा फ़ील्ड वाले सभी ऑब्जेक्ट पर किया जा सकता है, उदाहरण के लिए ऑब्जेक्ट की स्थिति। डेटा को बिना किसी परिणाम के प्राथमिकता के अनुसार वस्तुओं या संस्थाओं में समूहीकृत किया जा सकता है।
हालाँकि कार्यान्वयन के बीच लाभ और मुद्दे अलग-अलग हो सकते हैं, इस प्रतिमान के कुछ बड़े संभावित लाभ और समस्याएं हैं। कार्यक्षमता के लिए बस यह आवश्यक है कि वह जिन चरों के साथ काम कर रहा है, उनके सार डेटा प्रकार को जानता हो। फ़ंक्शन और [[प्रोग्रामिंग इंटरफ़ेस|इंटरफ़ेस]] का उपयोग सभी ऑब्जेक्ट पर समान डेटा फ़ील्ड के साथ किया जा सकता है, उदाहरण के लिए ऑब्जेक्ट की "स्थिति"। डेटा को वरीयता के अनुसार वस्तुओं या "इकाइयों" में समूहीकृत किया जा सकता है, जिसका कोई परिणाम नहीं होगा।


जबकि डेटा-संचालित डिज़ाइन डेटा और कार्यक्षमता के युग्मन को रोकता है, कुछ मामलों में, डेटा-संचालित प्रोग्रामिंग खराब [[वस्तु-उन्मुख डिज़ाइन]] को जन्म देती है, खासकर जब अधिक अमूर्त डेटा से निपटते हैं। ऐसा इसलिए है क्योंकि विशुद्ध रूप से डेटा-संचालित ऑब्जेक्ट या इकाई को [[डेटा प्रतिनिधित्व]] के तरीके से परिभाषित किया जाता है। वस्तु की संरचना को बदलने का कोई भी प्रयास उस पर निर्भर कार्यों को तुरंत तोड़ देगा।
जबकि डेटा-संचालित डिज़ाइन डेटा और कार्यक्षमता के युग्मन को रोकता है, कुछ स्थितियों में, डेटा-संचालित प्रोग्रामिंग खराब ऑब्जेक्ट-ओरिएंटेड डिज़ाइन को उत्पन्न देती है, खासकर जब अधिक अमूर्त डेटा से निपटते हैं। ऐसा इसलिए है क्योंकि विशुद्ध रूप से डेटा-संचालित ऑब्जेक्ट या इकाई को उसके प्रस्तुत करने के तरीके से परिभाषित किया जाता है। वस्तु की संरचना को बदलने का कोई भी प्रयास उस पर निर्भर प्रोग्राम को तुरंत बंद कर देगा।


उदाहरण के तौर पर, कोई [[ ऑटोमोटिव नेविगेशन प्रणाली ]] को चौराहों (दो प्रतिच्छेदी सड़कों) की एक श्रृंखला के रूप में प्रस्तुत कर सकता है, जहां चालक को दाएं या बाएं मुड़ना होगा। यदि एक चौराहे (संयुक्त राज्य अमेरिका में) को [[ज़िप कोड]] (5-अंकीय संख्या) और दो सड़क नामों (पाठ की स्ट्रिंग) द्वारा डेटा में दर्शाया जाता है, तो बग तब दिखाई दे सकते हैं जब एक शहर जहां सड़कों का [[चौराहा (सड़क)]] कई बार सामने आता है। हालांकि इस उदाहरण को अधिक सरलीकृत किया जा सकता है, सॉफ़्टवेयर इंजीनियरिंग में डेटा का पुनर्गठन एक काफी आम समस्या है, या तो बग को खत्म करने, दक्षता बढ़ाने या नई सुविधाओं का समर्थन करने के लिए।
उदाहरण के तौर पर, कोई ड्राइविंग दिशाओं को प्रतिच्छेदन (टू इंटरसेक्टिंग रोड) की एक श्रृंखला के रूप में प्रस्तुत कर सकता है, जहां चालक को दाएं या बाएं मुड़ना होगा। यदि एक प्रतिच्छेदन (संयुक्त राज्य अमेरिका में) को ज़िप कोड (5-अंकीय संख्या) और दो रोड नामों (टेक्स्ट की स्ट्रिंग) द्वारा डेटा में दर्शाया जाता है, तो बग तब दिखाई दे सकते हैं जब किसी शहर में सड़कें कई बार एक दूसरे को काटती हैं। हालांकि इस उदाहरण को अधिक सरलीकृत किया जा सकता है, सॉफ़्टवेयर इंजीनियरिंग में डेटा का पुनर्गठन एक काफी आम समस्या है, या तो बग को खत्म करने, दक्षता बढ़ाने या नई सुविधाओं का समर्थन करने के लिए है।


== भाषाएँ ==
== भाषाएँ ==


*अरे<ref name="awk" />* [[ओज़ (प्रोग्रामिंग भाषा)]]
* awk <ref name="awk" />
* [[पर्ल]] - AWK और sed की तरह डेटा-संचालित प्रोग्रामिंग पर्ल द्वारा समर्थित एक प्रतिमान है
* ओज़
*सेड
* [[पर्ल]]AWK और sed की तरह डेटा-संचालित प्रोग्रामिंग, पर्ल द्वारा समर्थित एक प्रतिमान है
* [[लुआ (प्रोग्रामिंग भाषा)]]<ref>{{Cite web |url=https://www.lua.org/manual/5.3/manual.html |title=Lua 5.3 Reference Manual |last1=Ierusalimschy |first1=Roberto |last2=de Figueiredo |first2=Luiz Henrique |date=2017-02-03 |website=www.lua.org |access-date=2018-06-05 |last3=Celes |first3=Waldemar}}</ref>
* एसईडी
* [[क्लोजर (प्रोग्रामिंग भाषा)]]<ref>{{Cite web |url=https://www.clojure.org |title=क्लोजर|website=www.clojure.org |access-date=2018-06-05}}</ref>
* लुआ[3]
* [https://tkatchev.bitbucket.io/tab टैब (भाषा)]
* क्लोजर[4]
* [[एफडीएम (सॉफ्टवेयर)]]
* टैब (भाषा)
* [[मेल प्राप्त करने का स्थान]]
* एफडीएम
* प्रोमेल
* मेलड्रॉप
* छलनी (मेल फ़िल्टरिंग भाषा)
* प्रोमेल  
* [[बुनियादी]]
* सीव
* बेसिक
* एक्सएसएलटी
* एक्सएसएलटी


== यह भी देखें ==
== यह भी देखें ==


* [[डेटा-निर्देशित प्रोग्रामिंग]]
* ऐरे प्रोग्रामिंग
* डेटा-ड्रिवेन प्रोग्रामिंग  
* बैकस-नौर फॉर्म
* बैकस-नौर फॉर्म


Line 58: Line 60:


{{Types of programming languages}}
{{Types of programming languages}}
[[Category: प्रोग्रामिंग प्रतिमान]]


 
[[Category:Articles with hatnote templates targeting a nonexistent page]]
 
[[Category:Collapse templates]]
[[Category: Machine Translated Page]]
[[Category:Created On 25/07/2023]]
[[Category:Created On 25/07/2023]]
[[Category:Machine Translated Page]]
[[Category:Navigational boxes| ]]
[[Category:Navigational boxes without horizontal lists]]
[[Category:Pages with script errors]]
[[Category:Sidebars with styles needing conversion]]
[[Category:Template documentation pages|Documentation/doc]]
[[Category:Templates Vigyan Ready]]
[[Category:Templates generating microformats]]
[[Category:Templates that are not mobile friendly]]
[[Category:Templates using TemplateData]]
[[Category:Wikipedia metatemplates]]
[[Category:प्रोग्रामिंग प्रतिमान]]

Latest revision as of 17:11, 8 August 2023

कंप्यूटर प्रोग्रामिंग में, डेटा-संचालित प्रोग्रामिंग एक प्रोग्रामिंग प्रतिमान है जिसमें प्रोग्राम स्टेटमेंट डेटा का मिलान करने के लिए वर्णन करता है और आवश्यक चरणों के अनुक्रम को परिभाषित करने के लिए आवश्यक प्रसंस्करण होता है।[1] डेटा-संचालित लैंग्वेज के मानक उदाहरण टेक्स्ट-प्रोसेसिंग भाषाएं sed और AWK हैं,[1] और डॉक्यूमेंट ट्रांसफॉर्मेशन लैंग्वेज XSL, जहां डेटा एक इनपुट स्ट्रीम में लाइनों का एक अनुक्रम है - इसलिए इन्हें लाइन-ओरिएंटेड लैंग्वेज के रूप में भी जाना जाता है-और पैटर्न मिलान मुख्य रूप से रेगुलर एक्सप्रेशन या लाइन नंबर के माध्यम से किया जाता है।

संबंधित प्रतिमान

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

ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में एब्स्ट्रैक्ट डेटा प्रकार डिज़ाइन विधियों को अपनाने से डेटा-संचालित डिज़ाइन प्राप्त होता है।[2] सॉफ़्टवेयर के एक अंश की अवधारणा के दौरान क्लास को परिभाषित करने के लिए इस प्रकार के डिज़ाइन का उपयोग कभी-कभी ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में किया जाता है।

अनुप्रयोग

डेटा-संचालित प्रोग्रामिंग को सामान्यतः संरचित डेटा स्ट्रीम फ़िल्टरिंग, ट्रांसफॉर्मिंग, एकत्रीकरण (जैसे कंप्यूटिंग सांख्यिकी) या अन्य प्रोग्रामों को कॉल करने के लिए लागू किया जाता है। विशिष्ट स्ट्रीम में लॉग फ़ाइलें, सीमांकक-पृथक मान, या ईमेल संदेश सम्मिलित हैं, विशेष रूप से ईमेल फ़िल्टरिंग के लिए। उदाहरण के लिए, एक AWK प्रोग्राम इनपुट के रूप में लॉग स्टेटमेंट की एक स्ट्रीम ले सकता है, और उदाहरण के लिए सभी को कंसोल पर भेज सकता है, चेतावनी से प्रारम्भ होने वाले को "WARNING" फ़ाइल में लिख सकता है, और यदि कोई लाइन "ERROR" से प्रारम्भ होती है तो सिस्टम एडमिन को एक ईमेल भेजें। यह यह भी रिकॉर्ड कर सकता है कि प्रति दिन कितनी चेतावनियां लॉग की जाती हैं। वैकल्पिक रूप से, कोई सीमांकक-पृथक मानों की धाराओं को संसाधित कर सकता है, प्रत्येक पंक्ति या एकत्रित पंक्तियों को संसाधित कर सकता है, जैसे कि योग या अधिकतम। ईमेल में, प्रोमेल जैसी भाषा कुछ ईमेलों पर मिलान करने के लिए शर्तों को निर्दिष्ट कर सकती है, और क्या कार्रवाई करनी है (डिलीवर, डिस्कार्ड, फॉरवर्ड आदि)।

कुछ डेटा-संचालित भाषाएँ ट्यूरिंग-कम्पलीट हैं, जैसे कि AWK और यहां तक कि sed, जबकि अन्य जानबूझकर बहुत सीमित हैं, विशेष रूप से फ़िल्टरिंग के लिए. उत्तरार्द्ध का एक चरम उदाहरण pcap है, जिसमें केवल फ़िल्टरिंग सम्मिलित है, एकमात्र कार्रवाई “कैप्चर” है। कम अत्यंत, सीव में फिल्टर और क्रियाएं होती हैं, लेकिन आधार मानक में कोई वेरिएबल या लूप नहीं होता है, केवल स्टेटलेस फ़िल्टरिंग स्टेटमेंट की अनुमति देता है: प्रत्येक इनपुट तत्व स्वतंत्र रूप से संसाधित होता है। वेरिएबल्स स्टेट की अनुमति देते हैं, जो एक से अधिक इनपुट तत्व पर निर्भर संचालन की अनुमति देते हैं, जैसे कि एकत्रीकरण (समिंग इनपुट) (या थ्रॉटलिंग प्रत्येक प्रेषक से प्रति घंटे अधिकतम 5 मेल की अनुमति दें, या दोहराया लॉग संदेशों को सीमित करना)।

डेटा-संचालित भाषाओं में प्रायः एक डिफ़ॉल्ट क्रिया होती है: यदि कोई शर्त मेल नहीं खाती है, तो लाइन-ओरिएंटेड लैंग्वेज लाइन को प्रिंट कर सकती हैं (जैसे कि sed में), या एक मैसेज वितरित कर सकती हैं (जैसा कि सीव में)। कुछ अनुप्रयोगों में, जैसे कि फ़िल्टरिंग, मैचिंग विशेष रूप से किया जा सकता है (इसलिए केवल पहला मैचिंग स्टेटमेंट), जबकि अन्य स्तिथियों में आल मैचिंग स्टेटमेंट लागू होते हैं। किसी भी स्तिथि में, किसी भी पैटर्न से मेल खाने में विफलता "डिफ़ॉल्ट बिहेवियर" हो सकती है या इसे एक एरर के रूप में देखा जा सकता है, जिसे अंत में कैच-ऑल स्टेटमेंट द्वारा ज्ञात किया जा सकता है।

लाभ और समस्याएँ

हालाँकि कार्यान्वयन के बीच लाभ और मुद्दे अलग-अलग हो सकते हैं, इस प्रतिमान के कुछ बड़े संभावित लाभ और समस्याएं हैं। कार्यक्षमता के लिए बस यह आवश्यक है कि वह जिन चरों के साथ काम कर रहा है, उनके सार डेटा प्रकार को जानता हो। फ़ंक्शन और इंटरफ़ेस का उपयोग सभी ऑब्जेक्ट पर समान डेटा फ़ील्ड के साथ किया जा सकता है, उदाहरण के लिए ऑब्जेक्ट की "स्थिति"। डेटा को वरीयता के अनुसार वस्तुओं या "इकाइयों" में समूहीकृत किया जा सकता है, जिसका कोई परिणाम नहीं होगा।

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

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

भाषाएँ

  • awk [1]
  • ओज़
  • पर्ल– AWK और sed की तरह डेटा-संचालित प्रोग्रामिंग, पर्ल द्वारा समर्थित एक प्रतिमान है
  • एसईडी
  • लुआ[3]
  • क्लोजर[4]
  • टैब (भाषा)
  • एफडीएम
  • मेलड्रॉप
  • प्रोमेल
  • सीव
  • बेसिक
  • एक्सएसएलटी

यह भी देखें

  • ऐरे प्रोग्रामिंग
  • डेटा-ड्रिवेन प्रोग्रामिंग
  • बैकस-नौर फॉर्म

संदर्भ

  1. 1.0 1.1 1.2 Stutz, Michael (September 19, 2006). "Get started with GAWK: AWK language fundamentals". developerWorks. IBM. Archived from the original on 20 May 2011. Retrieved 2010-10-23. [AWK is] often called a data-driven language -- the program statements describe the input data to match and process rather than a sequence of program steps
  2. Wirfs-Brock, Rebecca; Wilkerson, Brian (1989). "Object-oriented design: a responsibility-driven approach". Conference Proceedings on Object-Oriented Programming Systems, Languages and Applications. New York: ACM: 71–75. doi:10.1145/74877.74885. ISBN 0897913337. S2CID 7372657.


बाहरी संबंध