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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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


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