OOP का क्या मतलब है?


126

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

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

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

तो मैं यहाँ क्या याद कर रहा हूँ? कहां ओओपी का मूल्य है, और सभी समय और धन सॉफ्टवेयर को बेहतर बनाने में विफल क्यों है?


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

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

4
ओओपी के साथ समस्या इसे संदर्भ में रखने में विफल है। यह कुछ उद्देश्यों के लिए उत्कृष्ट है, सभी उद्देश्यों के लिए नहीं। यह एक महान उपकरण है। यह एक घटिया सुसमाचार है।
माइक डनलैवी

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

2
@George Jempty: यह "कैसे Microsoft ने एपीआई युद्ध को खो दिया" में जोएल स्पोल्स्की था ( joelonsoftware.com/articles/APIWar.html ), मार्ग का शीर्षक "स्वचालित प्रसारण दिन जीत" है।
GodsBoss

जवाबों:


24

कोई अनुभवजन्य साक्ष्य नहीं है जो बताता है कि वस्तु अभिविन्यास लोगों के लिए दुनिया के बारे में सोचने का अधिक स्वाभाविक तरीका है। प्रोग्रामिंग के मनोविज्ञान के क्षेत्र में कुछ काम है जो दर्शाता है कि OO अन्य दृष्टिकोणों की तुलना में किसी भी तरह से अधिक उपयुक्त नहीं है।

वस्तु-उन्मुख अभ्यावेदन सार्वभौमिक रूप से अधिक प्रयोग करने योग्य या कम उपयोग करने योग्य प्रतीत नहीं होते हैं।

यह केवल OO विधियों को अपनाने के लिए पर्याप्त नहीं है और डेवलपर्स को ऐसे तरीकों का उपयोग करने की आवश्यकता होती है, क्योंकि इससे डेवलपर उत्पादकता पर नकारात्मक प्रभाव पड़ सकता है, साथ ही सिस्टम की गुणवत्ता भी विकसित हो सकती है।

जो ACM अक्टूबर 2000 के संचार से "ओओ प्रतिनिधियों की उपयोगिता पर" से है। लेख मुख्य रूप से Opro की ओर उन्मुख-विरोधी दृष्टिकोण के खिलाफ तुलना करता है। ओओ पद्धति के साथ काम करने वाले लोग "थिंक" (मानव-कंप्यूटर अध्ययन 2001 के इंट। जे।, अंक 54, या मानव-कंप्यूटर इंटरेक्शन 1995, वॉल्यूम 10 में ओओ के अध्ययन पर एक संपूर्ण विषय है) के साथ अध्ययन के बहुत सारे हैं। और जो मैंने पढ़ा है, उसमें ओओ दृष्टिकोण के लिए किसी प्रकार की स्वाभाविकता को इंगित करने के लिए कुछ भी नहीं है जो इसे अधिक पारंपरिक प्रक्रियात्मक दृष्टिकोण से बेहतर अनुकूल बनाता है।


18
यह बढ़िया काम करता है। यह अच्छा कोड लिखने के लिए बुरे कोडर्स को मजबूर नहीं कर सकता है। एक आवधिक ह्यू है और उस कारण से इसके खिलाफ रोना है।
अराजकता

6
@melaos: सारांश मध्य में है। OOP टूलकिट में एक उपकरण है, केवल एक ही नहीं है, और प्रशिक्षण, अनुभव और निर्णय के लिए कोई विकल्प नहीं है।
माइक डनलैवी

44
मुझे यह बहुत अच्छा लगता है जब कोई व्यक्ति एक बिंदु पर बहस करने के लिए "प्रश्न" पोस्ट करता है तो पहले उत्तर को स्वीकार करता है जो उसकी बात का समर्थन करता है, भले ही इसके विपरीत समर्थन करने वाले उच्च श्रेणी के प्रश्न हों। मानव स्वभाव शांत है।
बिल के

3
@ मेलाओस, सारांश (उन लेखों में से कम से कम) यह है कि कुछ भी नहीं बताता है कि ओओ लोगों के लिए सोचने का एक स्वाभाविक तरीका है, और इस प्रकार, किसी भी अन्य तरीके से बेहतर नहीं है कि कोई भी कार्यक्रमों का निर्माण कर सके।
Svend

6
@ बिल के: यह उन कुछ जवाबों में से एक था जो हाथ से लहराते और मात्र आग्रह के बजाय उद्धरण प्रदान करते थे कि OO को "बेहतर" होना चाहिए। यदि संदर्भित साहित्य इस धारणा का समर्थन करता है कि OO कोई विशेष सुधार या कोई विशेष लाभ नहीं है, और इसलिए मेरी मूल स्थिति का समर्थन करता है, तो मुझे यकीन नहीं है कि मुझे इसकी उपेक्षा क्यों करनी चाहिए। क्या आप इसी तरह के संदर्भ प्रदान कर सकते हैं जो मेरे ओपी को काउंटर करते हैं?
DrPizza

119

वास्तविक दुनिया "OO" नहीं है, और OO में निहित विचार - कि हम कुछ वर्ग वर्गीकरण के साथ चीजों को मॉडल कर सकते हैं - मुझे बहुत मौलिक रूप से दोषपूर्ण लगता है

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

बहुत बेहतर हैं, अधिक सार्वभौमिक मॉडल ( हास्केल का प्रकार मॉडल दिमाग में आता है) लेकिन ये भी अधिक जटिल और / या कुशलता से लागू करने के लिए मुश्किल हैं। OOP चरम सीमाओं के बीच एक अच्छा व्यापार है।


