मान लीजिए कि मेरे पास कक्षा 'एप्लिकेशन' है। आरंभ करने के लिए यह कन्स्ट्रक्टर में कुछ सेटिंग्स लेता है। आइए यह भी मान लें कि सेटिंग्स की संख्या इतनी है कि यह उन्हें स्वयं की कक्षा में रखने के लिए मजबूर है।"सार्वजनिक" नेस्टेड कक्षाएं या
इस परिदृश्य के निम्नलिखित दो कार्यान्वयन की तुलना करें।
कार्यान्वयन 1:
class Application
{
Application(ApplicationSettings settings)
{
//Do initialisation here
}
}
class ApplicationSettings
{
//Settings related methods and properties here
}
कार्यान्वयन 2:
class Application
{
Application(Application.Settings settings)
{
//Do initialisation here
}
class Settings
{
//Settings related methods and properties here
}
}
मेरे लिए
, दूसरा दृष्टिकोण बहुत ज्यादा बेहतर है। यह अधिक पठनीय है क्योंकि यह दो वर्गों के बीच संबंधों पर दृढ़ता से जोर देता है। जब मैं कहीं भी एप्लिकेशन क्लास को तुरंत चालू करने के लिए कोड लिखता हूं, तो दूसरा दृष्टिकोण सुंदर दिखने वाला है।
अब कल्पना करें कि सेटिंग क्लास में कुछ समान रूप से "संबंधित" वर्ग था और उस वर्ग ने भी बदले में ऐसा किया था। केवल तीन ऐसे स्तरों पर जाएं और कक्षा नामकरण 'गैर-नेस्टेड' मामले में हाथ से बाहर हो जाता है। यदि आप घोंसला करते हैं, हालांकि, चीजें अभी भी सुरुचिपूर्ण रहती हैं।
उपर्युक्त के बावजूद, मैंने लोगों को स्टैक ओवरफ्लो पर कहा है कि नेस्टेड कक्षाएं केवल तभी उचित होती हैं जब वे बाहरी दुनिया में दिखाई न दें; यह है कि अगर वे केवल कक्षा के आंतरिक कार्यान्वयन के लिए उपयोग किया जाता है। आमतौर पर उद्धृत आपत्ति वर्ग की स्रोत फ़ाइल के आकार को फिसल रही है, लेकिन आंशिक कक्षाएं उस समस्या का सही समाधान है।
मेरा सवाल है, हम नेस्टेड कक्षाओं के "सार्वजनिक रूप से उजागर" उपयोग से क्यों सावधान हैं? क्या इस तरह के उपयोग के खिलाफ कोई अन्य तर्क हैं?
मुझे हाल ही में कुछ बिल्डर कोड लिखना पड़ा और इस पोस्ट को याद किया। यह एक बहुत ही उपयोगी दृष्टिकोण साबित हुआ, इसलिए धन्यवाद। –
* "यह निर्माता को बाहरी वर्ग के निजी सदस्यों तक पहुंचने देता है" * केवल एक स्पष्ट संदर्भ के साथ, सही (मुझे पूरा यकीन है कि यह जावा की आंतरिक कक्षाओं में निहित नहीं है)? – samosaris
@ सैमसएरिन: हां, युक्त कक्षा के उदाहरण के लिए कोई अंतर्निहित संदर्भ नहीं है। लेकिन आपके पास स्थिर सदस्यों तक पहुंच है। असल में मैं * केवल * पहुंच के बारे में बात कर रहा था। –