आप गेटर्स के बिना अच्छा कोड नहीं लिख सकते।
कारण यह नहीं है क्योंकि गेटर्स इनकैप्सुलेशन को नहीं तोड़ते हैं, वे करते हैं। ऐसा इसलिए नहीं है क्योंकि गेट्स लोगों को OOP के बाद परेशान नहीं करने के लिए लुभाते हैं जो उन्हें उनके द्वारा किए जाने वाले डेटा के साथ तरीके डालते हैं। वे करते हैं। नहीं, आपको सीमाओं के कारण गेटर्स की आवश्यकता है।
एनकैप्सुलेशन और तरीकों को एक साथ रखने के डेटा पर वे कार्य करते हैं, जब आप एक सीमा में चलते हैं तो यह काम नहीं करता है जो आपको एक विधि को आगे बढ़ाने से रोकता है और इसलिए आपको डेटा को स्थानांतरित करने के लिए मजबूर करता है।
यह वास्तव में इतना आसान है। यदि आप कोई वास्तविक वस्तु नहीं होने पर कोई सीमा नहीं होने पर गेटर्स का उपयोग करते हैं। सब कुछ प्रक्रियात्मक होने लगता है। जो काम करता है और साथ ही कभी करता है।
सच्चा OOP कुछ ऐसा नहीं है जिसे आप हर जगह फैला सकते हैं। यह केवल उन सीमाओं के भीतर काम करता है।
वे सीमाएं पतली नहीं हैं। उनमें कोड है। वह कोड OOP नहीं हो सकता। यह कार्यात्मक भी नहीं हो सकता। इस कोड से हमारे आदर्शों को छीन नहीं लिया गया है ताकि यह कठोर वास्तविकता से निपट सके।
माइकल फ़ेटर्स ने इस कोड प्रावरणी को उस सफेद संयोजी ऊतक के बाद कहा जो एक नारंगी के वर्गों को एक साथ रखता है।
यह सोचने का एक शानदार तरीका है। यह बताता है कि एक ही कोड बेस में दोनों तरह के कोड क्यों ठीक हैं। इस दृष्टिकोण के बिना कई नए प्रोग्रामर अपने आदर्शों के लिए कड़ी मेहनत करते हैं, फिर उनका दिल टूट जाता है और जब वे अपनी पहली सीमा से टकराते हैं तो इन आदर्शों को छोड़ देते हैं।
आदर्श केवल अपने उचित स्थान पर काम करते हैं। हर जगह काम न करने के कारण उन पर हार न मानें। जहां वे काम करते हैं, वहां उनका उपयोग करें। वह स्थान रसदार हिस्सा है जो प्रावरणी की रक्षा करता है।
सीमा का एक सरल उदाहरण एक संग्रह है। यह कुछ रखता है और पता नहीं है कि यह क्या है। एक संग्रह डिजाइनर संभवतः आयोजित वस्तु की व्यवहारिक कार्यक्षमता को संग्रह में कैसे स्थानांतरित कर सकता है जब उन्हें पता नहीं होता कि यह क्या होने जा रहा है? आप नहीं कर सकते। आप एक सीमा के खिलाफ हैं। यही कारण है कि संग्रह में गेटर्स हैं।
अब यदि आप जानते हैं, तो आप उस व्यवहार को आगे बढ़ा सकते हैं, और चलती अवस्था से बच सकते हैं। जब आप जानते हैं, तो आपको करना चाहिए तुम हमेशा नहीं जानते।
कुछ लोग इसे व्यावहारिक बताते हैं। और यह है। लेकिन यह जानना अच्छा है कि हमें व्यावहारिक क्यों होना चाहिए।
आपने व्यक्त किया है कि आप शब्दार्थ तर्क नहीं सुनना चाहते हैं और हर जगह "समझदार गेटर्स" लगाने की वकालत करते हैं। आप इस विचार को चुनौती देने के लिए कह रहे हैं। मुझे लगता है कि मैं यह दिखा सकता हूं कि जिस तरह से आपने इसे फंसाया है, उस तरह की समस्या है। लेकिन यह भी लगता है कि मुझे पता है कि तुम कहाँ से आ रहे हो क्योंकि मैं वहाँ गया हूँ।
यदि आप चाहते हैं कि हर जगह पायथन को देखें। कोई निजी कीवर्ड नहीं है फिर भी पायथन ओओपी को ठीक करता है। कैसे? वे सिमेंटिक ट्रिक का इस्तेमाल करते हैं। वे एक प्रमुख अंडरस्कोर के साथ निजी होने का मतलब कुछ भी नाम देते हैं। आपको इसे पढ़ने की अनुमति भी है बशर्ते आप ऐसा करने की जिम्मेदारी लें। "हम सभी वयस्क हैं", वे अक्सर कहते हैं।
तो क्या अंतर है कि जावा और सी # में सब कुछ पर सिर्फ गेटर्स लगाने से? क्षमा करें, लेकिन यह शब्दार्थ है। अजगर अधिवेशन सम्मेलन स्पष्ट रूप से आपको संकेत देता है कि आप कर्मचारियों के पीछे केवल दरवाजे के आसपास घूम रहे हैं। सब कुछ पर थप्पड़ मिलता है और आप उस संकेत को ढीला करते हैं। परावर्तन के साथ आप वैसे भी निजी छीन सकते थे और फिर भी अर्थ संकेत नहीं खो सकते थे। यहाँ बस एक संरचनात्मक तर्क नहीं है।
तो हमारे पास जो कुछ बचा है वह यह तय करने का काम है कि "कर्मचारियों को केवल" कैसे लटकाएं। क्या निजी माना जाना चाहिए? आप कहते हैं कि "समझदार गेटर्स"। जैसा कि मैंने कहा है, एक गटर के लिए सबसे अच्छा औचित्य एक सीमा है जो हमें अपने आदर्शों से दूर करती है। यह सब कुछ पाने पर परिणाम नहीं होना चाहिए। जब यह एक गटर में परिणाम करता है तो आपको व्यवहार को रसदार बिट में आगे बढ़ने पर विचार करना चाहिए जहां आप इसे संरक्षित कर सकते हैं।
इस अलगाव ने कुछ शर्तों को जन्म दिया है। डेटा ट्रांसफर ऑब्जेक्ट या DTO, कोई व्यवहार नहीं रखता है। केवल विधियाँ हैं और कभी-कभी बसने वाले, कभी-कभी निर्माण करने वाले। यह नाम दुर्भाग्यपूर्ण है क्योंकि यह एक सच्ची वस्तु नहीं है। गेटर्स और सेटर वास्तव में सिर्फ डिबगिंग कोड हैं जो आपको ब्रेकपॉइंट सेट करने के लिए जगह देते हैं। अगर यह उस जरूरत के लिए नहीं था, तो वे सिर्फ सार्वजनिक क्षेत्रों के ढेर होंगे। C ++ में हम उन्हें स्ट्रक्चर्स कहते थे। सी ++ वर्ग से एकमात्र अंतर वे सार्वजनिक रूप से चूक गए थे।
डीटीओ अच्छे हैं क्योंकि आप उन्हें एक सीमा की दीवार पर फेंक सकते हैं और अपने अन्य तरीकों को एक अच्छा रसदार व्यवहार ऑब्जेक्ट में सुरक्षित रूप से रख सकते हैं। एक सच्ची वस्तु। उल्लंघन करने के लिए कोई गेटर्स नहीं होने के कारण यह इनकैप्सुलेशन है। मेरा व्यवहार ऑब्जेक्ट DTO को पैरामीटर ऑब्जेक्ट के रूप में उपयोग करके खा सकता है । कभी-कभी मुझे साझा उत्परिवर्तनीय स्थिति को रोकने के लिए इसकी रक्षात्मक प्रतिलिपि बनानी पड़ती है । मैं सीमा के भीतर रसदार भाग के अंदर उत्परिवर्ती डीटीओ के आसपास नहीं फैलता। मैं उनका एनकाउंटर कर देता हूं। मैं उन्हें छिपाता हूं। और जब मैं अंत में एक नई सीमा में दौड़ता हूं तो मैं एक नया डीटीओ स्पिन करता हूं और इसे दीवार पर फेंक देता हूं, जिससे यह किसी और की समस्या बन जाती है।
लेकिन आप ऐसे गेटर्स प्रदान करना चाहते हैं जो पहचान व्यक्त करें। खैर आप एक सीमा मिल गया है बधाई। संस्थाओं की एक पहचान है जो उनके संदर्भ से परे है। यानी उनके मेमोरी एड्रेस से परे। इसलिए इसे कहीं स्टोर करना होगा। और किसी चीज को पहचान के द्वारा इस चीज को संदर्भित करने में सक्षम होना चाहिए। पहचान प्राप्त करने वाला एक गेटटर पूरी तरह से उचित है। कोड का एक ढेर जो उस गेटवे का उपयोग करता है जो निर्णय लेने के लिए होता है जो एंटिटी खुद बना सकती थी।
अंत में यह गेटर्स का अस्तित्व नहीं है जो गलत है। वे सार्वजनिक क्षेत्रों से कहीं बेहतर हैं। क्या बुरा है जब वे बहाना करने के लिए उपयोग किए जाते हैं आप ऑब्जेक्ट ओरिएंटेड हो जब आप नहीं हैं। गेटर्स अच्छे हैं। ऑब्जेक्ट ओरिएंटेड होना अच्छा है। गेट्स ऑब्जेक्ट ओरिएंटेड नहीं हैं। ऑब्जेक्ट ओरिएंटेड होने के लिए एक सुरक्षित स्थान को बाहर निकालने के लिए गेटर्स का उपयोग करें।