मैं एक वस्तु की अवधारणा को समझता हूं, और एक जावा प्रोग्रामर के रूप में मुझे लगता है कि ओओ प्रतिमान स्वाभाविक रूप से मेरे व्यवहार में आता है।
हालाँकि हाल ही में मैंने खुद को यह सोचते हुए पाया:
एक सेकंड रुको, वास्तव में एक स्थिर वर्ग (उचित एनकैप्सुलेशन और OO प्रथाओं के साथ) का उपयोग करके किसी वस्तु का उपयोग करने के व्यावहारिक लाभ क्या हैं?
मैं एक वस्तु के उपयोग के दो लाभों के बारे में सोच सकता था (दोनों महत्वपूर्ण और शक्तिशाली हैं):
बहुरूपता: आपको रनटाइम के दौरान कार्यक्षमता को गतिशील और लचीले ढंग से स्वैप करने की अनुमति देता है। साथ ही आसानी से सिस्टम में नई कार्यक्षमता 'पार्ट्स' और विकल्प जोड़ने की अनुमति देता है। उदाहरण के लिए यदि वस्तुओं के
Car
साथ काम करने के लिए डिज़ाइन किया गया एक वर्ग हैEngine
, और आप उस सिस्टम में एक नया इंजन जोड़ना चाहते हैं जिसे कार उपयोग कर सकती है, तो आप एक नयाEngine
उपवर्ग बना सकते हैं और बस इस वर्ग केCar
ऑब्जेक्ट को ऑब्जेक्ट में डाल सकते हैं , बिना के बारे में कुछ भी बदलनेCar
। और आप रनटाइम के दौरान ऐसा करने का फैसला कर सकते हैं।'कार्यक्षमता पास करने में सक्षम' होने के कारण: आप सिस्टम के चारों ओर गतिशील रूप से एक ऑब्जेक्ट पास कर सकते हैं।
लेकिन क्या स्थैतिक वर्गों से अधिक वस्तुओं के लिए कोई और फायदे हैं?
अक्सर जब मैं एक सिस्टम में नए 'भागों' को जोड़ता हूं, तो मैं एक नया वर्ग बनाकर और उससे तात्कालिक वस्तुओं को जोड़कर ऐसा करता हूं।
लेकिन हाल ही में जब मैंने रोका और इसके बारे में सोचा, तो मुझे एहसास हुआ कि एक स्थिर वर्ग एक ऑब्जेक्ट के समान ही करेगा, बहुत सारे स्थानों पर जहां मैं सामान्य रूप से किसी ऑब्जेक्ट का उपयोग करता हूं।
उदाहरण के लिए, मैं अपने ऐप में सेव / लोड-फाइल तंत्र जोड़ने पर काम कर रहा हूं।
किसी ऑब्जेक्ट के साथ, कोड की कॉलिंग लाइन इस तरह दिखाई देगी: Thing thing = fileLoader.load(file);
एक स्थिर वर्ग के साथ, यह इस तरह दिखेगा: Thing thing = FileLoader.load(file);
क्या फर्क पड़ता है?
बहुत बार मैं सिर्फ एक वस्तु को तत्काल करने का एक कारण नहीं सोच सकता जब एक सादे-पुराने स्थैतिक-वर्ग बस एक ही कार्य करेंगे। लेकिन OO प्रणालियों में, स्थिर वर्ग काफी दुर्लभ हैं। इसलिए मुझे कुछ याद आ रहा है।
क्या मेरे द्वारा सूचीबद्ध दो से अन्य वस्तुओं के लिए कोई और अधिक लाभ हैं? कृपया समझाएँ।
संपादित करें: स्पष्ट करने के लिए। कार्यक्षमता को अदला-बदली करते समय, या डेटा पास करते समय मुझे बहुत उपयोगी चीज़ें मिलती हैं। उदाहरण के लिए मैंने एक ऐप लिखा है जो धुन बनाता है। MelodyGenerator
कई उपवर्ग थे, जो अलग-अलग तरह से धुन बनाते थे, और इन वर्गों की वस्तुएँ विनिमेय (रणनीति पैटर्न) थीं।
धुनें भी वस्तुएं थीं, क्योंकि उनके चारों ओर से गुजरना उपयोगी है। तो जीवा और तराजू थे।
लेकिन सिस्टम के 'स्टैटिक' हिस्सों के बारे में क्या - जो कि पास होने वाला नहीं है? उदाहरण के लिए - एक 'फ़ाइल सहेजें' तंत्र। मुझे इसे एक वस्तु में क्यों लागू करना चाहिए, न कि एक स्थिर वर्ग में?
FileLoader
एक सॉकेट से पढ़ने वाले के लिए स्वैप करने की आवश्यकता होती है ? या परीक्षण के लिए एक नकली? या एक जो ज़िप फ़ाइल खोलता है?
System.Math
.NET में एक ऐसी चीज का एक उदाहरण है जो एक स्थिर वर्ग के रूप में बहुत अधिक समझ में आता है: आपको इसे स्वैप करने या इसे नकली करने की आवश्यकता नहीं है और संचालन में से कोई भी तार्किक रूप से एक उदाहरण का हिस्सा नहीं बन सकता है। मुझे नहीं लगता कि आपका 'बचत' उदाहरण उस बिल पर फिट बैठता है।
Thing
?