10
मुझे यह दिलचस्प लगता है कि इसमें प्रश्न से अधिक वोट हैं, और स्वीकृत उत्तर, संयुक्त।
ब्रैड गिल्बर्ट

15
मुझे OO की तुलना में हास्केल के प्रकार की प्रणाली बहुत अधिक सहज लगती है।
axblount

4
@Konrad: "लेकिन यह बड़े पैमाने पर अनुप्रयोगों को बहुत सरल बनाता है" - हम्म, इम यकीन नहीं है कि यह सच है। यह उन्हें इस अर्थ में अधिक बनाए रखता है कि एक चीज को दूसरे को तोड़ना आसान नहीं होना चाहिए? कि एक निगल करने के लिए एक शरद है ...
मिच गेहूं

2
@ ब्रैडगिल्बर्ट: बेशक पूछने वाले ने एक उत्तर का चयन किया जो अपने प्रारंभिक प्रश्न में राय के साथ पूरी तरह से संरेखित करता है। जो सवाल उठाता है, अगर आप पहले से ही अपने जवाब पर फैसला कर चुके हों, तो सवाल पूछने से क्यों गुरेज करें?
टीएम।

2
@ मिच: मैं जहां तक ​​यह दावा कर सकता हूं कि आप (आज तक) किसी तरह के ऑब्जेक्ट ओरिएंटेशन के बिना बड़े पैमाने पर एप्लिकेशन नहीं लिख सकते। यहां बड़े पैमाने पर> 1M LOC है।
कोनराड रुडोल्फ

45

OOP फिर से उपयोग करने योग्य कक्षाएं बनाने के बारे में नहीं है, इसके बारे में उपयोग करने योग्य कक्षाएं बनाने के लिए।


7
अच्छा है! और इतना सच है।
तून Krijthe

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

42

सभी अक्सर, वर्ग को सिंटैक्टिक शुगर के लिए उपयोग किया जाता है; यह एक रिकॉर्ड प्रकार के कार्यों को अपने छोटे नामस्थान में रखता है।

हां, मुझे यह बहुत प्रचलित लगता है। यह ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग नहीं है। यह ऑब्जेक्ट आधारित प्रोग्रामिंग और डेटा केंद्रित प्रोग्रामिंग है। ओओ लैंग्वेजेस के साथ काम करने के मेरे 10 वर्षों में, मैं देख रहा हूं कि लोग ज्यादातर ऑब्जेक्ट आधारित प्रोग्रामिंग कर रहे हैं। OBP बहुत जल्दी से IMHO टूट जाता है क्योंकि आप अनिवार्य रूप से दोनों शब्दों में से सबसे खराब हो रहे हैं: 1) सिद्ध संरचित प्रोग्रामिंग पद्धति और 2) OOP का पालन किए बिना प्रक्रियात्मक प्रोग्रामिंग सिद्ध OOP कार्यप्रणाली का पालन किए बिना।

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

अधिकांश डेवलपर जो ओओपी भाषाओं में काम करते हैं, वे ओआरओपी के उदाहरणों का सही उपयोग कर रहे हैं, जो कि उन फ्रेमवर्क और प्रकारों में हैं जो वे दिन-प्रतिदिन उपयोग करते हैं, लेकिन वे इसके बारे में जागरूक नहीं हैं। यहां कुछ बहुत ही सरल उदाहरण हैं: ADO.NET, Hibernate / NHibernate, Logging Frameworks, विभिन्न भाषा संग्रह प्रकार, ASP.NET स्टैक, JSP स्टैक आदि ... ये सभी चीजें हैं जो अपने कोडबेस में OOP पर बहुत अधिक निर्भर हैं।


32

पुन: उपयोग OOP - या उस मामले के लिए किसी भी अन्य प्रतिमान का लक्ष्य नहीं होना चाहिए।

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

विरासत के माध्यम से पुन: उपयोग करने के लिए एक नए तरीके के रूप में OO का विचार मौलिक रूप से त्रुटिपूर्ण है। जैसा कि आप एलएसपी उल्लंघन का उल्लेख करते हैं। इसके बजाय, OO को समस्या डोमेन की जटिलता के प्रबंधन के तरीके के रूप में ठीक से समझा जाता है। लक्ष्य समय के साथ एक प्रणाली की स्थिरता है। इसे प्राप्त करने के लिए प्राथमिक उपकरण एक निजी कार्यान्वयन से सार्वजनिक इंटरफ़ेस का पृथक्करण है। यह हमें संकलक द्वारा कोड संकलित करने के बजाय "इसे केवल संशोधित करके उपयोग किया जाना चाहिए ..." जैसे नियम हैं।

इसका उपयोग करते हुए, मुझे यकीन है कि आप सहमत होंगे, हमें बेहद जटिल सिस्टम बनाने और बनाए रखने की अनुमति देता है। उस में बहुत सारे मूल्य हैं, और अन्य प्रतिमानों में करना आसान नहीं है।


3
पुन: उपयोग और OO अलग-अलग चिंताओं के बारे में सच है।
दान रोसेनस्टार्क

28

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

मैं अपने सिर के ऊपर से दर्जनों पुस्तकालयों के बारे में सोच सकता हूं जो खूबसूरती से पुन: प्रयोज्य हैं और जिन्होंने समय और धन की बचत की है जिनकी गणना कभी नहीं की जा सकती है।

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


2
मैंने आपको सिर्फ एक उत्थान दिया है जिसने आपको 2000 अंकों से ऊपर फेंक दिया है - उम्मीद है कि यह चिपक जाएगा। : पी
जेसन बंटिंग

5
OOP को प्रभावी ढंग से पढ़ाया जाना दुर्लभ है।
जॉन डब्ल्यू

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

