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