इंपीरियल, प्रक्रियात्मक और संरचित प्रोग्रामिंग के बीच अंतर क्या है?


85

चारों ओर शोध करके (किताबें, विकिपीडिया, एसई पर समान प्रश्न, आदि) मुझे समझ में आया कि इंपीरियल प्रोग्रामिंग प्रमुख प्रोग्रामिंग प्रतिमानों में से एक है, जहां आप कंप्यूटर को निष्पादित करने के लिए आदेशों (या बयानों) की एक श्रृंखला का वर्णन करते हैं (इसलिए आप सुंदर हैं विशिष्ट कार्यों को करने के लिए बहुत आदेश, इसलिए नाम "अनिवार्य")। अब तक सब ठीक है।

दूसरी ओर, प्रक्रियात्मक प्रोग्रामिंग, एक विशिष्ट प्रकार की (या सबसेट) इम्पीरेटिव प्रोग्रामिंग है, जहां आप कंप्यूटर का प्रदर्शन करने वाली कमांड का वर्णन करने के लिए प्रक्रियाओं (यानी, फ़ंक्शन) का उपयोग करते हैं।

पहला प्रश्न : क्या कोई इंपीरियल प्रोग्रामिंग भाषा है जो प्रक्रियात्मक नहीं है? दूसरे शब्दों में, क्या आप प्रक्रियाओं के बिना इम्पीरेटिव प्रोग्रामिंग कर सकते हैं?

अद्यतन : यह पहला सवाल का जवाब दिया जा रहा है। एक भाषा प्रक्रियागत या संरचित किए बिना अनिवार्य हो सकती है। एक उदाहरण शुद्ध विधानसभा भाषा है।

फिर आपके पास स्ट्रक्चर्ड प्रोग्रामिंग भी है, जो इंपीरियल प्रोग्रामिंग का एक अन्य प्रकार (या सबसेट) प्रतीत होता है, जो गोटो बयान पर निर्भरता को दूर करने के लिए उभरा।

दूसरा प्रश्न : प्रक्रियात्मक और संरचित प्रोग्रामिंग के बीच अंतर क्या है? क्या आप एक दूसरे के बिना हो सकते हैं, और इसके विपरीत? क्या हम कह सकते हैं कि प्रक्रियात्मक प्रोग्रामिंग संरचित प्रोग्रामिंग का एक सबसेट है, जैसा कि छवि में है?

यहाँ छवि विवरण दर्ज करें

जवाबों:


52

प्रोग्रामिंग भाषाओं के बारे में कई शब्दों का पुन: उपयोग (अक्सर दुरुपयोग) किया जा सकता है, विशेष रूप से ऑब्जेक्ट ओरिएंटेड के अलावा अन्य।

यहां शर्तों के कुछ छोटे विवरण दिए गए हैं।

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

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

    • संरचित प्रोग्रामिंग किसी भी प्रोग्रामिंग है जब कार्यक्षमता को for loop, while loop, if... thenब्लॉक संरचना आदि जैसी इकाइयों में विभाजित किया जाता है ।
    • इसके अलावा, यहां एक कोड ऑफ कोड (फंक्शन) को फिर से इस्तेमाल किया जा सकता है।
    • में मॉड्यूलर प्रोग्रामिंग , एक पैकेज के एक भौतिक रूप बना सकते हैं - कोड का एक हिस्सा है कि भेज दिया जा सकता है यानी; जो काफी सामान्य उद्देश्य और पुन: प्रयोज्य हैं। इसे एक साथ संकलित तत्वों के मॉड्यूल कहा जाता है ।
    • तो एक शायद ही मॉड्यूलर कार्यक्रमों को देख सकता है जो संरचित नहीं हैं और इसके विपरीत; तकनीकी परिभाषा बिल्कुल अलग है, लेकिन ज्यादातर संरचित कोड को मॉड्यूलर और अन्य तरीके से बनाया जा सकता है।
  3. फिर "ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग" आया जिसे साहित्य में अच्छी तरह से परिभाषित किया गया है। यह समझें कि ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग परिभाषा द्वारा संरचित प्रोग्रामिंग का एक रूप है। उन सभी फ़ंक्शन आधारित कोड का नया नाम जो संरचित कोड है, लेकिन ऑब्जेक्ट ओरिएंटेड नहीं है, जिसे अक्सर प्रोसीडुरल प्रोग्रामिंग कहा जाता है।

    • तो मूल रूप से संरचित कोड जहां कार्य (या प्रक्रियाएं) डेटा पर हावी होती हैं उन्हें प्रक्रियात्मक कहा जाता है जबकि वर्ग और वस्तु आधारित प्रतिनिधित्व को वस्तु उन्मुख कहा जाता है। परिभाषा के अनुसार दोनों भी मॉड्यूलर हैं।

