स्केलेटन (कंप्यूटर प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
No edit summary
Line 4: Line 4:
'''स्केलेटन प्रोग्रामिंग''' सरल उच्च-स्तरीय प्रोग्राम संरचनाओं और तथाकथित '''डमी कोड''' पर आधारित [[कंप्यूटर प्रोग्रामिंग]] की एक शैली है। प्रोग्राम स्केलेटन [[स्यूडोकोड]] के समान होते हैं, लेकिन कोड के विश्लेषण, संकलन और परीक्षण की अनुमति देते हैं। प्रसंस्करण अनुकरण करने और [[संकलक|संकलन]] त्रुटि संदेशों से बचने के लिए प्रोग्राम स्केलेटन में डमी कोड डाला गया है। इसमें खाली फ़ंक्शन घोषणाएं सम्मलित हो सकती हैं, या ऐसे फ़ंक्शन जो केवल एक साधारण परीक्षण स्थिति के लिए सही परिणाम देते हैं जहां कोड की अपेक्षित प्रतिक्रिया ज्ञात होती है।  
'''स्केलेटन प्रोग्रामिंग''' सरल उच्च-स्तरीय प्रोग्राम संरचनाओं और तथाकथित '''डमी कोड''' पर आधारित [[कंप्यूटर प्रोग्रामिंग]] की एक शैली है। प्रोग्राम स्केलेटन [[स्यूडोकोड]] के समान होते हैं, लेकिन कोड के विश्लेषण, संकलन और परीक्षण की अनुमति देते हैं। प्रसंस्करण अनुकरण करने और [[संकलक|संकलन]] त्रुटि संदेशों से बचने के लिए प्रोग्राम स्केलेटन में डमी कोड डाला गया है। इसमें खाली फ़ंक्शन घोषणाएं सम्मलित हो सकती हैं, या ऐसे फ़ंक्शन जो केवल एक साधारण परीक्षण स्थिति के लिए सही परिणाम देते हैं जहां कोड की अपेक्षित प्रतिक्रिया ज्ञात होती है।  


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


[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग]] में उपयोग किए जाने वाले [[टेम्पलेट विधि डिजाइन पैटर्न|टेम्पलेट विधि डिज़ाइन पैटर्न]] में स्केलेटन प्रोग्राम का उपयोग किया जाता है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, डमी कोड सार विधि, विधि स्टब या [[नकली वस्तु|अनुकरण ऑब्जेक्ट]] से मेल खाता है। [[ जावा दूरस्थ विधि मंगलाचरण |जावा रिमोट मेथड इनवोकेशन]] (जावा आरएमआई) नामकरण में, [[ स्टब (कंप्यूटर विज्ञान) |स्टब]] क्लाइंट-साइड पर सर्वर-साइड पर स्केलेटन के साथ संचार करता है।<ref>{{cite book
[[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग]] में उपयोग किए जाने वाले [[टेम्पलेट विधि डिजाइन पैटर्न|टेम्पलेट विधि डिज़ाइन पैटर्न]] में स्केलेटन प्रोग्राम का उपयोग किया जाता है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, डमी कोड संक्षेप विधि, विधि स्टब या [[नकली वस्तु|अनुकरण ऑब्जेक्ट]] से मेल खाता है। [[ जावा दूरस्थ विधि मंगलाचरण |जावा रिमोट मेथड इनवोकेशन]] (जावा आरएमआई) नामकरण में, [[ स्टब (कंप्यूटर विज्ञान) |स्टब]] क्लाइंट-साइड पर सर्वर-साइड पर स्केलेटन के साथ संचार करता है।<ref>{{cite book
  | last1        = Freeman
  | last1        = Freeman
  | first1        = Eric
  | first1        = Eric
Line 30: Line 30:
}}</ref>  
}}</ref>  


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


