2010-05-09 17 views
8
Class Outer 
{ 
... 
    private class Node 
    { 
     private T data; 
     ... 

     private T getData() 
     { 
     return data; 
     } 
    } 
} 

बाहरी वर्ग निजी सदस्यों तक पहुंचने के लिए सेट का उपयोग करने और विधियों को प्राप्त करने का क्या उद्देश्य है? आंतरिक कक्षाओं को निजी बनाने का उद्देश्य क्या है? पैकेज का उपयोग?कक्षा में आंतरिक वर्ग का उपयोग करने वाले वर्ग?

+1

कृपया उस भाषा को टैग करें जिसका आप उपयोग कर रहे हैं। –

+0

@ डोनल, जावा की तरह दिखता है। –

+0

डोनाल, यह एक काफी भाषा अज्ञेयवादी प्रश्न है ... एक सामान्य ओओ सवाल से अधिक। – Polaris878

उत्तर

8

निजी आंतरिक कक्षाएं तब लिखी जाती हैं जब आप नहीं चाहते कि कक्षा को पैकेज के भीतर या बाहर बाहरी कक्षाओं में उजागर किया जाए। वे केवल बाहरी स्तर की कक्षा के अंदर उपयोग किया जाता है।

गेटर्स और सेटर्स आमतौर पर एक निजी कक्षाओं के भीतर समझ में नहीं आता है क्योंकि आप वैसे भी आवृत्ति चर का उपयोग कर सकते हैं।

4

आप छोटे तिहाई और सेटर्स छोड़ सकते हैं, लेकिन अक्सर वे विधियां गैर-तुच्छ होती हैं (एक आम मामला 'आलसी भार' पैटर्न होता है)।

जोड़ने के लिए संपादित: आलसी लोड तब होता है जब आप डेटा से अनुरोध करते समय केवल सदस्य को तत्काल बनाते हैं। इसका उपयोग तब किया जाता है जब डेटा प्राप्त करने की हमेशा आवश्यकता नहीं होती है और यह महंगा होता है।

class a 
{ 
private: 
    int m_aNumber; 
    bigDeal *m_pBig; 

public: 
    a() { m_aNumber = 0; m_pBig = NULL; } 
    ~a() { if (m_pBig) delete m_pBig; } 

    // trivial 
    int get_aNumber() { return m_aNumber;} 
    void set_aNumber(int val) { m_aNumber = val; } 

    // lazy load 
    bigDeal *get_Big() 
    { 
     if (m_pBig == NULL) 
     { 
      // bigDeal::bigDeal() downloads data from Mars Rover 
      // takes 20 minutes, costs $1.2 million dollars to run 
      m_pBig = new(bigDeal); 
     } 
     return m_pBig; 
    } 
    void set_Big(bigDeal *val) 
    { 
     m_pBig = val; 
    } 
} 
+0

क्या आप इस पर विस्तार कर सकते हैं? – ShrimpCrackers

+0

उम, डाउनवोट्स? क्या कोई त्रुटि है? उसने 'आलसी भार' के बारे में पूछा ... – egrunin

1

सबसे पहले, मैं आंतरिक public/protected/internal कक्षाओं का इलाज करने के लिए कहूंगा जैसा कि आप किसी अन्य "बाहरी" वर्ग का इलाज करेंगे। मतलब, एक ही डिजाइन सिद्धांतों का उपयोग करें।

आंतरिक कक्षाओं के लिए, जब मैं आंतरिक निजी कक्षाओं का उपयोग कर रहा हूं, तो वे आम तौर पर केवल बाइट्स का ढेर बनते हैं ... जिसका अर्थ है कि वे वास्तविक प्रसंस्करण नहीं करते हैं। वे बाहरी वर्ग के लिए लेखन कोड बनाने के लिए बस वहां हैं।

मैं आपको खराब कोड लिखने के लिए नहीं कह रहा हूं, लेकिन आप आंतरिक डिजाइन के साथ अपने डिजाइन में और अधिक ढीला हो सकते हैं। एक सामान्य नियम के रूप में, वे सरल और हल्के होना चाहिए ... आंतरिक कक्षाओं पर ओओ के साथ ओवरबोर्ड पर न जाएं। इसके अलावा, यदि आप आंतरिक कक्षा में कुछ भी बदलना चाहते हैं तो आपको केवल बाहरी वर्ग में संदर्भ अपडेट करना होगा ... जो टीबीएच एक बड़ा सौदा नहीं है।

संबंधित मुद्दे