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


11

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

कोई विचार ??


2
programmers.stackexchange.com पर यह प्रश्न पूछने पर आपको अधिक उत्तर मिलेंगे।
रेगी

2
आपका दर्शक क्या है? अनुभवी गैर-ऊ प्रोग्रामर (कोबोल, आदि)? कम-अनुभवी प्रोग्रामर (छात्र, आदि)? कार्यकारी (सभी में गैर प्रोग्रामर)?

मैंने इसके बारे में पहले नहीं सुना, लेकिन मैंने अक्सर पूछे जाने वाले प्रश्न पढ़े और मुझे लगता है कि यह वहाँ पूछना बेहतर है।
अहमद

कम अनुभवी।
अहमद

4
काश कुछ OO प्रोग्राम बेहतर तरीके से संरचित होते।
स्कॉट व्हिटलॉक

जवाबों:


17

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

  • संरचित प्रोग्रामिंग गोटो (नियंत्रण का प्रत्यक्ष हस्तांतरण) पर लगाया गया अनुशासन है

  • OO प्रोग्रामिंग कार्य के लिए संकेत पर लगाया जाता है (नियंत्रण का अप्रत्यक्ष हस्तांतरण)

  • कार्यात्मक प्रोग्रामिंग, असाइनमेंट पर लगाया गया अनुशासन है।

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

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

स्ट्रक्चर्ड प्रोग्रामिंग कैसे के बारे में है नहीं गोटो उपयोग करने के लिए। OO इस बात के बारे में है कि कार्यों के लिए पॉइंटर्स का उपयोग कैसे नहीं किया जाए। और कार्यात्मक प्रोग्रामिंग भी सभी के बारे में है कि क्या नहीं करना है। कार्यात्मक प्रोग्रामिंग में हम सबसे कठोर नियंत्रित मामलों को छोड़कर चर नहीं देते हैं।

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

जो नहीं करना है उसे सीखना अच्छा है; लेकिन यहाँ परेशान सवाल है: क्या नई बातें हमें पता चला है के लिए करते हैं?


@Ahmed: +1 के लिए "टी एल; डॉ, वीडियो के लिए धन्यवाद" -suspicious टिप्पणी (मजाक)
n611x007

लिंक रॉट ... डेड लिंक
स्लैशडॉटिर

7

कंप्यूटर प्रोग्राम करने के 3 मूल तरीके हैं:

  1. असंरचित प्रोग्रामिंग - gotoएस के साथ , पुराने बेसिक दुभाषियों की तरह, या विधानसभा भाषा में। कुछ लोग अब इस तरह से प्रोग्राम करते हैं।
  2. संरचित अनिवार्य प्रोग्रामिंग - जैसे C, या PASCAL।
  3. संरचित कार्यात्मक प्रोग्रामिंग - जैसे हास्केल, एमएल, या लिस्प में।

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


मैं तुम्हें अच्छी तरह से समझ में नहीं आता! आप मतलब है कि हम 3 प्रतिमानों में से एक का उपयोग कर रहे हैं, लेकिन हम नहीं जानते .. और OOP सिर्फ अधिक संगठन के बारे में है ??
अहमद

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

4

यह सब आपके बारे में है कि आप कैसे बदलाव का अनुमान लगाते हैं।

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

आप कह सकते हैं कि OOP वंशानुक्रम की अतिरिक्त कार्यक्षमता के साथ संरचनात्मक प्रोग्रामिंग की सभी कार्यक्षमता विरासत में मिली है! :-D


मैं इस समय विरासत के बहुत शौकीन नहीं हूं।

4
न तो मैं हूं, लेकिन ऐसा इसलिए है क्योंकि सरकार ने मेरे दादा को उनकी पेंशन से बाहर कर दिया है। OOP के संदर्भ में, हालांकि, उत्तराधिकार ने मुझे काफी अच्छी तरह से सेवा दी है!
corsiKa

मेरे अनुभव में, विरासत OOP में सबसे अच्छा बचा जाता है। कितनी बार आप वास्तव में एक अंतरफलक के विपरीत एक सुपरक्लास का निर्माण करते हैं? एक सामान्य नियम के रूप में अनुकूल रचना।
Janx

1
@ जेनएक्स: "कितनी बार आप वास्तव में एक इंटरफेस के विपरीत एक सुपरक्लास का निर्माण करते हैं?" है ना? आप "सुपरक्लास का निर्माण नहीं" करते हैं; आप उन लोगों से मौजूदा वर्गों और निर्माण subclasss लेते हैं, और आप करते हैं कि हर समय। यदि आप इनहेरिटेंस का उपयोग नहीं कर रहे हैं, तो आपको लिस्कोव प्रतिस्थापन और बहुरूपता का लाभ नहीं मिल रहा है, इसलिए आप पहली बार ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में क्या कर रहे हैं? संरचना एक अलग उपयोग के मामले के साथ एक अलग उपकरण है, विरासत के लिए एक प्रतिस्थापन नहीं है। आपको दूसरे पर "एहसान" नहीं करना चाहिए; आपको दोनों का उपयोग करना चाहिए, प्रत्येक के लिए वे उपयोगी हैं।
मेसन व्हीलर

1
@ मेसन - ध्यान देने योग्य बात यह है कि बारबरा लिस्कॉव (लिस्कॉव सबस्टीट्यूशन प्रिंसिपल का) वास्तव में कहा (लंबा वीडियो) वह विशेष रूप से विरासत को पसंद नहीं करता है।
एदन कूली

2

अवधारणाएं रूढ़िवादी हैं। संरचित प्रोग्रामिंग प्रक्रियाओं / कार्यों / विधियों के भीतर संरचना कोड के बारे में है। ओओपी करते समय वर्ग विधियों के भीतर संरचित प्रोग्रामिंग के सिद्धांतों का पालन करना पूरी तरह से संभव (और वांछनीय) है।


1

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

सूचना छिपाने और प्रतिरूपकता के बारे में बात करना स्वाभाविक रूप से OOP को एक शैली के रूप में प्रेरित करने का एक अच्छा तरीका है।

स्टीव Yegge द्वारा इस मुद्दे पर एक दिलचस्प बात लिखी गई थी - कुछ तरीकों से, दो शैलियों के बीच दृष्टिकोण में अंतर के बेहतर विवरणों में से एक।


0

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

OOP को आसान परिवर्तनों के लिए डिज़ाइन किया गया है। संरचनात्मक कार्यक्रम में परिवर्तन संभव है लेकिन कोड द्वारा वर्णित किया जाना चाहिए। ओओ कार्यक्रम में बदलाव को सार मॉडल परिवर्तन द्वारा वर्णित किया जा सकता है।


0

चर स्कोप:

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

  • वैश्विक कार्यक्षेत्र
  • स्थानीय / समारोह / विधि क्षेत्र

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

C ++ जैसी OOP भाषाएँ एक नए प्रकार की गुंजाइश जोड़ती हैं- इनकैप्सुलेशन के माध्यम से क्लास / ऑब्जेक्ट स्कोप । इस स्कूपिंग को निजी / सार्वजनिक विविधताओं द्वारा और बढ़ाया जाता है। और यह वेरिएबल स्कूपिंग की कई समस्याओं को हल करता है। OOP में स्कोप अधिक परिभाषित हैं। और पॉइंटर्स की कम जरूरत होती है।

यह OOP की महान विशेषताओं में से एक है।

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