कोई सुनहरा नियम नहीं है जो 100% समय लागू होता है। यह वास्तव में आपकी जरूरतों के आधार पर एक निर्णय कॉल है।
यह इस बात पर निर्भर करता है कि बंदर के लिए सॉलिडर तक पहुंच से आप कितनी कार्यक्षमता को छिपाना/अस्वीकार करना चाहते हैं।
यदि आप केवल गन तक पहुंच को पढ़ना चाहते हैं तो आप अपने सदस्य के लिए एक कॉन्स्ट संदर्भ वापस कर सकते हैं।
यदि आप केवल कुछ कार्यक्षमता का पर्दाफाश करना चाहते हैं तो आप रैपर फ़ंक्शन बना सकते हैं। यदि आप नहीं चाहते हैं कि उपयोगकर्ता सैनिक के माध्यम से गन सेटिंग्स को बदलने का प्रयास करें तो रैपर फ़ंक्शन बनाएं।
आम तौर पर, हालांकि, मैं गन को अपनी वस्तु के रूप में देखता हूं और यदि आप सभी गन की कार्यक्षमता को उजागर करने में कोई फर्क नहीं पड़ता है, और सोल्डर ऑब्जेक्ट के माध्यम से चीजों को बदलने की अनुमति नहीं देते हैं, तो बस इसे सार्वजनिक बनाएं।
शायद आप बंदूक की प्रतिलिपि नहीं चाहते हैं, इसलिए यदि आप गेटगुन() विधि बनाते हैं तो सुनिश्चित करें कि आप बंदूक की एक प्रति वापस नहीं कर रहे हैं।
यदि आप अपना कोड सरल रखना चाहते हैं तो बंदूक से निपटने के लिए सैनिक को जिम्मेदार ठहराएं। क्या आपके अन्य कोड को सीधे बंदूक के साथ काम करने की ज़रूरत है? या क्या एक सैनिक हमेशा जानता है कि अपनी बंदूक कैसे काम/पुनः लोड करें?
स्रोत
2010-04-06 14:53:00
स्टीफन और फ्रस्ट्रेटेड से जवाब एकत्र करें। एक निजी 'get_gun()' है जो सैनिक के लिए बंदूक प्राप्त करने के लिए जरूरी काम करता है, जैसा कि स्टीफन दिखाता है, लेकिन * सैनिक * बताएं कि क्या करना है, न कि बंदूक, निराशाजनक शो के रूप में। – GManNickG
@GMan - धन्यवाद, मैं सहमत हूं। हालांकि, @ फ्रस्ट्रेटेड के दृष्टिकोण की बजाय, सैनिक को बताएं कि क्या करना है @ ऑस्टिन का दृष्टिकोण? जैसे "soldier.loadGun()" के बजाय सैनिक। एटैक()। – Stephen
@ स्टीफन: हाँ, आप encapsulation को जितना चाहें उतना गहरा कर सकते हैं। मेरा सवाल केवल इस हिस्से के बारे में था। बेशक आप सैनिक कह सकते हैं। एटैक() और इस फ़ंक्शन के अंदर आप जांच सकते हैं कि (! Gun.getBullets()) वापसी या उस तरह की चीज़ें। – pocoa