बहुत से लोग सोचते हैं - सभी संरचित प्रोग्रामिंग (शायद लंघन वस्तु आधारित) अनिवार्य प्रोग्रामिंग के रूप में; मुझे लगता है कि यह केवल अनिवार्य प्रोग्रामिंग की स्पष्ट परिभाषा की कमी के कारण है - लेकिन यह गलत है। आप संरचित प्रोग्रामिंग कर रहे हैं जब आप बहुत जरूरी नहीं कर रहे हैं! लेकिन मैं अभी भी कई कार्यों के साथ-साथ C या FORTRAN प्रोग्राम को मिक्सअप करने के लिए बहुत सारे गोटो स्टेटमेंट लिख सकता हूं।

अपने प्रश्नों के लिए विशिष्ट होने के लिए:

पहला प्रश्न : शुद्ध विधानसभा भाषा अनिवार्य भाषा है जो संरचित या प्रक्रियात्मक नहीं है। (स्टेप बाई स्टेप व्याख्यात्मक नियंत्रण प्रवाह का मतलब प्रक्रियात्मक नहीं है - लेकिन कार्यों में कार्यक्षमता का विभाजन वह है जो भाषा को प्रक्रियात्मक बनाता है)।

  • सुधार * विधानसभा के अधिकांश आधुनिक रूप कार्यों के उपयोग का समर्थन करते हैं। वास्तव में, उच्च स्तर के कोड में संभव है कि सब कुछ काम करने के लिए निम्न स्तर मौजूद है। हालाँकि यह प्रक्रियात्मक कोड बनाने के लिए एक बेहतर अभ्यास है, लेकिन प्रक्रियात्मक और अनिवार्य दोनों कोड लिखना संभव है। उत्तरार्द्ध के विपरीत, यह समझने योग्य और आसान है (भयानक स्पेगेटी कोड से बचना)। मुझे लगता है कि शेल / बैश स्क्रिप्ट हैं जो बेहतर रूप से शुद्ध होने की प्रशंसा करते हैं, लेकिन फिर भी, अधिकांश कार्य हैं, डेवलपर्स निश्चित रूप से समझते हैं कि उनके पास कितना मूल्य है।

दूसरा प्रश्न : प्रक्रियात्मक प्रोग्रामिंग एक है फार्म संरचित प्रोग्रामिंग की।


बोनस

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

  • ऑब्जेक्ट ओरिएंटेड के बाद, अन्य प्रोग्रामिंग प्रतिमानों का आविष्कार किया गया है: अधिक जानकारी के लिए यहां देखें: पहलू-उन्मुख, विषय-उन्मुख और भूमिका-उन्मुख प्रोग्रामिंग के बीच अंतर क्या हैं?


1
तो क्या आप कहेंगे कि जरूरी प्रक्रियात्मक प्रोग्रामिंग भी संरचित प्रोग्रामिंग है, जबकि विपरीत सच नहीं है (हालांकि अक्सर मामला)?
डैनियल स्कोको

2
हां, मैं ऐसा कहूंगा।
दीपन मेहता

1
मेरे उत्तर में मैंने अनिवार्य बनाम संरचित को परिभाषित किया है - जहां अनिवार्य प्रोग्रामिंग को केवल चरण-दर-चरण निष्पादन के साथ लिखा जाता है और इसे संरचित नहीं किया जाता है। हालांकि, कुछ परिभाषा के अनुसार एक और वर्गीकरण है; यह घोषणात्मक (या कार्यात्मक भाषा) बनाम इंपीरियल के बीच एक वर्गीकरण है। घोषणात्मक भाषाएं इसके नियंत्रण प्रवाह का वर्णन किए बिना गणना करने की अनुमति देती हैं जहां अनिवार्य है जहां स्पष्ट नियंत्रण प्रवाह (चरण-दर-चरण) परिभाषित किया गया है। इस वर्गीकरण के आधार पर, इंपीरियल प्रोग्रामिंग, कुछ के लिए संरचित का एक सुपर-सेट हो सकता है। कुछ लोग उस परिभाषा का पालन नहीं करते हैं।
दीपन मेहता

मेरे पास एक अलग राय है, संरचित प्रोग्रामिंग की परिभाषा के संबंध में। संरचित प्रोग्रामिंग और मॉड्यूलर प्रोग्रामिंग एक ही बात नहीं है। कृपया इस नोट के अंत में परिभाषा देखें। उसी लिंक से पता चलता है कि असेम्बलर ** एक संरचित प्रोग्रामिंग भाषा है! STP की परिभाषा का संदर्भ: en.wikipedia.org/wiki/Structured_programming
इमाम

"पैकेज का भौतिक रूप" है ... एक फ़ाइल, या फ़ाइलों का एक निर्देशिका / संग्रह? (या यह नहीं है, और यह कुछ और है।)
n611x007

