नहीं , किसी वस्तु को किसी इकाई का प्रतिनिधित्व नहीं करना है।
वास्तव में, मैं तर्क दूंगा कि जब आप वस्तुओं के बारे में सोचना बंद कर देते हैं तो भौतिक संस्थाएं तब होती हैं जब आपको अंततः ओओपी के वादों का लाभ मिलता है।
यह सबसे अच्छा उदाहरण नहीं है, लेकिन कॉफी निर्माता का डिज़ाइन संभवतः वह है जहां प्रकाश मेरे लिए आना शुरू हुआ था।
वस्तुएं संदेशों के बारे में हैं। वे जिम्मेदारियों के बारे में हैं। वे कारों, उपयोगकर्ताओं या आदेशों के बारे में नहीं हैं।
मुझे पता है कि हम OO को इस तरह से पढ़ाते हैं, लेकिन यह स्पष्ट हो जाता है कि कुछ कोशिशों के बाद मौलिक रूप से निराशाजनक यह पता लगाना है कि जब आप MVC, MVVM या MVWhatever करने की कोशिश करते हैं तो चीजें कहां जाती हैं। या तो आपके मॉडल हास्यास्पद रूप से फूला हुआ हो जाते हैं या आपके नियंत्रक करते हैं। नौगम्यता के लिए, यह जानना बहुत अच्छा है कि वाहन को छूने वाली कोई भी चीज़ वाहन में है। कस्टम फ़ाइल, लेकिन जब आपका आवेदन वाहनों के बारे में होता है, तो आप अनिवार्य रूप से उस फ़ाइल में स्पेगेटी की 3000 लाइनों के साथ समाप्त होते हैं।
जब आपके पास भेजने के लिए एक नया संदेश है, तो आपके पास कम से कम एक नई वस्तु है, और शायद उनमें से एक जोड़ी है। तो तरीकों के एक बंडल के बारे में आपके सवाल में, मैं तर्क दूंगा कि आप संभावित रूप से संदेशों के बंडल के बारे में बात कर रहे हैं। और हर एक की अपनी वस्तु हो सकती है, उसके पास अपना काम है। और यह ठीक है। यह स्पष्ट हो जाएगा जैसे ही आप चीजों को विभाजित करते हैं जो चीजें वास्तव में होती हैं, वास्तव में एक साथ होने की आवश्यकता होती है। और आपने उन्हें एक साथ रखा। लेकिन अगर आप OO का आनंद लेना चाहते हैं, तो सुविधा के लिए एक उपयुक्त उपयुक्त दराज में हर तरीके को तुरंत न छोड़ें।
चलो कार्यों के बैग के बारे में बात करते हैं
एक ऑब्जेक्ट सिर्फ तरीकों का एक संग्रह हो सकता है और अभी भी OO हो सकता है, लेकिन मेरे "नियम" बहुत सख्त हैं।
संग्रह में एक ही ज़िम्मेदारी होनी चाहिए, और यह जिम्मेदारी "मोटरों के लिए सामान" के रूप में सामान्य नहीं हो सकती है। मैं एक सेवा-स्तर के रूप में ऐसा काम कर सकता हूं, लेकिन मैं पूरी तरह से जानता हूं कि मैं नवजागरण / खोज कारणों के लिए आलसी हो रहा हूं, इसलिए नहीं कि मैं ओओ कोड लिखने की कोशिश कर रहा हूं।
सभी विधियाँ अमूर्तता की एक सुसंगत परत पर होनी चाहिए। यदि एक विधि मोटर ऑब्जेक्ट्स को पुनर्प्राप्त करती है और दूसरा हॉर्सपावर लौटाती है, तो शायद यह बहुत दूर है।
ऑब्जेक्ट को समान "डेटा" पर काम करना चाहिए। यह ऑब्जेक्ट मोटर्स (स्टार्ट / स्टॉप) पर सामान करता है, यह एक क्रैंक लंबाई के साथ काम करता है, यह एक इग्निशन सीक्वेंसिंग को हैंडल करता है, यह एक html फॉर्म लेता है। यह डेटा प्रत्यक्ष रूप से ऑब्जेक्ट पर फ़ील्ड हो सकता है और यह एक सामंजस्यपूर्ण प्रतीत होगा।
मैं आमतौर पर इस तरह की वस्तुओं का निर्माण करता हूं, जब मैं रूपांतरण, रचना कर रहा होता हूं, या सिर्फ उत्परिवर्तन के बारे में चिंता नहीं करना चाहता।
मुझे लगता है कि वस्तु जिम्मेदारियों पर ध्यान केंद्रित करना मुझे सामंजस्य की ओर ले जाता है। एक ऑब्जेक्ट होने के लिए कुछ सामंजस्य होना चाहिए, लेकिन ऑब्जेक्ट होने के लिए किसी भी फ़ील्ड की आवश्यकता नहीं है और न ही बहुत अधिक व्यवहार की आवश्यकता है। अगर मैं एक ऐसी प्रणाली का निर्माण कर रहा था जिसमें उन 5 मोटर विधियों की आवश्यकता थी, तो मैं 5 अलग-अलग वस्तुओं के साथ शुरू करूंगा जो उन चीजों को करते हैं। जैसा कि मैंने समानता पाया, मैं या तो चीजों को एक साथ मिलाना शुरू करूंगा या सामान्य "सहायक" वस्तुओं का उपयोग करूंगा। यह मुझे खुली / बंद चिंताओं में ले जाता है - मैं इस कार्यक्षमता को कैसे हटा सकता हूं इसलिए मुझे उस विशेष फ़ाइल को फिर से संशोधित करने की आवश्यकता नहीं है लेकिन फिर भी जहां जरूरत हो वहां उपयोग करें?
वस्तुएं संदेशों के बारे में हैं
एक वस्तु के लिए मुश्किल से ही फ़ील्ड होती है - रजिस्टर प्राप्त करना और स्थापित करना प्रोग्राम के बाहर की दुनिया को नहीं बदलता है। अन्य वस्तुओं के साथ सहयोग करने से काम पूरा हो जाता है। हालाँकि, OO की ताकत यह है कि हम सार बना सकते हैं इसलिए हमें एक बार में सभी व्यक्तिगत विवरणों के बारे में सोचने की ज़रूरत नहीं है। ऐसे अंश जो लीक करते हैं या समझ में नहीं आते हैं वे समस्याग्रस्त हैं, इसलिए हम उन वस्तुओं को बनाने के बारे में गहराई से (बहुत अधिक, शायद) सोचते हैं जो हमारे मानसिक मॉडल से मेल खाते हैं।
मुख्य प्रश्न: इन दो वस्तुओं को एक दूसरे से बात करने की आवश्यकता क्यों है?
एक व्यक्ति में एक अंग के रूप में वस्तु के बारे में सोचो - इसका एक डिफ़ॉल्ट उद्देश्य है और केवल व्यवहार को बदलता है जब इसे एक विशिष्ट संदेश प्राप्त होता है जो इसके बारे में परवाह करता है।
एक परिदृश्य की कल्पना करें जहां आप क्रॉसवॉक में हैं और एक कार तेजी से आ रही है। मस्तिष्क की वस्तु के रूप में, मैं एक तनाव का पता लगाता हूं। मैं हाइपोथैलेमस को कॉर्टिकोट्रॉफिन-विमोचन हार्मोन भेजने के लिए कहता हूं। पिट्यूटरी ग्रंथि उस संदेश को प्राप्त करती है और अधिवृक्क कॉर्टिकोट्रॉफ़िक हार्मोन जारी करती है। अधिवृक्क ग्रंथियां उस संदेश को प्राप्त करती हैं और अधिवृक्क का निर्माण करती हैं। जब मांसपेशी वस्तु को वह एड्रेनालाईन संदेश मिलता है तो वह सिकुड़ जाता है। जब दिल को एक ही संदेश मिलता है, तो वह तेजी से धड़कता है। सड़क पर घूमने के जटिल व्यवहार को शुरू करने में शामिल खिलाड़ियों की एक पूरी श्रृंखला है और यह संदेश है कि मामला है। मस्तिष्क की वस्तु को पता है कि हाइपोथैलेमस को अलर्ट भेजने के लिए कैसे जाना जाता है, लेकिन यह उन वस्तुओं की श्रृंखला को नहीं जानता है जो अंततः व्यवहार में आएंगे। इसी तरह दिल को पता नहीं है कि एड्रेनालाईन कहाँ से आता है,
तो इस ( सरलीकृत ) उदाहरण में, अधिवृक्क ग्रंथि वस्तु को केवल यह जानने की आवश्यकता है कि एसीटीएच कैसे लेना है और एड्रेनालाईन बनाना है। इसे करने के लिए किसी भी क्षेत्र की आवश्यकता नहीं है, फिर भी यह अभी भी मेरे लिए एक वस्तु की तरह लगता है।
अब यदि हमारा आवेदन केवल सड़क पर स्प्रिंट करने के लिए डिज़ाइन किया गया है, तो मुझे पिट्यूटरी ग्रंथि और अधिवृक्क ग्रंथि वस्तुओं की आवश्यकता नहीं हो सकती है। या मुझे केवल एक पिट्यूटरी ग्रंथि वस्तु की आवश्यकता है जो केवल वैचारिक रूप से "पिट्यूटरी ग्रंथि मॉडल" के रूप में हम जो देख सकते हैं उसका एक छोटा सा हिस्सा है। ये सभी अवधारणाएं वैचारिक संस्थाओं के रूप में मौजूद हैं, लेकिन यह सॉफ्टवेयर है और हम एड्रेनालाईनसेन्डर या मसलकंट्रेक्टर या जो कुछ भी बना सकते हैं और हमारे मॉडल के "अपूर्णता" के बारे में ज्यादा चिंता नहीं करते हैं।