== पृष्ठभूमि ==
== पृष्ठभूमि ==
आधुनिक [[ सॉफ़्टवेयर ]]<ref>{{Cite web|last=Lowery|first=Jeff|date=2019-11-02|title=Why is Software Development Difficult?|url=https://levelup.gitconnected.com/why-is-software-development-difficult-81a2a041d35e|access-date=2020-11-15|website=Medium|language=en}}</ref> कई कारणों से अक्सर जटिल होता है। इसका मतलब यह हो सकता है कि केवल एक [[प्रोग्रामर]] इसे विकसित नहीं कर सकता है, या अन्य मॉड्यूल या भागों को अलग से आयात करना होगा। कार्यक्रम भी अपने आप में बहुत जटिल हो सकते हैं, कुछ एक ही समय में एक [[चर (कंप्यूटर विज्ञान)]] तक पहुँचने के कई तरीकों के साथ या डिस्प्ले के लिए [[पिक्सेल]] भी उत्पन्न कर सकते हैं। [[संकलन (कंप्यूटिंग)]] के समय कम से कम त्रुटियों के साथ अपने कोड को विकसित करने के लिए प्रोग्रामर की सहायता के लिए कंकाल कोड का उपयोग किया जाता है।
आधुनिक [[ सॉफ़्टवेयर |सॉफ्टवेयर]]<ref>{{Cite web|last=Lowery|first=Jeff|date=2019-11-02|title=Why is Software Development Difficult?|url=https://levelup.gitconnected.com/why-is-software-development-difficult-81a2a041d35e|access-date=2020-11-15|website=Medium|language=en}}</ref> प्रायः कई कारणों से जटिल होता है। इसका अर्थ यह हो सकता है कि केवल एक ही [[प्रोग्रामर]] इसे विकसित नहीं कर सकता है, या यह कि अन्य मॉड्यूल या भागों को अलग से आयात करना होगा। प्रोग्राम भी अपने आप में बहुत जटिल हो सकते हैं, कुछ एक ही समय में एक ही [[चर (कंप्यूटर विज्ञान)|चर]] तक पहुँचने या यहां तक कि डिस्प्ले के लिए [[पिक्सेल|पिक्सल]] उत्पन्न करने के लिए कई विधियों के साथ। [[संकलन (कंप्यूटिंग)|संकलन]] के समय कम से कम त्रुटियों के साथ अपने कोड को विकसित करने के लिए प्रोग्रामर्स की सहायता के लिए स्केलेटन कोड का उपयोग किया जाता है।  


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


== स्यूडोकोड == से संबंध
== स्यूडोकोड से संबंध ==
[[File:PXL 20201120 092248538.jpg|thumb|स्यूडोकोड का एक सामान्य उदाहरण]]सॉफ़्टवेयर के एक नए टुकड़े की संरचना की [[योजना]] बनाते समय स्यूडोकोड सबसे अधिक पाया जाता है। यह एक बड़ी प्रणाली के भीतर किसी विशेष कार्य का एक सादा अंग्रेजी चित्रण है, या यहां तक ​​कि पूरे कार्यक्रम का प्रतिनिधित्व भी हो सकता है। स्यूडोकोड स्केलेटन प्रोग्रामिंग के समान है, हालांकि इस तथ्य से विचलित होता है कि स्यूडोकोड मुख्य रूप से प्रोग्रामिंग का एक अनौपचारिक तरीका है।<ref name=":0">{{Cite journal|last=Bellamy|first=Rachel K. E.|date=1994-06-01|title=What Does Pseudo-Code Do? A Psychological Analysis of the use of Pseudo-Code by Experienced Programmers|url=https://www.tandfonline.com/doi/abs/10.1207/s15327051hci0902_3|journal=Human–Computer Interaction|volume=9|issue=2|pages=225–246|doi=10.1207/s15327051hci0902_3|issn=0737-0024}}</ref> डमी कोड भी इससे काफी मिलता-जुलता है, जहाँ कोड का उपयोग केवल प्लेसहोल्डर के रूप में किया जाता है, या किसी वर्ग या इंटरफ़ेस में किसी विधि के इच्छित अस्तित्व को इंगित करने के लिए किया जाता है।
[[File:PXL 20201120 092248538.jpg|thumb|स्यूडोकोड का एक सामान्य उदाहरण]]सॉफ्टवेयर के एक नए टुकड़े की संरचना को विकसित करते समय स्यूडोकोड सबसे अधिक पाया जाता है। यह एक बड़े सिस्टम के भीतर किसी विशेष कार्य का सादा अंग्रेजी चित्रण है, या यहां तक कि पूरे प्रोग्राम का प्रतिनिधित्व भी हो सकता है। स्यूडोकोड स्केलेटन प्रोग्रामिंग के समान है, हालांकि इस तथ्य से विचलित होता है कि स्यूडोकोड मुख्य रूप से प्रोग्रामिंग का एक अनौपचारिक तरीका है।<ref name=":0">{{Cite journal|last=Bellamy|first=Rachel K. E.|date=1994-06-01|title=What Does Pseudo-Code Do? A Psychological Analysis of the use of Pseudo-Code by Experienced Programmers|url=https://www.tandfonline.com/doi/abs/10.1207/s15327051hci0902_3|journal=Human–Computer Interaction|volume=9|issue=2|pages=225–246|doi=10.1207/s15327051hci0902_3|issn=0737-0024}}</ref> डमी कोड भी इससे काफी मिलता-जुलता है, जहाँ कोड का उपयोग केवल स्थानधारक के रूप में किया जाता है, या किसी वर्ग या इंटरफ़ेस में किसी विधि के इच्छित अस्तित्व को इंगित करने के लिए किया जाता है।  


प्रोग्रामर स्यूडोकोड पर अत्यधिक निर्भर होते हैं, इतना अधिक कि इसका उनके [[मानस (मनोविज्ञान)]] पर एक औसत दर्जे का प्रभाव पड़ता है।<ref name=":0" />एक विशिष्ट प्रोग्रामर को किसी तरह से सरलीकृत कोड लिखने के विचार से इतना वातानुकूलित किया जाता है, चाहे वह स्यूडोकोड या स्केलेटन कोड लिखकर हो, या यहां तक ​​​​कि सिर्फ एक आरेख बनाकर, कि इसका एक औसत दर्जे का प्रभाव है कि वे अपने अंतिम कार्यान्वयन को कितनी अच्छी तरह लिख सकते हैं। यह कई अनुप्रयोगों में पाया गया है, विभिन्न प्रोग्रामर विभिन्न भाषाओं और विभिन्न [[प्रोग्रामिंग प्रतिमान]]ों में काम कर रहे हैं।
कंप्यूटर प्रोग्रामर स्यूडोकोड पर अत्यधिक निर्भर होते हैं, इतना अधिक कि उनकी [[मानस (मनोविज्ञान)|मानसिकता]] पर इसका एक मापन योग्य प्रभाव पड़ता है। विशिष्ट प्रोग्रामर को किसी तरह से सरलीकृत कोड लिखने के विचार से इतना वातानुकूलित किया जाता है, चाहे वह स्यूडोकोड या स्केलेटन कोड लिखकर हो, या यहां तक ​​कि सिर्फ एक आरेख बनाकर, कि इसका एक औसत दर्जे का प्रभाव होता है<ref name=":0" /> कि वे अपने अंतिम कार्यान्वयन को कितनी अच्छी तरह लिख सकते हैं। यह कई अनुप्रयोगों में पाया गया है, जिसमें विभिन्न प्रोग्रामर विभिन्न भाषाओं और विभिन्न [[प्रोग्रामिंग प्रतिमान|प्रोग्रामिंग प्रतिमानों]] में काम कर रहे हैं।  


प्रोग्राम [[ डिज़ाइन ]] का यह तरीका भी अक्सर कलम और कागज पर किया जाता है, पाठ को वास्तव में लागू किए जाने वाले पाठ से आगे बढ़ाया जाता है। कंकाल प्रोग्रामिंग इसकी नकल करता है, लेकिन इस तरह से भिन्न होता है कि यह आमतौर पर एक एकीकृत विकास वातावरण, या [[पाठ संपादक]]ों में लिखा जाता है। यह प्रारंभिक डिजाइन चरण के बाद कार्यक्रम के आगे के विकास में सहायता करता है। स्केलेटन प्रोग्राम चलाए जाने पर सरल कार्यों को संचालित करने की अनुमति भी देते हैं।
प्रोग्राम [[ डिज़ाइन |डिजाइन]] का यह तरीका भी प्रायः कलम और कागज पर किया जाता है, टेक्सट को वास्तव में लागू किए जाने वाले टेक्सट से आगे बढ़ाया जाता है। स्केलेटन प्रोग्रामिंग इसका अनुकरण करती है, लेकिन इस तरह से भिन्न होती है कि यह प्रायः एकीकृत विकास परिवेश या [[पाठ संपादक|टेक्सट संपादकों]] में लिखी जाती है। यह प्रारंभिक डिजाइन चरण के बाद प्रोग्राम के आगे के विकास में सहायता करता है। स्केलेटन प्रोग्राम चलाए जाने पर सरलीकृत कार्यों को संचालित करने की अनुमति भी देता है।


== कार्यान्वयन ==
== कार्यान्वयन ==
कंकाल प्रोग्रामिंग को विभिन्न प्रोग्रामिंग अनुप्रयोगों की श्रेणी में लागू किया जा सकता है।
स्केलेटन प्रोग्रामिंग को विभिन्न प्रोग्रामिंग अनुप्रयोगों की एक श्रृंखला में लागू किया जा सकता है।


=== प्रोग्रामिंग भाषा प्रलेखन ===
=== प्रोग्रामिंग भाषा प्रलेखन ===
अधिकांश, यदि सभी प्रोग्रामिंग भाषाओं में कंकाल कोड नहीं है, तो सभी अंतर्निहित कार्यों और [[विधि (सॉफ्टवेयर इंजीनियरिंग)]] की परिभाषा में सहायता के लिए उपयोग किया जाता है। यह नए प्रोग्रामरों को सिंटैक्स को समझने और लिखित विधियों के इच्छित कार्यान्वयन के लिए एक सरल साधन प्रदान करता है।
अधिकांश, यदि सभी प्रोग्रामिंग भाषाओं में स्केलेटन कोड नहीं है, तो इसका उपयोग सभी अंतर्निहित कार्यों और [[विधि (सॉफ्टवेयर इंजीनियरिंग)|विधियों]] की परिभाषा में सहायता के लिए किया जाता है। यह नए प्रोग्रामरों को सिंटेक्स और लिखित विधियों के इच्छित कार्यान्वयन को समझने के लिए एक सरल साधन प्रदान करता है।  


[[ जावा (प्रोग्रामिंग भाषा) ]], एक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग, जावा के पैकेज के प्रत्येक ऑब्जेक्ट भाग के लिए पूरी तरह से अलग तरीकों के साथ एक संरचित प्रलेखन पृष्ठ पर बहुत अधिक ध्यान केंद्रित करता है।<ref>{{Cite web|title=Object (Java Platform SE 8 )|url=https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html|access-date=2020-10-02|website=docs.oracle.com}}</ref> वस्तु उन्मुख भाषाएं अन्य भाषाओं में पाए जाने वाले सरल टॉप-डाउन दृष्टिकोण के बजाय उनके कार्यान्वयन के लिए एक पदानुक्रम आधारित संरचना पर ध्यान केंद्रित करती हैं। 'ऑब्जेक्ट्स' डेटा और वेरिएबल्स को स्टोर करते हैं, जिससे आम तौर पर अधिक कुशल प्रोग्राम लिखे जा सकते हैं। इन वस्तुओं में अलग-अलग कार्य होते हैं जो आंतरिक चरों तक पहुंच सकते हैं, जिन्हें विधियों के रूप में जाना जाता है।
[[ जावा (प्रोग्रामिंग भाषा) |जावा]], एक ऑब्जेक्ट ओरिएंटेड भाषा, जावा पैकेज के प्रत्येक ऑब्जेक्ट भाग के लिए पूरी तरह से अलग विधियों के साथ संरचित प्रलेखन पृष्ठ पर बहुत अधिक ध्यान केंद्रित करती है।<ref>{{Cite web|title=Object (Java Platform SE 8 )|url=https://docs.oracle.com/javase/8/docs/api/java/lang/Object.html|access-date=2020-10-02|website=docs.oracle.com}}</ref> ऑब्जेक्ट ओरिएंटेड भाषाएँ अन्य भाषाओं में पाए जाने वाले सरल टॉप-डाउन दृष्टिकोण के स्थान पर उनके कार्यान्वयन के लिए पदानुक्रम आधारित संरचना पर ध्यान केंद्रित करती हैं। 'ऑब्जेक्ट्स' डेटा और चरों को संग्रहित करते हैं, जिससे प्रायः अधिक कुशल प्रोग्राम लिखे जाने की अनुमति मिलती है। इन वस्तुओं में अलग-अलग कार्य होते हैं जो आंतरिक चरों तक पहुंच सकते हैं, जिन्हें विधियों के रूप में जाना जाता है।  


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


पायथन (प्रोग्रामिंग लैंग्वेज) के पास अपने इन-बिल्ट तरीकों को प्रलेखित करने के लिए एक समान दृष्टिकोण है, हालांकि दायरे और [[डेटा प्रकार]]ों पर भाषा के निर्धारण की कमी की नकल करता है।<ref>{{Cite web|date=2009-02-14|title=Built-in Functions — Python v3.0.1 documentation|url=https://docs.python.org/3.0/library/functions.html|access-date=2020-10-03|website=docs.python.org}}</ref> इस दस्तावेज़ीकरण में संक्षिप्त विवरण और विधि या फ़ंक्शन के विशिष्ट उपयोग के उदाहरण के साथ-साथ प्रत्येक विधि का सिंटैक्स है। उदाहरण में प्रदान किया गया कंकाल कोड प्रोग्रामर को त्वरित नज़र में फ़ंक्शन की अच्छी समझ देता है।
पायथन के पास अपने अंतर्निर्मित तरीकों को दस्तावेज करने के लिए एक समान दृष्टिकोण है, हालांकि दायरे और [[डेटा प्रकार|डेटा]] प्रकारों पर निर्धारण की कमी का अनुकरण करता है।<ref>{{Cite web|date=2009-02-14|title=Built-in Functions — Python v3.0.1 documentation|url=https://docs.python.org/3.0/library/functions.html|access-date=2020-10-03|website=docs.python.org}}</ref> इस दस्तावेज़ीकरण में संक्षिप्त विवरण और विधि या फ़ंक्शन के विशिष्ट उपयोग के उदाहरण के साथ-साथ प्रत्येक विधि का सिंटेक्स है। उदाहरण में प्रदान किया गया स्केलेटन कोड प्रोग्रामर को त्वरित नज़र में फ़ंक्शन की अच्छी समझ देता है।


=== वर्ग परिभाषा ===
=== वर्ग परिभाषा ===
[[ वर्ग (कंप्यूटर प्रोग्रामिंग) ]] तीसरे पक्ष के डेवलपर्स द्वारा लिखित, मुख्य रूप से पुस्तकालयों के एक भाग के रूप में, उनकी प्रोग्रामिंग को कंकाल कोड के रूप में भी प्रदर्शित करता है। यह पुस्तकालय के लिए नए किसी भी व्यक्ति को यह सूचित करने में मदद करता है कि कार्य और तरीके कैसे संचालित होते हैं। P5.js|P5.Js इस प्रारूप का उपयोग अपने प्रलेखन पृष्ठ पर कुछ सम्मिलित कार्यों के इच्छित उपयोग की व्याख्या करने के लिए करता है।<ref>{{Cite web|title=reference {{!}} p5.js|url=https://p5js.org/reference/#/p5/alpha|access-date=2020-11-15|website=p5js.org}}</ref> यह प्रोग्रामिंग लैंग्वेज डॉक्यूमेंटेशन से अलग है, हालांकि, विधि के सभी संभावित उपयोगों के बजाय [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)]] प्रदर्शित करने के लिए कंकाल कोड का उपयोग करना।
तीसरे पक्ष के डेवलपर्स द्वारा लिखी गए [[ वर्ग (कंप्यूटर प्रोग्रामिंग) |वर्गों]], मुख्य रूप से लाइब्रेरीज के एक भाग के रूप में, उनकी प्रोग्रामिंग को स्केलेटन कोड के रूप में भी प्रदर्शित करती हैं। यह लाइब्रेरी के लिए किसी भी नए को सूचित करने में सहायता करता है कि कैसे कार्य और विधियां संचालित होती हैं। P5.Js कुछ सम्मिलित कार्यों के इच्छित उपयोग की व्याख्या करने के लिए अपने प्रलेखन पृष्ठ पर इस प्रारूप का उपयोग करता है।<ref>{{Cite web|title=reference {{!}} p5.js|url=https://p5js.org/reference/#/p5/alpha|access-date=2020-11-15|website=p5js.org}}</ref> यह प्रोग्रामिंग लैंग्वेज प्रलेखन से अलग है, हालांकि, विधि के सभी संभावित उपयोगों के स्थान पर [[पैरामीटर (कंप्यूटर प्रोग्रामिंग)|पैरामीटर]] प्रदर्शित करने के लिए स्केलेटन कोड का उपयोग करना।  


प्राकृतिक-भाषा उपयोगकर्ता इंटरफ़ेस (एनएलआई) आमतौर पर उन स्थितियों में पाए जाते हैं जहां प्रोग्रामर एक इनपुट/आउटपुट लेने का प्रयास करते हैं, जिसे आमतौर पर [[बोलचालवाद]] कहा जाता है (प्रोग्रामिंग भाषा विशिष्ट [[शब्दजाल]] के उपयोग के बिना) और एक प्रोग्राम या एक विधि बनाने के लिए इसका उपयोग करते हैं। इसका कार्यान्वयन पृष्ठभूमि में चल रहे फ़ंक्शन को इंगित करने के लिए कंकाल कोड के एक छोटे से सेट का उपयोग करता है।<ref>{{Cite web|last=Granger|first=Chris|date=2020-11-18|title=हम जिस नई चीज़ पर काम कर रहे हैं उसकी पहली झलक।|url=https://twitter.com/ibdknox/status/1328797793138266113|access-date=2020-11-19|website=Twitter|language=en}}</ref>
प्राकृतिक भाषा इंटरफेस (एनएलआई) प्रायः उन स्थितियों में पाए जाते हैं जहां प्रोग्रामर एक इनपुट लेने का प्रयास करते हैं, प्रायः बोलचाल की भाषा में (प्रोग्रामिंग भाषा विशिष्ट [[शब्दजाल|शब्दावली]] के उपयोग के बिना) और प्रोग्राम या विधि बनाने के लिए इसका उपयोग करते हैं। इसका कार्यान्वयन पृष्ठभूमि में चल रहे फ़ंक्शन को इंगित करने के लिए स्केलेटन कोड के एक छोटे सेट का उपयोग करता है।<ref>{{Cite web|last=Granger|first=Chris|date=2020-11-18|title=हम जिस नई चीज़ पर काम कर रहे हैं उसकी पहली झलक।|url=https://twitter.com/ibdknox/status/1328797793138266113|access-date=2020-11-19|website=Twitter|language=en}}</ref>
एनएलआई के अन्य रूप इनपुट के विभिन्न रूपों का उपयोग करते हैं, जिसमें अन्य उपयोगकर्ता अलग-अलग भाषाएं बोलते हैं, इशारों पर आधारित इनपुट के लिए एक बहुत ही समान परिणाम उत्पन्न करने के लिए। प्रोग्रामिंग भाषाओं के विकसित होने और मुख्य रूप से अंग्रेजी में लिखे जाने के कारण, अन्य भाषा बोलने वाले लोगों को नए सॉफ्टवेयर विकसित करने में कठिनाई होती है। कुछ अध्ययनों में एनएलआई का उपयोग किया गया है <ref>{{Cite journal|last=Özcan|first=E.|title=एक प्राकृतिक भाषा इंटरफ़ेस का उपयोग करके जावा क्लास कंकाल उत्पन्न करना|date=2004|url=http://dx.doi.org/10.5220/0002683301260134|journal=Proceedings of the 1st International Workshop on Natural Language Understanding and Cognitive Science|publisher=SciTePress - Science and Technology Publications|volume=1|pages=126–134|doi=10.5220/0002683301260134|isbn=972-8865-05-8}}</ref> इन स्थितियों में लोगों की मदद करने के लिए। अध्ययन ने एनएलआई के उपयोग के माध्यम से जावा में लिखी गई कक्षाओं को दिखाया। इसने वाक्यात्मक नियमों को सीखने की आवश्यकता को हटा दिया, हालांकि इसका मतलब यह था कि कक्षा को कंकाल कोड के मूल सेट का उपयोग करके लिखा गया था।
 
एनएलआई (NLIs) के अन्य रूप इनपुट के विभिन्न रूपों का उपयोग करते हैं, जिसमें अन्य उपयोगकर्ता अलग-अलग भाषाएं बोलते हैं, इशारों पर आधारित इनपुट के लिए एक बहुत ही समान परिणाम उत्पन्न करने के लिए। प्रोग्रामिंग भाषाओं के विकसित होने और मुख्य रूप से अंग्रेजी में लिखे जाने के कारण, अन्य भाषा बोलने वाले लोगों को नए सॉफ्टवेयर विकसित करने में कठिनाई होती है। इन स्थितियों में लोगों की सहायता के लिए कुछ अध्ययनों में एनएलआई का उपयोग किया गया है।<ref>{{Cite journal|last=Özcan|first=E.|title=एक प्राकृतिक भाषा इंटरफ़ेस का उपयोग करके जावा क्लास कंकाल उत्पन्न करना|date=2004|url=http://dx.doi.org/10.5220/0002683301260134|journal=Proceedings of the 1st International Workshop on Natural Language Understanding and Cognitive Science|publisher=SciTePress - Science and Technology Publications|volume=1|pages=126–134|doi=10.5220/0002683301260134|isbn=972-8865-05-8}}</ref> अध्ययन ने एनएलआई के उपयोग के माध्यम से जावा में लिखी गए वर्गों को दिखाया। इसने वाक्य-विन्यास के नियमों को सीखने की आवश्यकता को हटा दिया, हालांकि इसका अर्थ यह था कि स्केलेटन कोड के मूल सेट का उपयोग करके वर्ग लिखी गए थे।


=== बहुरूपता आधारित परिभाषाएँ ===
=== बहुरूपता आधारित परिभाषाएँ ===
[[बहुरूपता (कंप्यूटर विज्ञान)]] एक विचारधारा है जो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग प्रतिमान के साथ चलती है, जहां विधियों को ओवरराइड किया जा सकता है या ओवरलोडेड विधि (बच्चे वर्ग में समान नाम वाली विधियां जो माता-पिता वर्ग में लिखी गई विधि पर प्राथमिकता लेती हैं)विधियों की परिभाषा भाषा के वाक्य-विन्यास द्वारा परिभाषित कंकाल ढांचे पर आधारित है।<ref>{{Citation|last1=Benaya|first1=Tamar|title=Understanding Object Oriented Programming Concepts in an Advanced Programming Course|url=http://dx.doi.org/10.1007/978-3-540-69924-8_15|pages=161–170|place=Berlin, Heidelberg|publisher=Springer Berlin Heidelberg|isbn=978-3-540-69923-1|access-date=2020-11-18|last2=Zur|first2=Ela|series=Lecture Notes in Computer Science |year=2008 |volume=5090 |doi=10.1007/978-3-540-69924-8_15 }}</ref>
[[बहुरूपता (कंप्यूटर विज्ञान)|बहुरूपता]] एक विचारधारा है जो ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग प्रतिमान के साथ चलती है, जहां विधियों को ओवरराइड या ओवरलोड (छोटे वर्ग में समान नाम वाली विधियां जो मूल वर्ग में लिखी गई विधि पर प्राथमिकता लेती हैं) किया जा सकता है। विधियों की परिभाषा भाषा के वाक्य-विन्यास द्वारा परिभाषित स्केलेटन रूपरेखा पर आधारित है।<ref>{{Citation|last1=Benaya|first1=Tamar|title=Understanding Object Oriented Programming Concepts in an Advanced Programming Course|url=http://dx.doi.org/10.1007/978-3-540-69924-8_15|pages=161–170|place=Berlin, Heidelberg|publisher=Springer Berlin Heidelberg|isbn=978-3-540-69923-1|access-date=2020-11-18|last2=Zur|first2=Ela|series=Lecture Notes in Computer Science |year=2008 |volume=5090 |doi=10.1007/978-3-540-69924-8_15 }}</ref>
वर्ग कार्यान्वयन के समान ही, कंकाल कोड का उपयोग उन विधियों को परिभाषित करने के लिए किया जा सकता है जो एक इंटरफ़ेस (कंप्यूटिंग) का हिस्सा हैं। एक इंटरफ़ेस अनिवार्य रूप से एक वर्ग का एक [[खाका]] है, जो आंतरिक कार्यों को पूरी तरह से समझने की आवश्यकता के बिना विभिन्न [[जावा पैकेज]] से कक्षाओं का उपयोग करने के लिए सख्त वस्तु उन्मुख भाषाओं (जैसे जावा (प्रोग्रामिंग भाषा)) की अनुमति देता है। इंटरफ़ेस केवल उन तरीकों को परिभाषित करता है जो कक्षा के भीतर मौजूद होते हैं, जिससे किसी और को विधियों का उपयोग करने या अपनी व्यक्तिगत जरूरतों के लिए कक्षा को लागू करने की अनुमति मिलती है।
 
वर्ग कार्यान्वयन के समान, स्केलेटन कोड का उपयोग उन विधियों को परिभाषित करने के लिए किया जा सकता है जो इंटरफ़ेस का भाग हैं। इंटरफ़ेस अनिवार्य रूप से वर्ग का [[खाका]] है, जो आंतरिक कार्यों को पूरी तरह से समझने की आवश्यकता के बिना विभिन्न पैकेजों से कक्षाओं का उपयोग करने के लिए सख्त ऑब्जेक्ट ओरिएंटेड भाषाओं (जैसे जावा) की अनुमति देता है। इंटरफ़ेस केवल उन विधियों को परिभाषित करता है जो वर्ग के भीतर उपस्थित होते हैं, जिससे किसी और को विधियों का उपयोग करने या अपनी व्यक्तिगत आवश्यकताओं के लिए वर्ग को लागू करने की अनुमति मिलती है।
  सार्वजनिक कंकाल उदाहरण ();
  सार्वजनिक कंकाल उदाहरण ();
एक सार वर्ग लगभग एक वर्ग के कार्यान्वयन के समान है, हालांकि भाषा के आधार पर, कम से कम एक विधि को सार के रूप में परिभाषित किया गया है। इसका तात्पर्य है कि इस वर्ग के किसी भी बच्चे (कोई भी वर्ग जो विस्तार या कार्यान्वित करता है) को इसके लिए एक विधि परिभाषित करने की आवश्यकता है। सार कक्षाओं में इंटरफेस के लिए एक बहुत ही समान परिभाषा शैली होती है, हालांकि एक कीवर्ड 'सार' आमतौर पर इस तथ्य की पहचान करने के लिए प्रयोग किया जाता है कि इसे बाल वर्गों में लागू करने की आवश्यकता है।
संक्षेप वर्ग लगभग वर्ग के कार्यान्वयन के समान है, हालांकि भाषा के आधार पर, कम से कम एक विधि को संक्षेप के रूप में परिभाषित किया गया है। इसका तात्पर्य है कि इस वर्ग के किसी भी बच्चे (कोई भी वर्ग जो विस्तार या कार्यान्वित करता है) को इसके लिए विधि परिभाषित करने की आवश्यकता है। संक्षेप वर्गाों में इंटरफेस के लिए बहुत ही समान परिभाषा शैली होती है, हालांकि कीवर्ड 'संक्षेप' प्रायः इस तथ्य की पहचान करने के लिए प्रयोग किया जाता है कि इसे छोटे वर्गों में लागू करने की आवश्यकता है।  
  सार्वजनिक सार कंकाल उदाहरण ();
  सार्वजनिक संक्षेप कंकाल उदाहरण ();
ये उदाहरण जावा सिंटैक्स का उपयोग करते हैं।
ये उदाहरण जावा सिंटेक्स का उपयोग करते हैं।


== समानांतर प्रोग्रामिंग ==
== समानांतर प्रोग्रामिंग ==
Line 75: Line 76:


बाद के विकास के लिए विचाराधीन विधियों का संक्षेप में वर्णन करने के लिए [[एल्गोरिथम कंकाल]] ढांचे का उपयोग समानांतर प्रोग्रामिंग में किया जाता है। चौखटे एक ही प्रकार तक सीमित नहीं हैं, और इनमें से प्रत्येक प्रकार के डेवलपर के कार्यक्रम की दक्षता बढ़ाने के लिए अलग-अलग उद्देश्य हैं। इन्हें तीन मुख्य प्रकारों में वर्गीकृत किया जा सकता है: डेटा समानांतरवाद|डेटा-समानांतर, कार्य समानांतरवाद|कार्य-समानांतर और संकल्प।<ref name=":1" />
बाद के विकास के लिए विचाराधीन विधियों का संक्षेप में वर्णन करने के लिए [[एल्गोरिथम कंकाल]] ढांचे का उपयोग समानांतर प्रोग्रामिंग में किया जाता है। चौखटे एक ही प्रकार तक सीमित नहीं हैं, और इनमें से प्रत्येक प्रकार के डेवलपर के कार्यक्रम की दक्षता बढ़ाने के लिए अलग-अलग उद्देश्य हैं। इन्हें तीन मुख्य प्रकारों में वर्गीकृत किया जा सकता है: डेटा समानांतरवाद|डेटा-समानांतर, कार्य समानांतरवाद|कार्य-समानांतर और संकल्प।<ref name=":1" />
=== डेटा-समानांतर ===
=== डेटा-समानांतर ===
इन कंकाल एल्गोरिदम का उपयोग उन कार्यक्रमों को विकसित करने के लिए किया जाता है जो बड़े डेटा आधारित सॉफ़्टवेयर पर काम करते हैं, आमतौर पर बाद में उपयोग के लिए डेटा के बीच कनेक्शन की पहचान करते हैं। डेटा समानांतर एल्गोरिदम में 'मैप्स', 'फोर्क्स' और 'रिड्यूस' या 'स्कैन' शामिल हैं।
इन कंकाल एल्गोरिदम का उपयोग उन कार्यक्रमों को विकसित करने के लिए किया जाता है जो बड़े डेटा आधारित सॉफ़्टवेयर पर काम करते हैं, आमतौर पर बाद में उपयोग के लिए डेटा के बीच कनेक्शन की पहचान करते हैं। डेटा समानांतर एल्गोरिदम में 'मैप्स', 'फोर्क्स' और 'रिड्यूस' या 'स्कैन' शामिल हैं।
Line 98: Line 96:


* 'फूट डालो और राज करो' एक मानचित्र कंकाल को अपने आधार के रूप में उपयोग करता है, समस्या को हल करने के लिए इसे थोड़ी देर के कंकाल के साथ जोड़कर। मैप एल्गोरिदम में, डेटा पर फ़ंक्शंस एक साथ लागू होते हैं। 'फूट डालो और जीतो' में प्रदान किए गए डेटा के सेट में मानचित्र कंकाल का उपयोग करके उस पर एक फ़ंक्शन लागू होता है, हालांकि इसे 'जबकि' एल्गोरिथम का उपयोग करके पुनरावर्ती रूप से लागू किया जा सकता है। जब पूरी समस्या हल हो जाती है तभी 'जबकि' टूट जाता है।
* 'फूट डालो और राज करो' एक मानचित्र कंकाल को अपने आधार के रूप में उपयोग करता है, समस्या को हल करने के लिए इसे थोड़ी देर के कंकाल के साथ जोड़कर। मैप एल्गोरिदम में, डेटा पर फ़ंक्शंस एक साथ लागू होते हैं। 'फूट डालो और जीतो' में प्रदान किए गए डेटा के सेट में मानचित्र कंकाल का उपयोग करके उस पर एक फ़ंक्शन लागू होता है, हालांकि इसे 'जबकि' एल्गोरिथम का उपयोग करके पुनरावर्ती रूप से लागू किया जा सकता है। जब पूरी समस्या हल हो जाती है तभी 'जबकि' टूट जाता है।
* 'शाखा और बाध्य' एक एल्गोरिथ्म है जो मानचित्र एल्गोरिदम का भी उपयोग करता है, हालांकि कार्यों को एक साथ चलाने के लिए 'जबकि' एल्गोरिदम लागू करने के बजाय, यह एल्गोरिदम कार्यों को शाखाओं में विभाजित करता है। प्रत्येक शाखा का एक विशिष्ट उद्देश्य, या 'बाध्य' होता है, जहाँ सशर्त विवरण इसे रोक देगा।
* 'शाखा और बाध्य' एक एल्गोरिथ्म है जो मानचित्र एल्गोरिदम का भी उपयोग करता है, हालांकि कार्यों को एक साथ चलाने के लिए 'जबकि' एल्गोरिदम लागू करने के बजाय, यह एल्गोरिदम कार्यों को शाखाओं में विभाजित करता है। प्रत्येक शाखा का एक विशिष्ट उद्देश्य, या 'बाध्य' होता है, जहाँ सशर्त विवरण इसे रोक देगा।{{Portal|Computer programming}}
 
{{Portal|Computer programming}}


==संदर्भ==
==संदर्भ==

Revision as of 16:40, 7 June 2023

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

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

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

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

पृष्ठभूमि

आधुनिक सॉफ्टवेयर[2] प्रायः कई कारणों से जटिल होता है। इसका अर्थ यह हो सकता है कि केवल एक ही प्रोग्रामर इसे विकसित नहीं कर सकता है, या यह कि अन्य मॉड्यूल या भागों को अलग से आयात करना होगा। प्रोग्राम भी अपने आप में बहुत जटिल हो सकते हैं, कुछ एक ही समय में एक ही चर तक पहुँचने या यहां तक कि डिस्प्ले के लिए पिक्सल उत्पन्न करने के लिए कई विधियों के साथ। संकलन के समय कम से कम त्रुटियों के साथ अपने कोड को विकसित करने के लिए प्रोग्रामर्स की सहायता के लिए स्केलेटन कोड का उपयोग किया जाता है।

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

स्यूडोकोड से संबंध

स्यूडोकोड का एक सामान्य उदाहरण

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

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

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

कार्यान्वयन

स्केलेटन प्रोग्रामिंग को विभिन्न प्रोग्रामिंग अनुप्रयोगों की एक श्रृंखला में लागू किया जा सकता है।

प्रोग्रामिंग भाषा प्रलेखन

अधिकांश, यदि सभी प्रोग्रामिंग भाषाओं में स्केलेटन कोड नहीं है, तो इसका उपयोग सभी अंतर्निहित कार्यों और विधियों की परिभाषा में सहायता के लिए किया जाता है। यह नए प्रोग्रामरों को सिंटेक्स और लिखित विधियों के इच्छित कार्यान्वयन को समझने के लिए एक सरल साधन प्रदान करता है।

जावा, एक ऑब्जेक्ट ओरिएंटेड भाषा, जावा पैकेज के प्रत्येक ऑब्जेक्ट भाग के लिए पूरी तरह से अलग विधियों के साथ संरचित प्रलेखन पृष्ठ पर बहुत अधिक ध्यान केंद्रित करती है।[4] ऑब्जेक्ट ओरिएंटेड भाषाएँ अन्य भाषाओं में पाए जाने वाले सरल टॉप-डाउन दृष्टिकोण के स्थान पर उनके कार्यान्वयन के लिए पदानुक्रम आधारित संरचना पर ध्यान केंद्रित करती हैं। 'ऑब्जेक्ट्स' डेटा और चरों को संग्रहित करते हैं, जिससे प्रायः अधिक कुशल प्रोग्राम लिखे जाने की अनुमति मिलती है। इन वस्तुओं में अलग-अलग कार्य होते हैं जो आंतरिक चरों तक पहुंच सकते हैं, जिन्हें विधियों के रूप में जाना जाता है।

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

पायथन के पास अपने अंतर्निर्मित तरीकों को दस्तावेज करने के लिए एक समान दृष्टिकोण है, हालांकि दायरे और डेटा प्रकारों पर निर्धारण की कमी का अनुकरण करता है।[5] इस दस्तावेज़ीकरण में संक्षिप्त विवरण और विधि या फ़ंक्शन के विशिष्ट उपयोग के उदाहरण के साथ-साथ प्रत्येक विधि का सिंटेक्स है। उदाहरण में प्रदान किया गया स्केलेटन कोड प्रोग्रामर को त्वरित नज़र में फ़ंक्शन की अच्छी समझ देता है।

वर्ग परिभाषा

तीसरे पक्ष के डेवलपर्स द्वारा लिखी गए वर्गों, मुख्य रूप से लाइब्रेरीज के एक भाग के रूप में, उनकी प्रोग्रामिंग को स्केलेटन कोड के रूप में भी प्रदर्शित करती हैं। यह लाइब्रेरी के लिए किसी भी नए को सूचित करने में सहायता करता है कि कैसे कार्य और विधियां संचालित होती हैं। P5.Js कुछ सम्मिलित कार्यों के इच्छित उपयोग की व्याख्या करने के लिए अपने प्रलेखन पृष्ठ पर इस प्रारूप का उपयोग करता है।[6] यह प्रोग्रामिंग लैंग्वेज प्रलेखन से अलग है, हालांकि, विधि के सभी संभावित उपयोगों के स्थान पर पैरामीटर प्रदर्शित करने के लिए स्केलेटन कोड का उपयोग करना।

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

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

बहुरूपता आधारित परिभाषाएँ

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

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

सार्वजनिक कंकाल उदाहरण ();

संक्षेप वर्ग लगभग वर्ग के कार्यान्वयन के समान है, हालांकि भाषा के आधार पर, कम से कम एक विधि को संक्षेप के रूप में परिभाषित किया गया है। इसका तात्पर्य है कि इस वर्ग के किसी भी बच्चे (कोई भी वर्ग जो विस्तार या कार्यान्वित करता है) को इसके लिए विधि परिभाषित करने की आवश्यकता है। संक्षेप वर्गाों में इंटरफेस के लिए बहुत ही समान परिभाषा शैली होती है, हालांकि कीवर्ड 'संक्षेप' प्रायः इस तथ्य की पहचान करने के लिए प्रयोग किया जाता है कि इसे छोटे वर्गों में लागू करने की आवश्यकता है।

सार्वजनिक संक्षेप कंकाल उदाहरण ();

ये उदाहरण जावा सिंटेक्स का उपयोग करते हैं।

समानांतर प्रोग्रामिंग

समानांतर कंप्यूटिंग एक साथ कई कार्यों का संचालन है जो आमतौर पर दक्षता बढ़ाने के लिए उपयोग किया जाता है। ये आम तौर पर विकसित करने के लिए सबसे कठिन प्रकार के प्रोग्राम हैं, उनकी जटिलता और कंप्यूटर हार्डवेयर के साथ-साथ परस्पर संबंध के कारण भी। कई डेवलपर्स ने इस मुख्य कार्यक्षमता के साथ प्रोग्राम लिखने का प्रयास किया है,[10] हालाँकि यह विभिन्न परिणामों से मिला है।

बाद के विकास के लिए विचाराधीन विधियों का संक्षेप में वर्णन करने के लिए एल्गोरिथम कंकाल ढांचे का उपयोग समानांतर प्रोग्रामिंग में किया जाता है। चौखटे एक ही प्रकार तक सीमित नहीं हैं, और इनमें से प्रत्येक प्रकार के डेवलपर के कार्यक्रम की दक्षता बढ़ाने के लिए अलग-अलग उद्देश्य हैं। इन्हें तीन मुख्य प्रकारों में वर्गीकृत किया जा सकता है: डेटा समानांतरवाद|डेटा-समानांतर, कार्य समानांतरवाद|कार्य-समानांतर और संकल्प।[10]

डेटा-समानांतर

इन कंकाल एल्गोरिदम का उपयोग उन कार्यक्रमों को विकसित करने के लिए किया जाता है जो बड़े डेटा आधारित सॉफ़्टवेयर पर काम करते हैं, आमतौर पर बाद में उपयोग के लिए डेटा के बीच कनेक्शन की पहचान करते हैं। डेटा समानांतर एल्गोरिदम में 'मैप्स', 'फोर्क्स' और 'रिड्यूस' या 'स्कैन' शामिल हैं।

  • 'मैप्स' सबसे अधिक उपयोग किए जाने वाले डेटा समानांतर एल्गोरिदम हैं, और आमतौर पर डेटा के एक बड़े सेट पर पूरा होने वाला एकल ऑपरेशन शामिल होता है। दक्षता बढ़ाने के लिए, अंत में डेटा को फिर से एक साथ संरचित करने से पहले, कई डेटा सेटों में यह ऑपरेशन एक साथ लागू होता है।
  • 'फोर्क' 'नक्शे' के समान हैं लेकिन वे कुछ डेटा प्रकारों के लिए एक अलग ऑपरेशन का उपयोग करते हैं। इसे डेटा समानता के रूप में जाना जाता है।[10]* 'Reduces' या 'scans' का उपयोग डेटा के एक सेट पर उपसर्ग लागू करने के लिए किया जाता है, इससे पहले डेटा पर एक ऑपरेशन लागू किया जाता है। ये 'नक्शे' से भिन्न हैं क्योंकि उनके पास विधि के रनटाइम के दौरान आंशिक परिणामों का एक सेट होता है।

कार्य-समानांतर

ये ऑपरेशन, जैसा कि इनके नाम से पता चलता है, टास्क पर काम करते हैं। इसके अंतर्गत प्रत्येक प्रकार का एल्गोरिदम कार्यों के बीच व्यवहार में बदलाव के कारण भिन्न होता है। कार्य समानांतर एल्गोरिदम में 'अनुक्रमिक', 'खेत', 'पाइप', 'अगर', 'के लिए' और 'जबकि' शामिल हैं।

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

संकल्प कंकाल

ये कंकाल ऊपर पाए गए सामान्य कंकालों से बहुत अलग हैं। 'रिज़ॉल्यूशन' एल्गोरिथम एक निर्दिष्ट समस्या को हल करने के लिए विधियों के संयोजन का उपयोग करता है। एल्गोरिथ्म की दी गई समस्या "समस्याओं का परिवार" हो सकती है।[10]इन कंकालों के दो मुख्य प्रकार हैं, 'फूट डालो और जीतो' या 'ब्रांड और बाध्य'।

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

संदर्भ

  1. Freeman, Eric; Freeman, Elisabeth; Kathy, Sierra; Bert, Bates (2004). Hendrickson, Mike; Loukides, Mike (eds.). Head First Design Patterns (paperback). Vol. 1. O'REILLY. p. 440. ISBN 978-0-596-00712-6. Retrieved 2012-08-28.
  2. Lowery, Jeff (2019-11-02). "Why is Software Development Difficult?". Medium (in English). Retrieved 2020-11-15.
  3. 3.0 3.1 Bellamy, Rachel K. E. (1994-06-01). "What Does Pseudo-Code Do? A Psychological Analysis of the use of Pseudo-Code by Experienced Programmers". Human–Computer Interaction. 9 (2): 225–246. doi:10.1207/s15327051hci0902_3. ISSN 0737-0024.
  4. "Object (Java Platform SE 8 )". docs.oracle.com. Retrieved 2020-10-02.
  5. "Built-in Functions — Python v3.0.1 documentation". docs.python.org. 2009-02-14. Retrieved 2020-10-03.
  6. "reference | p5.js". p5js.org. Retrieved 2020-11-15.
  7. Granger, Chris (2020-11-18). "हम जिस नई चीज़ पर काम कर रहे हैं उसकी पहली झलक।". Twitter (in English). Retrieved 2020-11-19.
  8. Özcan, E. (2004). "एक प्राकृतिक भाषा इंटरफ़ेस का उपयोग करके जावा क्लास कंकाल उत्पन्न करना". Proceedings of the 1st International Workshop on Natural Language Understanding and Cognitive Science. SciTePress - Science and Technology Publications. 1: 126–134. doi:10.5220/0002683301260134. ISBN 972-8865-05-8.
  9. Benaya, Tamar; Zur, Ela (2008), Understanding Object Oriented Programming Concepts in an Advanced Programming Course, Lecture Notes in Computer Science, vol. 5090, Berlin, Heidelberg: Springer Berlin Heidelberg, pp. 161–170, doi:10.1007/978-3-540-69924-8_15, ISBN 978-3-540-69923-1, retrieved 2020-11-18
  10. 10.0 10.1 10.2 10.3 González-Vélez, Horacio; Leyton, Mario (2010-11-01). "A survey of algorithmic skeleton frameworks: high-level structured parallel programming enablers". Software: Practice and Experience. 40 (12): 1135–1160. doi:10.1002/spe.1026. ISSN 0038-0644. S2CID 16211075.