21

मुझे लगता है कि अपारदर्शी संदर्भ वस्तुओं (Win32 में हस्तरेखा, C में FILE * s का उपयोग, दो प्रसिद्ध उदाहरणों को नाम देने के लिए - नरक, हस्तरेखा कर्नेल-मोड बाधा के दूसरी तरफ रहते हैं, और यह वास्तव में मिलता है। उस प्रक्रिया की तुलना में बहुत अधिक संक्षिप्त) प्रक्रियात्मक कोड में भी पाया जाता है; मैं यह देखने के लिए संघर्ष कर रहा हूं कि यह ओओपी के लिए कुछ खास कैसे है।

HANDLE(और WinAPI के बाकी) है OOP! C OOP को बहुत अच्छी तरह से समर्थन नहीं करता है इसलिए कोई विशेष वाक्यविन्यास नहीं है लेकिन इसका मतलब यह नहीं है कि यह समान अवधारणाओं का उपयोग नहीं करता है। WinAPI शब्द के हर मायने में एक वस्तु-उन्मुख रूपरेखा है।

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


1
मैं बस कुछ इसी तरह की पोस्ट करने वाला था।
ब्रैड गिल्बर्ट

मैं सहमत हूं कि आप विशेष वाक्य रचना के बिना OOP अवधारणाओं का उपयोग कर सकते हैं, लेकिन दूसरी ओर, मुझे नहीं लगता कि WinAPI OOP अवधारणाओं का एक अच्छा उदाहरण है।
लीना शिमेल

14

इसकी एक प्रोग्रामिंग प्रतिमान .. हमारे लिए यह आसान बना दिया गया है कि हम नश्वर लोगों के लिए छोटे, व्यावहारिक टुकड़ों में एक समस्या को तोड़ दें।

यदि आपको यह उपयोगी नहीं लगता है .. तो इसका उपयोग न करें, प्रशिक्षण के लिए भुगतान न करें और खुश रहें।

मैं दूसरी ओर इसे उपयोगी पाते हैं, इसलिए मैं करूंगा :)


14

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

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

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


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

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

2
@ जोनास - आपके "सी फ़ंक्शन का एक गुच्छा" के लिए --- मैं सहमत हूं कि वे एक इंटरफ़ेस को एक कार्यान्वयन से अलग कर सकते हैं, और उस बिंदु पर यह ओओपी होना शुरू हो सकता है। यदि उदाहरण उस C संरचना को परिभाषित करना जारी रखता है जिस पर API संचालित होता है, तो आपने मूल रूप से एनकैप्सुलेशन बनाया है (विशेषकर यदि API संरचना पर अस्पष्ट रूप से काम करता है) ... और फिर यह वास्तव में C में OOP है
लंबा जेफ

12

OOP के साथ समस्या यह है कि यह ओवरसोल्ड था।

जैसा कि एलन के ने मूल रूप से कल्पना की थी, यह कच्चे डेटा और अखिल-वैश्विक दिनचर्या होने के पूर्व अभ्यास का एक बढ़िया विकल्प था।

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

अब वे अन्य अच्छे विचारों को ओवरसोल्ड होने के बाद लेम्बिंग-जैसे टंबलिंग कर रहे हैं, जैसे कि कार्यात्मक प्रोग्रामिंग।

तो मैं अलग तरीके से क्या करता? खूब, और मैंने इस पर एक किताब लिखी। (यह प्रिंट से बाहर है - मुझे एक प्रतिशत नहीं मिलता है, लेकिन आप अभी भी प्रतियां प्राप्त कर सकते हैं ।) अमेज़ॅन

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

यह बहुत अलग है, और सूचना सिद्धांत पर आधारित है (एक स्तर पर जिसे कोई भी समझ सकता है)। यह कहता है कि प्रोग्रामिंग को भाषाओं को परिभाषित करने की प्रक्रिया के रूप में देखा जा सकता है, और ऐसा करने में कौशल अच्छी प्रोग्रामिंग के लिए आवश्यक है।

यह डोमेन-विशिष्ट-भाषाओं (डीएसएल) की अवधारणा को बढ़ाता है। यह DRY के साथ सशक्त रूप से सहमत है (अपने आप को दोहराएं नहीं)। यह कोड पीढ़ी के लिए एक बड़ा अंगूठे देता है। यह आधुनिक अनुप्रयोगों के लिए विशिष्ट रूप से कम डेटा संरचना वाले सॉफ़्टवेयर में परिणाम देता है।

यह इस विचार को फिर से मज़बूत करना चाहता है कि जिस तरह से आगे आविष्कार में निहित है, और यह कि अच्छी तरह से स्वीकार किए गए विचारों पर भी सवाल उठाया जाना चाहिए।


ठंडा। चूंकि पुस्तक प्रिंट से बाहर है, आप PDF प्रदान नहीं करना चाहेंगे, हां? अमेज़ॅन ने धीरे-धीरे अर्जेंटीना को भेजा ...
दान रोसेनस्टार्क

मुझे लगता है कि कहीं न कहीं इस प्रक्रिया के शुरू में, कुछ अच्छी कोडर क्या वे OOP के साथ उन्हें सुन कोई कर सकता है, और के बारे में असंबद्ध काव्य का बढ़ता रहा और सोचा था कि कि मतलब हर किसी के दोनों और इसी तरह करना होगा सकता है।
अराजकता

@ दानिएल: अच्छा सुझाव। मैं उस पर काम करूंगा, और देखूंगा कि क्या मैं इसे अपने ब्लॉगस्पॉट में संलग्न कर सकता हूं। आप इसे थोड़ा पुराने ढंग का पाएंगे, क्योंकि यह '94 में था, लेकिन सिद्धांत नहीं बदले हैं।
माइक डनलैवी

