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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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

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


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

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


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