निम्नलिखित में से कौन-सी एक, शीर्ष-पाद भाषा (टॉप-डाउन लैंग्वेज) नहीं है?
- (a)C
- (b)फोर्ट्रान (FORTRAN)
- (c)जावा (JAVA)
- (d)पास्कल (Pascal)
सही उत्तर — C, (c) जावा (JAVA) — शेष तीनों प्रक्रियात्मक या संरचित भाषाएँ हैं, जिन्हें पाठ्यपुस्तकें शीर्ष-पाद (टॉप-डाउन) श्रेणी में रखती हैं, जबकि जावा मूलतः वस्तु-उन्मुख भाषा है और उसे अध:-शीर्ष (बॉटम-अप) श्रेणी में रखा जाता है। प्रश्न नकारात्मक है — पुस्तिका में ‘नहीं’ मोटे अक्षरों में छपा है — इसलिए खोजना उस एक भाषा को है जो शेष तीन के परिवार से बाहर पड़ती है। अब वर्गीकरण का आधार देखिए। शीर्ष-पाद अभिकल्प में काम बड़ी समस्या से आरंभ होता है : पहले पूरे कार्य का एक विवरण लिखा जाता है, फिर उसे उप-कार्यों में बाँटा जाता है, और हर उप-कार्य को तब तक और छोटा किया जाता है जब तक वह सीधे लिखे जाने योग्य न हो जाए। इसी को चरणबद्ध परिष्करण (stepwise refinement) कहते हैं, और प्रक्रियात्मक भाषाएँ इसी शैली के लिए बनी हैं, क्योंकि उनकी मूल इकाई प्रकार्य या प्रक्रिया है — कार्य को टुकड़ों में बाँटने का सीधा साधन। अध:-शीर्ष अभिकल्प इसकी उलटी दिशा है : पहले छोटी, स्वतंत्र और पुन:प्रयोज्य इकाइयाँ बनाई जाती हैं और फिर उन्हें जोड़कर बड़ा तंत्र खड़ा किया जाता है। वस्तु-उन्मुख भाषाओं की मूल इकाई वर्ग और वस्तु है, अर्थात् आँकड़े और उन पर चलने वाली क्रियाएँ एक साथ बँधी हुई; इसीलिए उनकी स्वाभाविक शैली अध:-शीर्ष मानी जाती है और पुनःप्रयोग तथा वंशानुक्रम उनके केंद्र में रहते हैं। चारों भाषाओं की पहचान इसी कसौटी पर : C (1972, डेनिस रिची) प्रक्रियात्मक भाषा है और यूनिक्स प्रचालन तंत्र इसी में लिखा गया; फोर्ट्रान (1957, आई.बी.एम. में जॉन बैकस का दल) पहली व्यापक रूप से प्रयुक्त उच्च-स्तरीय भाषा है और वैज्ञानिक गणना के लिए बनी थी; पास्कल (1970, निकलॉस विर्थ) तो बनी ही इसलिए थी कि संरचित प्रोग्रामन सिखाया जा सके। इनके सामने जावा (1995, सन माइक्रोसिस्टम्स में जेम्स गोसलिंग का दल) आरंभ से ही वस्तु-उन्मुख भाषा के रूप में अभिकल्पित हुई। इसलिए बाहर पड़ने वाली भाषा जावा है। एक बात ईमानदारी से जोड़ लीजिए, क्योंकि वह आगे काम आएगी : शीर्ष-पाद और अध:-शीर्ष वस्तुतः अभिकल्प की पद्धतियाँ हैं, भाषाओं के अंतर्निहित गुण नहीं — जावा में भी कार्य को उप-कार्यों में बाँटा जा सकता है और C में भी घटक पहले बनाए जा सकते हैं। परीक्षा जिस वर्गीकरण पर चल रही है वह भाषा की मूल इकाई से जुड़ा है, और उसी के अनुसार उत्तर निकलता है। हिन्दी पाठ में एक शब्द ध्यान माँगता है : ‘शीर्ष-पाद’। छपे हुए रूप में यह ‘शीर्षक और पादलेख’ जैसा लग सकता है, जो पूरी तरह अलग विषय है; यहाँ उसका अर्थ केवल top-down है, अर्थात् ऊपर से नीचे की ओर।
- (a)C — C प्रक्रियात्मक भाषा है और शीर्ष-पाद शैली का प्रतिनिधि उदाहरण है। उसका पूरा ढाँचा प्रकार्यों (functions) पर खड़ा है : निष्पादन main से आरंभ होता है और वहीं से छोटे-छोटे प्रकार्य बुलाए जाते हैं, अर्थात् कार्य को ऊपर से नीचे की ओर बाँटने का ढंग भाषा की बनावट में ही है। डेनिस रिची ने इसे 1972 के आसपास बेल प्रयोगशालाओं में विकसित किया और यूनिक्स प्रचालन तंत्र इसी में फिर से लिखा गया, जिससे यह प्रणाली-प्रोग्रामन की मानक भाषा बन गई। ध्यान दीजिए कि C वस्तु-उन्मुख नहीं है — उसमें वर्ग, वंशानुक्रम या प्रचालक-अधिभार नहीं होते; वे C++ में जोड़े गए। इसलिए यह विकल्प उस परिवार से बाहर नहीं पड़ता जिसे प्रश्न खोज रहा है।
- (b)फोर्ट्रान (FORTRAN) — फोर्ट्रान भी प्रक्रियात्मक भाषा है, इसलिए वह भी शीर्ष-पाद श्रेणी में ही आती है। नाम ही उसका परिचय है — फ़ॉर्मूला ट्रांसलेशन — और वह 1957 में आई.बी.एम. में जॉन बैकस के दल द्वारा विकसित पहली व्यापक रूप से प्रयुक्त उच्च-स्तरीय भाषा है, जो वैज्ञानिक और अभियांत्रिकी गणनाओं के लिए बनी थी और आज भी संख्यात्मक गणना में प्रयुक्त होती है। उसकी इकाइयाँ उप-रूटीन और फलन हैं, अर्थात् कार्य-विभाजन का वही ढंग जो शीर्ष-पाद अभिकल्प में अपेक्षित है। इस विकल्प को चुन लेने का प्रलोभन उसकी आयु से आता है — बहुत पुरानी भाषा होने के कारण वह ‘अलग’ लग सकती है — पर पूछ शैली की है, आयु की नहीं।
- (d)पास्कल (Pascal) — पास्कल इस समुच्चय में शीर्ष-पाद का सबसे स्पष्ट उदाहरण है, क्योंकि वह बनाई ही संरचित प्रोग्रामन सिखाने के लिए गई थी। निकलॉस विर्थ ने उसे 1970 के आसपास विकसित किया, और वही विर्थ चरणबद्ध परिष्करण की धारणा को व्यवस्थित रूप देने वाले लोगों में हैं, जिस पर पूरा शीर्ष-पाद अभिकल्प टिका है। भाषा की बनावट भी उसी अनुशासन को बल देती है — स्पष्ट घोषणाएँ, प्रक्रियाएँ और फलन, तथा नियंत्रण-संरचनाओं का सीमित और सुगठित समुच्चय — और यही कारण है कि वह लंबे समय तक पाठ्यक्रमों की भाषा बनी रही। अतः यह विकल्प भी उस परिवार के भीतर है जिससे बाहर पड़ने वाली भाषा खोजी जा रही है।
शीर्ष-पाद और अध:-शीर्ष सॉफ़्टवेयर अभिकल्प की दो दिशाएँ हैं। शीर्ष-पाद में विश्लेषण ऊपर से नीचे चलता है : पूरे तंत्र का एक सार लिखिए, उसे मुख्य प्रकार्यों में तोड़िए, और हर प्रकार्य को तब तक परिष्कृत करते जाइए जब तक वह सीधे कूटबद्ध किया जा सके। इसका लाभ यह है कि पूरे तंत्र की रूपरेखा आरंभ से स्पष्ट रहती है, और हानि यह कि नीचे के घटक तब तक जाँचे नहीं जा सकते जब तक ऊपर का ढाँचा न बन जाए, इसलिए परीक्षण के लिए अस्थायी ठूँठ (stubs) बनाने पड़ते हैं। अध:-शीर्ष में दिशा उलटी है : पहले छोटे, स्वतंत्र और पुन:प्रयोज्य घटक बनाइए, उन्हें अलग-अलग जाँचिए, और फिर जोड़कर बड़ा तंत्र खड़ा कीजिए; यहाँ पुनःप्रयोग अधिक होता है, पर पूरे तंत्र का रूप देर से स्पष्ट होता है और घटकों को जोड़ने के लिए चालक (drivers) लिखने पड़ते हैं। भाषाओं का वर्गीकरण इसी से जुड़ता है : प्रक्रियात्मक भाषाओं की मूल इकाई प्रकार्य है, इसलिए वे शीर्ष-पाद शैली के साथ चलती हैं; वस्तु-उन्मुख भाषाओं की मूल इकाई वर्ग और वस्तु है, जिनमें आँकड़े और क्रियाएँ एक साथ बँधी होती हैं, इसलिए वे अध:-शीर्ष शैली के साथ। वस्तु-उन्मुख प्रतिमान के चार स्तंभ — संवेष्टन, अमूर्तन, वंशानुक्रम और बहुरूपता — इसी घटक-पहले दृष्टिकोण को संभव बनाते हैं।
इस प्रकार के प्रश्न प्रोग्रामन भाषाओं के इतिहास और वर्गीकरण की सामान्य जानकारी परखते हैं, इसलिए तैयारी सूची बनाकर कीजिए और हर भाषा के आगे तीन बातें लिखिए : प्रतिमान, अनुमानित वर्ष, और मुख्य प्रयोग-क्षेत्र। यह भी ध्यान रखिए कि प्रतिमान की सीमाएँ आज उतनी कड़ी नहीं रह गई हैं जितनी पाठ्यपुस्तकों की तालिकाओं में दिखती हैं — कई पुरानी भाषाओं के बाद के संस्करणों में वस्तु-उन्मुख सुविधाएँ जोड़ी गई हैं, और वस्तु-उन्मुख भाषाओं में प्रकार्यात्मक शैली भी लिखी जाती है। परीक्षा में उत्तर उसी वर्गीकरण से निकालना होता है जिस पर प्रश्न खड़ा है, अर्थात् भाषा की मूल पहचान से : C, फोर्ट्रान और पास्कल प्रक्रियात्मक, जावा और C++ वस्तु-उन्मुख। एक और बात जो जावा के बारे में प्रायः पूछी जाती है : उसका संकलन बाइटकोड में होता है, जिसे जावा वर्चुअल मशीन चलाती है, और यही उसकी मंचनिरपेक्षता का आधार है।
- शीर्ष-पाद अभिकल्प में बड़ी समस्या को क्रमशः उप-समस्याओं में बाँटा जाता है — इसी को चरणबद्ध परिष्करण कहते हैं — जबकि अध:-शीर्ष अभिकल्प में पहले छोटे पुन:प्रयोज्य घटक बनाकर उन्हें जोड़ा जाता है।
- प्रक्रियात्मक भाषाओं की मूल इकाई प्रकार्य या प्रक्रिया है, इसलिए उन्हें शीर्ष-पाद श्रेणी में रखा जाता है; वस्तु-उन्मुख भाषाओं की मूल इकाई वर्ग और वस्तु है, इसलिए उन्हें अध:-शीर्ष श्रेणी में।
- C का विकास 1972 के आसपास बेल प्रयोगशालाओं में डेनिस रिची ने किया और यूनिक्स प्रचालन तंत्र इसी भाषा में फिर से लिखा गया।
- फोर्ट्रान 1957 में आई.बी.एम. में जॉन बैकस के दल द्वारा विकसित पहली व्यापक रूप से प्रयुक्त उच्च-स्तरीय भाषा है और वैज्ञानिक गणना के लिए बनी थी।
- पास्कल को निकलॉस विर्थ ने 1970 के आसपास संरचित प्रोग्रामन सिखाने के उद्देश्य से बनाया था।
- जावा 1995 में सन माइक्रोसिस्टम्स में जेम्स गोसलिंग के दल द्वारा आरंभ से ही वस्तु-उन्मुख भाषा के रूप में विकसित की गई और उसका संकलन बाइटकोड में होता है, जिसे जावा वर्चुअल मशीन चलाती है।
- नकारात्मक पूछ को उलट देना; पुस्तिका में ‘नहीं’ मोटे अक्षरों में छपा है और खोज उसी भाषा की है जो शेष तीन के परिवार से बाहर है।
- ‘शीर्ष-पाद’ को शीर्षक और पादलेख के अर्थ में पढ़ लेना; यहाँ उसका अर्थ केवल ऊपर से नीचे की अभिकल्प-दिशा है।
- फोर्ट्रान को केवल इसलिए चुन लेना कि वह सबसे पुरानी है; पूछ शैली की है, आयु की नहीं।
- C और C++ को एक मान लेना; वर्ग, वंशानुक्रम और बहुरूपता C++ में आते हैं, C में नहीं।
- यह मान लेना कि शीर्ष-पाद और अध:-शीर्ष भाषा के अंतर्निहित गुण हैं; वे अभिकल्प की पद्धतियाँ हैं, और वर्गीकरण भाषा की मूल इकाई के आधार पर किया जाता है।
भाषाओं के वर्गीकरण से प्रश्न प्रायः तीन ढंग से आते हैं। पहला ढंग यही है — तीन भाषाएँ एक परिवार से और एक बाहर से रखकर पूछना कि कौन-सी अलग है, कभी सकारात्मक पूछ के साथ और कभी नकारात्मक के साथ; इसलिए पहले यह तय कीजिए कि पूछ किस दिशा में है, फिर परिवार पहचानिए। दूसरा ढंग सुमेलन का है : भाषा और उसके निर्माता, अथवा भाषा और उसके प्रयोग-क्षेत्र को जोड़ना — फोर्ट्रान और वैज्ञानिक गणना, कोबोल और व्यावसायिक आँकड़े, C और प्रणाली-प्रोग्रामन, जावा और मंचनिरपेक्ष अनुप्रयोग। तीसरा ढंग परिभाषा का है : चरणबद्ध परिष्करण, संरचित प्रोग्रामन, संवेष्टन या वंशानुक्रम की परिभाषा पूछना। तीनों के लिए एक ही तालिका काम आती है, जिसमें हर भाषा के आगे प्रतिमान, वर्ष, निर्माता और प्रयोग-क्षेत्र लिखे हों।
इस प्रश्न से सीधे संबंधित कोई पूर्व PYQ उपलब्ध नहीं।
- practice — not a real PYQ
निम्नलिखित में से कौन-सी भाषा आरंभ से ही वस्तु-उन्मुख (object-oriented) भाषा के रूप में अभिकल्पित की गई थी?
- (a)C
- (b)पास्कल
- (c)जावा
- (d)फोर्ट्रान
उत्तर(c) जावा
- practice — not a real PYQ
चरणबद्ध परिष्करण (stepwise refinement) पर आधारित शीर्ष-पाद अभिकल्प में कार्य किस क्रम में बढ़ता है?
- (a)पहले छोटे पुन:प्रयोज्य घटक बनाए जाते हैं और फिर उन्हें जोड़कर तंत्र खड़ा किया जाता है
- (b)पहले पूरी समस्या को उप-समस्याओं में बाँटा जाता है और फिर प्रत्येक को और छोटा किया जाता है
- (c)पहले उपयोक्ता अंतरापृष्ठ बनाया जाता है और अंत में समस्या परिभाषित की जाती है
- (d)पहले कूट लिखा जाता है और बाद में उसका अभिकल्प तैयार किया जाता है
उत्तर(b) पहले पूरी समस्या को उप-समस्याओं में बाँटा जाता है और फिर प्रत्येक को और छोटा किया जाता है