1
@ माइक डनलैवी प्रिय महोदय, क्या मैं यह जानने के लिए @ yar की जिज्ञासा का समर्थन कर सकता हूं कि क्या इंटरनेट के माध्यम से आपकी किताब [कम से कम आंशिक रूप से] पढ़ने का मौका है या नहीं? जैसा कि यह प्रभावी सॉफ्टवेयर का तरीका लगता है [घटक] विनिर्देश / कार्यान्वयन जिसे आप प्रस्तावित करते हैं / विकसित करते हैं, एक से निकटता से मेल खाता है / [हाल ही में पहचाना गया] मैं सीखना चाहता हूं या सिखाया जाना चाहिए (जैसा कि, ठीक है, 'कार्गो' का तरीका अच्छी तरह से पेश किया गया है) लिखित लेकिन दर्दनाक अस्पष्ट मुख्यधारा OO पुस्तकें)। अग्रिम धन्यवाद [और रूस से चीयर्स :)]।
mlvljr

1
@mlvljr: ठीक है। सबसे तेज़ तरीका बस इसे स्कैन करना और एक बड़ी पीडीएफ फाइल करना हो सकता है। मैं देखूंगा कि क्या मैं अगले कुछ दिनों में इसे प्राप्त कर सकता हूं। मुझे मत भूलना [मास्को में हाल की घटनाओं के लिए गंभीर संवेदना, और धूमिल मैसाचुसेट्स से चीयर्स]।
माइक डनलैवी

11

हाथ (और WinAPI के बाकी) OOP है!

हालांकि, वे हैं? वे अंतर्निहित नहीं हैं, वे निश्चित रूप से प्रतिस्थापित करने योग्य नहीं हैं, उनके पास अच्छी तरह से परिभाषित कक्षाएं नहीं हैं ... मुझे लगता है कि वे "ओओपी" से बहुत लंबा रास्ता तय करते हैं।

क्या आपने कभी WinAPI का उपयोग करके एक विंडो बनाई है? तब आपको पता होना चाहिए कि आप एक वर्ग को परिभाषित करते हैं ( RegisterClass), इसका एक उदाहरण बनाएं ( CreateWindow), आभासी विधियों ( WndProc) और आधार-वर्ग विधियों ( DefWindowProc) और इतने पर कॉल करें । WinAPI यहां तक ​​कि "संदेश" (विंडो संदेश) के तरीकों को बुलाते हुए, स्मॉलटाक ओओपी से नामकरण लेता है।

हो सकता है कि हैंडल इनहेरिटेबल न हों, लेकिन finalजावा में हैं। उनके पास क्लास की कमी नहीं है, वे क्लास के लिए प्लेसहोल्डर हैं : यही शब्द "हैंडल" का मतलब है। MFC या .NET WinForms जैसे आर्किटेक्चर को देखते हुए यह तुरंत स्पष्ट है कि सिंटैक्स के अलावा, बहुत कुछ WinAPI से अलग नहीं है।


WinAPI OOP नहीं है। यह सिर्फ विस्तार योग्य प्रक्रियात्मक कोड लिखने का एक तरीका दिखाता है। अच्छी तकनीकें अच्छी हैं, भले ही वे ओओपी हों या न हों। मैं C में WINAPI प्रोग्राम लिख सकता हूं और अपने कोड में समान तकनीकों का उपयोग कर सकता हूं, इसलिए मुझे लगता है कि C OOP है।
ब्रुसेक

3
हो सकता है कि एलन काय के दिमाग में यह नहीं था (इसे गूगल करें!) लेकिन यह अभी भी नहीं है।
कोनराड रूडोल्फ

11

हां OOP ने हमारी सभी समस्याओं का समाधान नहीं किया, इसके बारे में खेद है। हम हालांकि SOA पर काम कर रहे हैं जो उन सभी समस्याओं का समाधान करेगा।


4
तुमने सुना नहीं? SOA अतीत है। आज यह क्लाउड कंप्यूटिंग है जो हमारा उद्धारकर्ता होगा।
DrPizza

मैं वास्तव में सोच रहा हूं कि क्या आपके जवाब विडंबनापूर्ण हैं या नहीं। मुझे विडंबना पसंद है, लेकिन आमतौर पर इसकी वोटिंग कम हो जाती है, इससे मुझे आश्चर्य होता है ...
लीना शिमेल

मुझे लगता है कि यह एक विडंबना है, और मैं इसे वोट नहीं दूंगा। लेकिन मैं इसे या तो वोट नहीं दूंगा! :-)
यारिक

सवाल काफी बयानबाजी का है इसलिए यह एक मान्य उत्तर है (और सबसे अच्छा उत्तर)।
जेफ डेविस

10

OOP अपने आप को GUI "विगेट्स" जैसे आंतरिक कंप्यूटर संरचनाओं को प्रोग्रामिंग करने के लिए अच्छी तरह से उधार देता है, जहां उदाहरण के लिए SelectList और TextBox आइटम के उप-प्रकार हो सकते हैं, जिसमें "चाल" और "आकार" जैसे सामान्य तरीके हैं।

परेशानी यह है कि, हम में से 90% व्यवसाय की दुनिया में काम करते हैं, जहाँ हम इनवॉइस, कर्मचारी, नौकरी, आदेश जैसी व्यावसायिक अवधारणाओं के साथ काम कर रहे हैं। ये ओओपी के लिए खुद को इतनी अच्छी तरह से उधार नहीं देते हैं क्योंकि "वस्तुएं" अधिक नीरस हैं, व्यवसाय के अनुसार फिर से इंजीनियरिंग करने के लिए बदल सकती हैं और इसी तरह।

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


