मैंने अक्सर यह कहा है कि वस्तुओं को कोड पुन: उपयोग के संदर्भ में वितरित नहीं किया है। क्या आप सहमत हैं? यदि आप मानते हैं कि वे नहीं हैं, तो क्यों नहीं?
मैंने अक्सर यह कहा है कि वस्तुओं को कोड पुन: उपयोग के संदर्भ में वितरित नहीं किया है। क्या आप सहमत हैं? यदि आप मानते हैं कि वे नहीं हैं, तो क्यों नहीं?
जवाबों:
नहीं, जरूरी नहीं।
ऑब्जेक्ट बेहतर शब्दार्थ प्रदान करते हैं, कोड / कार्यक्षमता का संगठन और, संभवतः, आसानी से उपयोग।
अच्छी तरह से डिज़ाइन किए गए पुस्तकालय कोड के पुन: उपयोग के वादे पर पहुंचते हैं, न कि वस्तुओं के प्रति।
ईमानदारी से मुझे यकीन नहीं है कि "कोड का पुन: उपयोग" वास्तव में कोई भी है जो (या कम से कम, के बाद होना चाहिए)। मेरा दर्शन "सॉफ्टवेयर घटक" है, जिसका अर्थ है अच्छे इंटरफेस के माध्यम से बेहतर रखरखाव और अनावश्यक युग्मन से बचना। "कोड का पुन: उपयोग" उन चीजों में से एक है जो कभी-कभी बाहर आता है - अनावश्यक रूप से डुप्लिकेट कोड एक संकेत है कि आपने चीजों को गलत तरीके से व्यवस्थित किया है और निश्चित रूप से इसे बनाए रखने के लिए एक दर्द है।
इस सवाल का थोड़ा और सीधा जवाब देने के लिए, अपने आप को दोहराने से बचने के लिए बहुत अच्छे उपकरणों का एक संग्रह है: विरासत, लक्षण, प्रतिनिधिमंडल, उच्च-क्रम के कार्यों आदि, उन लोगों को एक संपूर्ण के रूप में OO के साथ विरासत को भ्रमित करने की प्रवृत्ति है - आदि। यदि आप मुझसे पूछते हैं, तो वे इसे थोड़ा अधिक उपयोग करते हैं। हो सकता है कि जहां "ऊ बेकार है" खिंचाव में से कुछ से आता है: विरासत निहित अटक जहां यह होना कोई प्राकृतिक अधिकार है :)
नहीं, "ऑब्जेक्ट्स" ने कोड को फिर से किसी भी आसान या अधिक सामान्य उपयोग नहीं किया है। समान चिंताएं जो कोड को एक मॉड्यूलर कार्यक्रम में फिर से उपयोग करने से रोकती हैं (एक सामान्य प्रयोजन एपीआई को डिजाइन करना, परीक्षण और दस्तावेजीकरण करना, एक बार की दिनचर्या लिखने की तुलना में काफी अधिक सामने वाले प्रयास की आवश्यकता होती है, और सभी ट्रेडों का जैक एक ही हो सकता है कोई भी मास्टर - फिर से इस्तेमाल किए जाने वाले तर्क का उपयोग उन कार्यों के लिए अच्छी तरह से अनुकूलित नहीं किया जा सकता है जो वास्तव में इसकी ओर रखे जाते हैं) ओओ कार्यक्रमों पर लागू होते हैं, इस चिंता के साथ कि खराब-डिज़ाइन किए गए ऑब्जेक्ट मॉडल अन्यथा पुन: उपयोग किए जाने के पुन: उपयोग में बाधा उत्पन्न कर सकते हैं। कोड।
OO एक अच्छी कई समस्याओं के लिए एक आसान अमूर्त है, लेकिन '80-'90 के दशक के प्रचार से सावधान रहना चाहिए: यह जादुई रूप से हमारे व्यापार की मूलभूत समस्याओं को हल नहीं करता है क्योंकि यह आपके सोने के दौरान आपके लिए waffles बनाता है।
मुझे उम्मीद नहीं है कि सभी वस्तुओं का पुन: उपयोग किया जाएगा लेकिन हमारे पास बहुत सी वस्तुएं हैं जो हम कई अलग-अलग परियोजनाओं पर पुन: उपयोग करते हैं। हमारे पास ऐसी वस्तुएं भी हैं जिनका उपयोग केवल एक परियोजना पर किया जाता है। हम अक्सर एक ही परियोजना के लिए एक क्लिक-डेकोर डेस्कटॉप ऐप, एक वेब ऐप और एक फोन ऐप से समान व्यावसायिक वस्तुओं (या डेटा ट्रांसफर ऑब्जेक्ट्स) के साथ-साथ व्यापार तर्क वस्तुओं का उपभोग करेंगे।
आपने कहां सुना है कि OO पुनः उपयोग नहीं करता है? और तर्क क्या था? शायद उनकी वस्तुओं के डिजाइन ने उन्हें उस स्थिति में मजबूर कर दिया ...
कुछ प्रोग्रामर किसी भी भाषा और शैली में कॉपी और पेस्ट करेंगे।
वास्तव में अच्छे प्रोग्रामर लगभग किसी भी भाषा में अधिकांश कॉपी और पेस्ट से बच सकते हैं।
मुझे लगता है कि OO पैटर्न का उपयोग पुन: उपयोग को प्रोत्साहित करने के लिए होता है। मैंने जावा कोड देखा है जो एक गैर-ओओ शैली में लिखा गया था (जहां डेटा को गंदे ओआरएम के कारण कोड से अलग किया गया था) और पुन: उपयोग वास्तव में दयनीय था - लेकिन ओओ में एक ही प्रोग्रामर ने डिजाइन पर बेहतर काम किया ( और पुन: उपयोग)।
साथ ही ऐसे मामलों में जहां हम नॉन-ओओ पैटर्न या ऊ एंटी-पैटर्स जैसे कि सेटर / गेटर्स, स्विच स्टेटमेंट, अनाम आंतरिक वर्ग, विशाल कार्य और जैसे मैंने कोड रीयूज़ को नीचे जाते देखा है और बॉयलरप्लेट ऊपर जाते हैं ... का उपयोग करते हैं ... काफी।
ps। मुझे पता है कि लोगों को पिछले पैराग्राफ के साथ समस्या होगी, इसलिए मैं थोड़ा समझाता हूं।
सेटर्स और गेटर्स OO समस्या का कारण बनते हैं क्योंकि वे आपको किसी ऑब्जेक्ट के सदस्यों पर काम करने की अनुमति देते हैं (एक ऑब्जेक्ट को इसे OWN सदस्यों को मैनिप्युलेट करना चाहिए) यह कोड को वितरित करता है जो अन्य वर्गों में आपकी क्लास में संचालित होता है, जिससे आपको सेटर या गेट्टर के आसपास कार्यक्षमता की प्रतिलिपि बनाने की आवश्यकता होती है। । यह गुणों पर भी लागू होता है - सिर्फ इसलिए कि गुण आसान होते हैं और सभी स्थितियों में उन्हें "अच्छा" नहीं बनाते हैं।
बेनामी आंतरिक कक्षाओं में कोड का पुन: उपयोग नहीं किया जा सकता है और लोग यह भूल जाते हैं कि कई चीजें (जैसे श्रोता) पूर्ण-वर्गीय हो सकती हैं और यह क्लोजर पर भी लागू होती है! यदि आपने किसी श्रोता की तरह किसी चीज़ को लागू करने के लिए एक अनाम आंतरिक वर्ग का उपयोग किया है, तो आपको कोड को एक विधि में निकालने या उसके स्थान पर इसे लागू करने की तुलना में अपने कार्यान्वयन को कॉपी और पेस्ट करने की बहुत अधिक संभावना है। क्लोज़र पुन: प्रयोज्य में सुधार कर सकते हैं - बस इस बात पर निर्भर करता है कि आप उनका उपयोग कैसे करते हैं।
कई मामलों में आपके लिए उपलब्ध सुविधाएँ आकार देती हैं कि आप अपने कोड को कैसे बनाते हैं। जब यह आपके सभी कोड की कल्पना करने में मदद करता है और यह कैसे इंटरैक्ट करता है, तो OO और भी शक्तिशाली है, लेकिन यह एक और सवाल है।
ऑब्जेक्ट्स में एक स्टेयरक्लिम्बर या अन्य फिटनेस उपकरण की तुलना में कोड का पुन: उपयोग करने की अधिक क्षमता नहीं है जो वजन कम कर सकता है। डेवलपर्स को उपकरणों का सही उपयोग करने के लिए प्रेरित करना होगा।
एक बार सॉफ़्टवेयर टीमें परीक्षण किए गए कोड को पुन: उपयोग करने के लिए उच्च मूल्य रखती हैं, जबकि वे सभी विवरणों को अपने सिर में रखने के बाद, आप अधिक महीन-महीन वस्तुओं और विधियों को देखेंगे और इसलिए अधिक कोड का पुन: उपयोग करेंगे।
OOP आपको कोड का पुन: उपयोग करने के लिए और अधिक तरीके देता है
कोई चांदी की गोली नहीं है
आप इसमें क्या डालते हैं, और बदले में आपको क्या उम्मीद है!
हाँ। अच्छी ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग चिंताओं, कम युग्मन, उच्च सामंजस्य और सूचना छिपाने के अलगाव को बढ़ावा देती है। ये चीजें पुन: प्रयोज्य कोड के लिए महत्वपूर्ण हैं।
मैं तर्क दूंगा कि OOP का मुख्य लाभ पुन: उपयोग के बजाय प्रतिरूपकता और परिवर्तनशीलता है, लेकिन यह एक और सवाल है।
हां, वे करते हैं, सुपर क्लास क्लीयर से विस्तार (वारिस) करने की क्षमता कोड को फिर से उपयोग करने में योगदान करती है, मुझे यकीन नहीं है कि कोई भी अन्यथा कैसे बहस कर सकता है। आप बस एक वर्ग का विस्तार कर सकते हैं और एक विधि को ओवरराइड कर सकते हैं, जबकि शेष सुपर क्लास का उपयोग कर सकते हैं, अगर यह कोड फिर से उपयोग में सहायता नहीं करता है तो मुझे नहीं पता कि क्या है
यदि ऐसा है तो क्या उन्होंने अब तक कोड के पुन: उपयोग के अपने वादे को पूरा किया है? हां, अगर OOP को ध्यान में रखते हुए लिखे गए प्रोग्राम डिजाइन पैटर्न को समझदारी से लागू करते हैं। अन्यथा, ज्यादातर नहीं। लेकिन बड़े पैमाने पर गैर तुच्छ कार्यक्रमों की लोकप्रियता को देखते हुए कि एडोब सिस्टम, Google और जैसे सी ++ या जावा या अन्य ओओपी भाषाओं के साथ लिखते हैं, मैं कहूंगा कि ओओपी के पास जाने से पहले एक लंबा रास्ता तय करना होगा। यह समय इस प्रश्न को पूछने के लिए अधिक उपयुक्त होगा और एक नए प्रतिमान के लिए जमीनी कार्य प्रदान करने में मदद कर सकता है।