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