यह सब सच है, लेकिन ... शायद, तथ्य यह है कि ओओपी एक आवेदन के कुछ व्यापार-असंबंधित पहलुओं को सरल कर सकता है (जैसे यूआई कार्यान्वयन) मुख्य कारणों में से एक है कि क्यों एक डेवलपर (अंततः!) व्यवसाय पर काम करने में अधिक समय बिता सकता है! संबंधित पहलू?
यारिक

10

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

यह देखने के लिए बहुत डरावना है कि एक सहकर्मी वर्ग या इंटरफ़ेस क्या है के बारे में छोटे सहयोगियों को पता है कि व्यवसाय की आवश्यकताओं के अनुरूप एक विरासत पदानुक्रम को ठीक से डिज़ाइन करें।

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

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


1
मैंने कोड पढ़ने के दौरान कभी भी खुशी से चरणबद्ध या OOP हासिल नहीं किया है। :)
ब्रुसेक

1
सरासर खुशी, नहीं, लेकिन एक छोटी सी मुस्कान शायद?
डेन रोसेनस्टार्क

9

हो सकता है कि एक बोनट, गोद या पेड़ एक कुर्सी नहीं है, लेकिन वे सभी ISittable हैं।


2
आपके पास कभी भी एक OO भाषा का उपयोग करने की आवश्यकता नहीं है, जिसमें आपके पास इंटरफेस नहीं है? तुम भाग्यशाली हो।
फाइनेंशियल

नहीं, वे नहीं हैं। वे ऐसी चीजें हैं जो बैठने के लिए डिज़ाइन नहीं की गई थीं, इसलिए मुझे लगता है कि यह सादृश्य के लिए सच है, उन्हें लिखने योग्य इंटरफ़ेस को लागू करने के लिए नहीं लिखा गया होगा। वे तीसरी पार्टी की लाइब्रेरी से हैं, और अब जब आप एक प्रोजेक्ट लिख रहे हैं जिसमें एक डोमेन शामिल है जिसमें बैठना शामिल है, तो आप पाएंगे कि उन्हें ISittable बनाने के लिए उन्हें लपेटने के लिए आपको एडॉप्टर ऑब्जेक्ट लिखना होगा। देख? वास्तविक दुनिया की तरह बहुत ज्यादा नहीं।
एरिकस

8

मुझे लगता है कि वे वास्तविक दुनिया की वस्तुएं हैं

तुम करो?

इनवॉइस के क्या तरीके हैं? अरे रुको। यह स्वयं भुगतान नहीं कर सकता है, यह स्वयं नहीं भेज सकता है, यह उन वस्तुओं से खुद की तुलना नहीं कर सकता है जो विक्रेता वास्तव में वितरित करते हैं। इसकी कोई विधि नहीं है; यह पूरी तरह से निष्क्रिय और गैर-कार्यात्मक है। यह एक रिकॉर्ड प्रकार (एक संरचना, यदि आप पसंद करते हैं), एक वस्तु नहीं है।

इसी तरह आपके द्वारा बताई गई अन्य चीजों का भी।

सिर्फ इसलिए कि कुछ वास्तविक है, यह शब्द के OO अर्थों में एक वस्तु नहीं है। OO ऑब्जेक्ट्स राज्य और व्यवहार का एक अजीब युग्मन हैं जो अपने स्वयं के समझौते का कार्य कर सकते हैं। ऐसा कुछ नहीं है जो वास्तविक दुनिया में प्रचुर मात्रा में हो।


2
कोई भी मशीन, इलेक्ट्रॉनिक उपकरण, या जीवित चीज़ लें, वे सभी "राज्य और व्यवहार के युग्मन" हैं।
टीएम।

1
मैं मानता हूं कि Send () या Pay () जैसे तरीके चालान के लिए "अप्राकृतिक" हैं। लेकिन, उदाहरण के लिए, एक इनवॉइस के एक व्युत्पन्न लेकिन INHERENT विशेषता के रूप में कुल राशि के बारे में क्या? क्या यह एक उदाहरण नहीं है कि ओओपी पूरी तरह से वास्तविक जीवन की संस्थाओं के लिए बहुत "प्राकृतिक" तरीके से मॉडल बनाने में सक्षम बनाता है? अपने आप में बहुत बड़ी उपलब्धि नहीं, लेकिन फिर भी ...
यारिक

@ वायरिक: ये "निष्क्रिय" इकाइयां ऑब्जेक्ट-आधारित डिज़ाइन की ओर ले जाती हैं। मेरे लिए, एकमात्र उचित OO सिमुलेशन है, जहाँ वस्तुएं "अपने हिसाब से काम कर सकती हैं" , जैसा कि इस उत्तर में कहा गया है। अगर OO कुछ को पूरा करने के लिए एकमात्र ट्रैक्टेबल तरीका है, तो ठीक है, लेकिन अन्यथा हम समस्या को हल करने जैसी सरल और अधिक चीज़ों पर नहीं टिक सकते हैं?

7

मैं पिछले 9 सालों से OO कोड लिख रहा हूं। मैसेजिंग का उपयोग करने के अलावा, अन्य दृष्टिकोण की कल्पना करना मेरे लिए कठिन है। मुख्य लाभ जो मुझे पूरी तरह से कोडिंग के अनुरूप दिखाई देता है। वेहेल ने कहा: संशोधन। OO मुझे स्वाभाविक रूप से ऐसे मॉड्यूलर घटकों से अपने अनुप्रयोगों का निर्माण करने की ओर ले जाता है जिनमें स्वच्छ इंटरफेस और स्पष्ट जिम्मेदारियाँ होती हैं (यानी चिंताओं के स्पष्ट पृथक्करण के साथ शिथिल युग्मित, अत्यधिक सामंजस्यपूर्ण कोड)।

