क्या वस्तुओं का पुन: उपयोग कोड के संदर्भ में किया गया है?


17

मैंने अक्सर यह कहा है कि वस्तुओं को कोड पुन: उपयोग के संदर्भ में वितरित नहीं किया है। क्या आप सहमत हैं? यदि आप मानते हैं कि वे नहीं हैं, तो क्यों नहीं?


4
मैंने कभी किसी को यह कहते नहीं सुना कि ...
TheLQ

2
@ मुझे विश्वास नहीं होता कि मैंने वास्तव में किसी को यह कहते हुए सुना है, लेकिन मैंने इसे पढ़ा है।
जॉर्ज मैरियन

पुन: प्रयोज्य OOP का एकमात्र लाभ नहीं है।
कोई भी

2
"कोड पुन: उपयोग के संदर्भ में वस्तुओं को वितरित किया गया है?" -> यदि आप मानते हैं कि OOP दिन में पीछे से सलामी देता है (क्या यह 60 का दशक है? मैं भूल जाता हूं)
स्टीवन एवर्स

इसी तरह के एक सवाल का मेरा जवाब: प्रोग्रामर.स्टैकएक्सचेंज.
com/questions/53521/…

जवाबों:


18

नहीं, जरूरी नहीं।

ऑब्जेक्ट बेहतर शब्दार्थ प्रदान करते हैं, कोड / कार्यक्षमता का संगठन और, संभवतः, आसानी से उपयोग।

अच्छी तरह से डिज़ाइन किए गए पुस्तकालय कोड के पुन: उपयोग के वादे पर पहुंचते हैं, न कि वस्तुओं के प्रति।


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

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

7

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

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


कोड पुन: उपयोग करने के लिए निश्चित रूप से कुछ करना है, जब आप कोड गुणवत्ता का त्याग करने से बच सकते हैं
केसबश

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

5

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

OO एक अच्छी कई समस्याओं के लिए एक आसान अमूर्त है, लेकिन '80-'90 के दशक के प्रचार से सावधान रहना चाहिए: यह जादुई रूप से हमारे व्यापार की मूलभूत समस्याओं को हल नहीं करता है क्योंकि यह आपके सोने के दौरान आपके लिए waffles बनाता है।


5

मुझे उम्मीद नहीं है कि सभी वस्तुओं का पुन: उपयोग किया जाएगा लेकिन हमारे पास बहुत सी वस्तुएं हैं जो हम कई अलग-अलग परियोजनाओं पर पुन: उपयोग करते हैं। हमारे पास ऐसी वस्तुएं भी हैं जिनका उपयोग केवल एक परियोजना पर किया जाता है। हम अक्सर एक ही परियोजना के लिए एक क्लिक-डेकोर डेस्कटॉप ऐप, एक वेब ऐप और एक फोन ऐप से समान व्यावसायिक वस्तुओं (या डेटा ट्रांसफर ऑब्जेक्ट्स) के साथ-साथ व्यापार तर्क वस्तुओं का उपभोग करेंगे।

आपने कहां सुना है कि OO पुनः उपयोग नहीं करता है? और तर्क क्या था? शायद उनकी वस्तुओं के डिजाइन ने उन्हें उस स्थिति में मजबूर कर दिया ...


4
विभिन्न लेख। और व्यक्तिगत अनुभव से, एक वस्तु को पुन: प्रयोज्य बनाना बहुत आसान नहीं है
केसबश

3

कुछ प्रोग्रामर किसी भी भाषा और शैली में कॉपी और पेस्ट करेंगे।

वास्तव में अच्छे प्रोग्रामर लगभग किसी भी भाषा में अधिकांश कॉपी और पेस्ट से बच सकते हैं।

मुझे लगता है कि OO पैटर्न का उपयोग पुन: उपयोग को प्रोत्साहित करने के लिए होता है। मैंने जावा कोड देखा है जो एक गैर-ओओ शैली में लिखा गया था (जहां डेटा को गंदे ओआरएम के कारण कोड से अलग किया गया था) और पुन: उपयोग वास्तव में दयनीय था - लेकिन ओओ में एक ही प्रोग्रामर ने डिजाइन पर बेहतर काम किया ( और पुन: उपयोग)।

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

ps। मुझे पता है कि लोगों को पिछले पैराग्राफ के साथ समस्या होगी, इसलिए मैं थोड़ा समझाता हूं।

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

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

कई मामलों में आपके लिए उपलब्ध सुविधाएँ आकार देती हैं कि आप अपने कोड को कैसे बनाते हैं। जब यह आपके सभी कोड की कल्पना करने में मदद करता है और यह कैसे इंटरैक्ट करता है, तो OO और भी शक्तिशाली है, लेकिन यह एक और सवाल है।


2

ऑब्जेक्ट्स में एक स्टेयरक्लिम्बर या अन्य फिटनेस उपकरण की तुलना में कोड का पुन: उपयोग करने की अधिक क्षमता नहीं है जो वजन कम कर सकता है। डेवलपर्स को उपकरणों का सही उपयोग करने के लिए प्रेरित करना होगा।

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


2

हाँ

OOP आपको कोड का पुन: उपयोग करने के लिए और अधिक तरीके देता है

नहीं

कोई चांदी की गोली नहीं है

निर्भर करता है

आप इसमें क्या डालते हैं, और बदले में आपको क्या उम्मीद है!


1

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

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


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

2
@casebase +1 हालांकि, मैं कहूंगा कि वस्तुओं को पुन: प्रयोज्य बनाने का अर्थ है स्थिति (ऑब्जेक्ट) को ओवरकंप्लीकेट करना।
जॉर्ज मारियन

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

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

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

1

ऑब्जेक्ट कोड को फिर से मुकदमा करने में सक्षम बनाते हैं लेकिन जैसे कि उसके लिए सबसे तकनीक नहीं है। मुझे लगता है कि कोड री-यूज को ऑब्जेक्ट संबंधित तकनीकों जैसे वंशानुक्रम, बहुरूपता, ओवरलोडिंग और टेम्प्लेट के माध्यम से बढ़ावा दिया जाता है।


1

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


0

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

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