4

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

दूसरा प्रश्न: अंतर अक्सर एक अलग दायरे में होता है। आपके पास सभी जगहों पर गोटो स्टेटमेंट के साथ एक फ़ंक्शन हो सकता है, जो प्रक्रियात्मक शैली में होगा, लेकिन संरचित प्रोग्रामिंग नहीं। दूसरी ओर, अधिकांश OO भाषाएँ संरचित प्रोग्रामिंग का समर्थन करती हैं और प्रोत्साहित करती हैं, लेकिन प्रक्रियात्मक प्रोग्रामिंग नहीं।

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

जैसे, ये दोनों गुण नगण्य हैं, आपके पास एक के बिना दूसरा हो सकता है।


1
प्रक्रियात्मक होने के लिए एकमात्र लिटमस परीक्षण यह है कि भाषा में प्रक्रियाएं (कार्य या विधियाँ ) होती हैं और यह इम्पीरेटिव अर्थात होती हैं। गैर घोषणात्मक। इसका मतलब यह है कि अधिकांश OO भाषाएँ जो शुद्ध कार्यात्मक नहीं हैं वे प्रक्रियात्मक होंगी।
डायटबुद्ध

1
@ दिदिबुद्ध: इस परिभाषा के अनुसार, हास्केल अपने भिक्षुओं के उपयोग के माध्यम से एक प्रक्रियात्मक भाषा के रूप में अर्हता प्राप्त करेंगे। मुझे भाषा को प्रक्रियात्मक बनाने के लिए प्रक्रियाओं पर निर्भरता की एक निश्चित आवश्यकता होगी।
थिटॉन

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

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

1
@thiton मैं असहमत हूं। मोनाड्स कार्यात्मक निर्माण भी हैं; वे केवल हास्केल के सिंटैक्स चीनी ("अंकन") के कारण जरूरी दिखते हैं। जब आप भिक्षुओं को निर्वासित करते हैं, तो उनकी कार्यात्मक प्रकृति स्पष्ट हो जाती है। इसके विपरीत, OO भाषाएँ वास्तव में अत्यावश्यक हैं: उनके मूल में वे कथनों के क्रमिक निष्पादन पर आधारित हैं।
एंड्रेस एफ।

2

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

इन भाषाओं को अनिवार्य भाषा कहा जाता है।

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


1
+1 यह निश्चित नहीं है कि प्रश्न के साथ क्या करना है, लेकिन यह एक दिलचस्प जवाब है।
चक कॉनवे

2
क्या? इंपीरियल बनाम प्रोसेडुरल, आदि के बारे में कहां हिस्सा है?
bbqchickenrobot

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

2

मुझे डर है कि दिए गए उत्तरों में से कोई भी अब तक अवधारणाओं के मूल को अच्छी तरह से पकड़ नहीं पाया है।

इंपीरियल, प्रक्रियात्मक और संरचित परस्पर अनन्य गुण नहीं हैं, वे सिर्फ मॉडलिंग लॉजिक के एक पहलू पर ध्यान केंद्रित करते हैं।

इम्पीरेटिव घोषणात्मक का काउंटर पार्ट है मूल रूप से इसका मतलब है कि आप कंप्यूटर को बताते हैं कि यह क्या करना है जो आपके द्वारा प्रदान किए जाने वाले निर्देशों की एक श्रृंखला को निष्पादित करता है। दूसरी ओर एक घोषणात्मक कार्यक्रम बताता है कि क्या हासिल करना है । दूसरे शब्दों में, परिणाम को परिभाषित करने वाले चरणों को परिभाषित करें।

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

संरचित प्रोग्रामिंग एक और निर्देश पर कूदने की क्षमता से अगला कदम है। अंतत: सबकुछ उछल कर नीचे आ जाता है, लेकिन यदि आपके पास सशर्त छलांग हो सकती है, तो आप बुनियादी नियंत्रण प्रवाह विवरणों का निर्माण कर सकते हैं, जैसे अगर, तब, जबकि, फिर से-जब तक और स्विच। उन्हें लागू करने को संरचित प्रोग्रामिंग कहा जाता है।

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

घोषणात्मक प्रोग्रामिंग अभी भी आम नहीं है, मुख्यतः क्योंकि यह हमेशा डोमेन विशिष्ट होगा, कम से कम कुछ हद तक। आपके पास सामान्य उद्देश्य घोषित भाषा नहीं हो सकती। यही कारण है कि हम अभी भी तथाकथित तीसरी पीढ़ी की भाषाओं के साथ फंस गए हैं, जहां घोषणात्मक प्रोग्रामिंग या "मॉडलिंग" को 4 वीं पीढ़ी माना जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.