मुझे लगता है कि जहां ओओ टूट जाता है, जब लोग गहरी नेस्टेड क्लास उत्तराधिकारियों का निर्माण करते हैं। इससे जटिलता हो सकती है। हालांकि, एक आधार वर्ग में आम वित्त-व्यवस्था को समाप्त करना, फिर अन्य वंश वर्गों में पुन: उपयोग करना एक गहरी बात है, IMHO!


7

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

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

इसके अलावा, OO बहुत अच्छी तरह से करता है: यह पुराने कोड को नए कोड को स्वचालित रूप से कॉल करने की अनुमति देता है, जिसमें कोई बदलाव नहीं है। अगर मेरे पास कोड है जो चीजों को प्रक्रियात्मक रूप से प्रबंधित करता है, और मैं एक नई तरह की चीज जोड़ता हूं जो समान है लेकिन पहले वाले के समान नहीं है, तो मुझे प्रक्रियात्मक कोड को बदलना होगा। एक ओओ प्रणाली में, मुझे कार्यक्षमता विरासत में मिली है, जो मुझे पसंद है उसे बदलें, और नए कोड का उपयोग पॉलीमॉर्फिज़्म के कारण स्वचालित रूप से किया जाता है। इससे परिवर्तनों की स्थानीयता बढ़ जाती है, और यह एक अच्छी बात है।

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

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


मुझे आपका आखिरी पैराग्राफ सबसे अच्छा लगता है।
माइक डनलैवी

6

@Sean

हालांकि, एक आधार वर्ग में आम वित्त-व्यवस्था को समाप्त करना, फिर अन्य वंश वर्गों में पुन: उपयोग करना एक गहरी बात है, IMHO!

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


6

@Konrad

OOP त्रुटिपूर्ण हो सकता है और यह निश्चित रूप से कोई चांदी की गोली नहीं है, लेकिन यह बड़े पैमाने पर अनुप्रयोगों को बहुत सरल बनाता है क्योंकि यह निर्भरता कम करने का एक शानदार तरीका है

वह हठधर्मिता है। मैं यह नहीं देख रहा हूं कि पुराने के प्रक्रियात्मक प्रोग्रामिंग की तुलना में ओओपी इस संबंध में क्या बेहतर बनाता है। जब भी मैं एक प्रक्रिया कॉल करता हूं मैं कार्यान्वयन की बारीकियों से खुद को अलग कर रहा हूं।


6

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

यह जरूरी नहीं है कि एक इनवॉइस वास्तव में एक "ऑब्जेक्ट" फ़ंक्शन के साथ है जो यह स्वयं कर सकता है - ऑब्जेक्ट इंस्टेंस केवल डेटा पर फ़ंक्शन करने के लिए मौजूद हो सकता है बिना यह जानने के लिए कि वास्तव में किस प्रकार का डेटा है। फ़ंक्शन "input.toJson ()" को यह जानने के बिना सफलतापूर्वक कॉल किया जा सकता है कि "इनवॉइस" किस प्रकार का डेटा है - परिणाम Json होगा, कोई फर्क नहीं पड़ता कि यह डेटाबेस, XML, CSV, या किसी अन्य JSON ऑब्जेक्ट से आता है । प्रक्रियात्मक कार्यों के साथ, आप सभी को अचानक अपने डेटा के बारे में अधिक जानना होगा, और "xmlToJson ()", "csvToJson ()", "dbToJson ()", आदि जैसे कार्यों के साथ अंत में एक पूर्ण गड़बड़ हो जाता है और एक भारी सिरदर्द यदि आप कभी भी अंतर्निहित डेटा प्रकार को बदलते हैं।

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

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


5

@CodingTheWheel

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

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

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


"उचित प्रशिक्षण" इन दिनों बहुत लंबा, सार और जटिल होना चाहिए। मुझे पता है: मैं प्रोग्रामिंग सिखाता हूं। दशकों पहले, कई लोग कुछ प्रकार की प्रोग्रामिंग करना सीख सकते थे। मुझे लगता है कि अब यह सच नहीं है।

5

@Jeff

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

जिसमें अधिक छिपा हुआ कार्यान्वयन है: C ++ का iostreams, या C का FILE * s?

मुझे लगता है कि अपारदर्शी संदर्भ वस्तुओं (Win32 में हस्तरेखा, C में FILE * s का उपयोग, दो प्रसिद्ध उदाहरणों को नाम देने के लिए - नरक, हस्तरेखा कर्नेल-मोड बाधा के दूसरी तरफ रहते हैं, और यह वास्तव में मिलता है। उस प्रक्रिया की तुलना में बहुत अधिक संक्षिप्त) प्रक्रियात्मक कोड में भी पाया जाता है; मैं यह देखने के लिए संघर्ष कर रहा हूं कि यह ओओपी के लिए कुछ खास कैसे है।

मुझे लगता है कि इसका एक हिस्सा हो सकता है कि मैं क्यों लाभ देखने के लिए संघर्ष कर रहा हूं: जो हिस्से स्पष्ट रूप से अच्छे हैं वे ओओपी के लिए विशिष्ट नहीं हैं, जबकि जो हिस्से ओओपी के लिए विशिष्ट हैं वे स्पष्ट रूप से अच्छे नहीं हैं! (यह कहने के लिए नहीं है कि वे आवश्यक रूप से खराब हैं, बल्कि यह है कि मैंने सबूत नहीं देखा है कि वे व्यापक रूप से लागू हैं और लगातार फायदेमंद हैं)।


