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