5

मेरे द्वारा पढ़े जाने वाले एकमात्र देव ब्लॉग में, जोएल-ऑन-सॉफ्टवेयर-फाउंडर-ऑफ-एसओ आदमी द्वारा, मैंने बहुत समय पहले पढ़ा था कि ओओ उत्पादकता में वृद्धि नहीं करता है। स्वचालित मेमोरी प्रबंधन करता है। ठंडा। डेटा से कौन इनकार कर सकता है?

मैं अभी भी मानता हूं कि OO गैर-OO के लिए है जो फ़ंक्शन के साथ प्रोग्रामिंग सब कुछ इनलाइन प्रोग्रामिंग करना है।

(और मुझे पता होना चाहिए, जैसा कि मैंने GWBasic के साथ शुरू किया था।) जब आप फ़ंक्शन का उपयोग करने के लिए कोड को रिफ्लेक्टर करते हैं, तो आप जिस विधि में हैं, या वह variable2654बन जाती variable3है, या इससे भी बेहतर, यह एक ऐसा नाम है जिसे आप समझ सकते हैं, और यदि फ़ंक्शन छोटा है। , यह कहा जाता है value और यह पूर्ण समझ के लिए पर्याप्त है।

जब कोई फ़ंक्शन के साथ कोड विधियों के साथ कोड नहीं बन जाता है, तो आपको मील के कोड को हटाना होगा।

जब आप कोड refactor होने के लिए सही मायने में OO, b, c, q, और Zबन this, this, thisऔर this। और जब से मैं thisकीवर्ड का उपयोग करने में विश्वास नहीं करता , आपको कोड ऑफ मील को हटाना होगा। वास्तव में, आप ऐसा करते हैं, भले ही आप उपयोग करें this



मुझे नहीं लगता कि OO प्राकृतिक रूपक है।

मुझे नहीं लगता कि भाषा एक प्राकृतिक रूपक है या नहीं, और न ही मुझे लगता है कि फाउलर की "गंध" यह कहने से बेहतर है कि "यह कोड खराब है।" उस ने कहा, मुझे लगता है कि OO प्राकृतिक रूपकों और उन लोगों के बारे में नहीं है, जो सोचते हैं कि वस्तुएं सिर्फ आप पर पॉप आउट करती हैं, मूल रूप से बिंदु को याद नहीं कर रही हैं। आप ऑब्जेक्ट ब्रह्माण्ड को परिभाषित करते हैं, और बेहतर ऑब्जेक्ट ब्रह्माण्ड का परिणाम उस कोड में होता है जो छोटा होता है, समझने में आसान होता है, बेहतर काम करता है, या ये सभी (और कुछ मापदंड जो मैं भूल रहा हूँ)। मुझे लगता है कि प्रोग्रामिंग ऑब्जेक्ट्स के रूप में ग्राहकों / डोमेन की प्राकृतिक वस्तुओं का उपयोग करने वाले लोग ब्रह्मांड को फिर से परिभाषित करने की शक्ति को याद कर रहे हैं।

उदाहरण के लिए, जब आप एयरलाइन आरक्षण प्रणाली करते हैं, तो जिसे आप आरक्षण कहते हैं, वह कानूनी / व्यावसायिक आरक्षण के अनुरूप नहीं हो सकता है।



बुनियादी अवधारणाओं में से कुछ वास्तव में शांत उपकरण हैं

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



OOP का क्या मतलब है?

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

OOP को अधिकांश डेवलपर्स द्वारा गलत समझा जाना नियत है

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



अपने मिनी-निबंध / प्रश्न के बारे में

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

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

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


4

क्या आपने कभी WinAPI का उपयोग करके एक विंडो बनाई है?

याद करने की तुलना में अधिक बार।

तब आपको पता होना चाहिए कि आप एक वर्ग (रजिस्टरक्लास) को परिभाषित करते हैं, इसका एक उदाहरण (CreateWindow) बनाएं, वर्चुअल तरीके (WndProc) और बेस-क्लास तरीके (DefWindowProc) और इतने पर कॉल करें। WinAPI यहां तक ​​कि "संदेश" (विंडो संदेश) के तरीकों को बुलाते हुए, छोटे-छोटे ओओपी से नामकरण लेता है।

तब आपको यह भी पता चल जाएगा कि यह अपने आप में कोई संदेश नहीं भेजता है, जो एक बड़ा अंतर है। इसमें भद्दे सबक्लासिंग भी हैं।

हैंडल अंतर्निहित नहीं हो सकते हैं लेकिन फिर, जावा में अंतिम है। उनके पास क्लास की कमी नहीं है, वे क्लास के लिए प्लेसहोल्डर हैं: यही शब्द "हैंडल" का मतलब है। MFC या .NET WinForms जैसे आर्किटेक्चर को देखते हुए यह तुरंत स्पष्ट है कि सिंटैक्स के अलावा, बहुत कुछ WinAPI से अलग नहीं है।

वे इंटरफ़ेस या कार्यान्वयन में अंतर्निहित नहीं हैं, न्यूनतम स्थानापन्न हैं, और वे प्रक्रियात्मक कोडर्स से हमेशा के लिए अलग नहीं हैं।

क्या वाकई ऐसा है? OOP के सर्वश्रेष्ठ बिट्स सिर्फ ... पारंपरिक प्रक्रियात्मक कोड हैं? यही बड़ी बात है?


आपको याद रखना होगा कि Win32 इंटरफ़ेस मूल रूप से Win16 का पुन: कार्यान्वयन था। जिसे दो दशक पहले डिजाइन किया गया था।
ब्रैड गिलबर्ट

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

4

मैं पूरी तरह से InSciTek Jeff के उत्तर से सहमत हूं , मैं केवल निम्नलिखित परिशोधन जोड़ूंगा :

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

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


हाँ, मुझे लगता है कि आपको वस्तुओं के लिए OOP का उपयोग करना चाहिए, कार्यों के लिए कार्यात्मक प्रोग्रामिंग ...
Svante

4

मेरा मानना ​​है कि OOP का सबसे फायदेमंद गुण डेटा छिपाना / प्रबंधन करना है। हालांकि, ऐसे बहुत से उदाहरण हैं जहां ओओपी का दुरुपयोग किया जाता है और मुझे लगता है कि यह वह जगह है जहां भ्रम की स्थिति आती है।

सिर्फ इसलिए कि आप किसी वस्तु में कुछ कर सकते हैं इसका मतलब यह नहीं है कि आपको चाहिए। हालाँकि, यदि ऐसा करने से आपका कोड अधिक व्यवस्थित / पढ़ने में आसान हो जाएगा तो आपको निश्चित रूप से करना चाहिए।

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

इसके अलावा, उन पृष्ठों के लिए फ़ंक्शंस संलग्न करना बहुत साफ है। मैं कर सकता हूँ ProCurrentPage-> CleanCache (); ProDisplayItem-> RenderPromo () द्वारा अनुसरण किया गया; अगर मैं सिर्फ उन कार्यों को बुलाता हूं और यह मान लेता हूं कि वर्तमान डेटा उपलब्ध था, तो कौन जानता है कि किस तरह की बुराई होगी। इसके अलावा, अगर मुझे उन कामों में सही चर पास करने थे, तो मैं अलग-अलग उत्पादों के लिए सभी प्रकार के चर होने की समस्या से जूझ रहा हूं।

इसके बजाय, वस्तुओं का उपयोग करते हुए, मेरे सभी उत्पाद डेटा और फ़ंक्शन अच्छे और साफ और समझने में आसान हैं।

तथापि। OOP के साथ बड़ी समस्या यह है जब कोई मानता है कि हर किसी को OOP होना चाहिए। इससे बहुत समस्याएँ पैदा होती हैं। मेरे डेटाबेस में 88 टेबल हैं। मेरे पास केवल 6 कक्षाएं हैं, और शायद मेरे पास लगभग 10 होना चाहिए। मुझे निश्चित रूप से 88 वर्गों की आवश्यकता नहीं है। ज्यादातर समय उन टेबलों को सीधे एक्सेस करने से उन परिस्थितियों में पूरी तरह से समझा जा सकता है जो मैं इसका उपयोग करता हूं, और ओओपी वास्तव में इसे और अधिक कठिन / थकाऊ बना देगा कि क्या हो रहा है।

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


3

मैं पुन: उपयोग के लिए परवाह नहीं करता हूं जितना मैं पठनीयता के लिए करता हूं। बाद का मतलब है कि आपका कोड बदलना आसान है। भवन निर्माण सॉफ्टवेयर के शिल्प में यह अकेले सोने के लायक है।

और OO आपके कार्यक्रमों को पठनीय बनाने के लिए एक बहुत ही प्रभावी तरीका है। पुन: उपयोग या कोई पुन: उपयोग।


2

"वास्तविक दुनिया" ऊ "नहीं है,"

वास्तव में? मेरी दुनिया वस्तुओं से भरी है। मैं अब एक का उपयोग कर रहा हूँ। मुझे लगता है कि सॉफ्टवेयर "ऑब्जेक्ट्स" होने से असली ऑब्जेक्ट्स खराब नहीं हो सकते हैं।

ओओ वैचारिक चीजों के लिए डिजाइन करता है (जैसे विंडोज, वास्तविक दुनिया की खिड़कियां नहीं, लेकिन मेरे कंप्यूटर मॉनिटर पर डिस्प्ले पैनल) अक्सर वांछित होने के लिए बहुत कुछ छोड़ देते हैं। लेकिन वास्तविक दुनिया की चीजों के लिए जैसे चालान, शिपिंग ऑर्डर, बीमा दावे और क्या-क्या नहीं, मुझे लगता है कि वे वास्तविक दुनिया की वस्तुएं हैं। मेरी मेज पर एक स्टैक है, इसलिए वे वास्तविक होना चाहिए।


2

OOP की बात यह है कि प्रोग्रामर को मशीनों और लोगों के लिए कोड में किसी समस्या के समाधान का वर्णन करने और संवाद करने के लिए एक और साधन देना है। इसका सबसे महत्वपूर्ण हिस्सा लोगों के लिए संचार है। OOP प्रोग्रामर को यह घोषित करने की अनुमति देता है कि वे OO भाषा में लागू होने वाले नियमों के माध्यम से कोड में क्या मतलब है।

इस विषय पर कई तर्कों के विपरीत, OOP और OO अवधारणाएं गैर-OOP भाषाओं में कोड सहित सभी कोडों में व्याप्त हैं जैसे C. कई उन्नत गैर-OO प्रोग्रामर गैर-OO भाषाओं में भी वस्तुओं की विशेषताओं का अनुमान लगाते हैं।

ओओ को भाषा में निर्मित करने से प्रोग्रामर को अभिव्यक्ति का एक और साधन मिल जाता है।

कोड लिखने का सबसे बड़ा हिस्सा मशीन के साथ संचार नहीं है, यह हिस्सा आसान है, सबसे बड़ा हिस्सा मानव प्रोग्रामर के साथ संचार है।

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