जावा ने पैकेज एक्सेस को डिफ़ॉल्ट क्यों बनाया?


26

मैं यह सवाल इसलिए पूछ रहा हूं क्योंकि मेरा मानना ​​है कि उन्होंने यह एक बहुत अच्छे कारण के लिए किया है और ज्यादातर लोग इसे ठीक से उपयोग नहीं करते हैं, उद्योग में मेरे अनुभव से वैसे भी। लेकिन अगर मेरा सिद्धांत सही है, तो मुझे यकीन नहीं है कि उन्होंने निजी एक्सेस संशोधक को क्यों शामिल किया ...?

मेरा मानना ​​है कि यदि डिफ़ॉल्ट पहुंच का सही उपयोग किया जाता है तो यह एन्कैप्सुलेशन बनाए रखते हुए संवर्धित परीक्षण क्षमता प्रदान करता है। और यह निजी एक्सेस मॉडिफायर बेमानी को भी प्रस्तुत करता है।

डिफ़ॉल्ट एक्सेस संशोधक का उपयोग दुनिया के बाकी हिस्सों से छिपाए जाने की आवश्यकता वाले तरीकों के लिए एक अनूठे पैकेज का उपयोग करके समान प्रभाव प्रदान करने के लिए किया जा सकता है, और यह परीक्षण के फ़ोल्डर में पैकेज के रूप में परीक्षण क्षमता से समझौता किए बिना ऐसा करता है, उसी के साथ हैं स्रोत फ़ोल्डर में घोषित सभी डिफ़ॉल्ट तरीकों का उपयोग करने में सक्षम।

मेरा मानना ​​है कि यही कारण है कि जावा पैकेज एक्सेस को 'डिफ़ॉल्ट' के रूप में उपयोग करता है। लेकिन मुझे यकीन नहीं है कि उन्होंने निजी पहुंच को भी क्यों शामिल किया, मुझे यकीन है कि एक वैध उपयोग मामला है ...



पहले से चर्चा की गई इकाई परीक्षण निजी तरीकों के बारे में प्रासंगिक; कैसे-करें-आप-यूनिट-परीक्षण-निजी-विधियाँ । उत्तर; आपको नहीं होना चाहिए
रिचर्ड टिंगल

जवाबों:


25

मुझे लगता है कि उन्हें एक अच्छा विचार था कि एक औसत प्रोग्रामर क्या करेगा। और औसत प्रोग्रामर से मेरा मतलब है कि जो वास्तव में प्रोग्रामिंग में अच्छा नहीं है, लेकिन उसे वैसे भी काम मिलता है क्योंकि बहुत अच्छे नहीं हैं और वे महंगे हैं।

यदि वे डिफ़ॉल्ट रूप से "सार्वजनिक" एक्सेस करते हैं, तो अधिकांश प्रोग्रामर कभी भी किसी अन्य चीज़ का उपयोग करने की जहमत नहीं उठाएँगे। परिणाम हर जगह बहुत सारे स्पेगेटी कोड होगा । (क्योंकि यदि आपको तकनीकी रूप से कहीं से भी कुछ भी कॉल करने की अनुमति है, तो कभी किसी विधि के भीतर कुछ तर्क समेटने की जहमत क्यों उठाते हैं?)

"निजी" बनाना डिफ़ॉल्ट पहुंच केवल थोड़ा बेहतर होगा। अधिकांश शुरुआती प्रोग्रामर बस (और अपने ब्लॉग पर साझा करेंगे) अंगूठे का एक नियम है कि "आपको हर जगह 'सार्वजनिक' लिखने की ज़रूरत है" और फिर वे शिकायत करेंगे कि जावा इतना बुरा क्यों है कि यह उन्हें हर जगह "सार्वजनिक" लिखने के लिए मजबूर करता है। और वे बहुत सारे स्पेगेटी कोड का उत्पादन भी करेंगे।

पैकेज एक्सेस कुछ ऐसा है जो प्रोग्रामर को एक पैकेज के भीतर कोड लिखते समय अपनी मैला प्रोग्रामिंग तकनीकों का उपयोग करने की अनुमति देता है, लेकिन फिर उन्हें अधिक पैकेज बनाते समय इस पर पुनर्विचार करना पड़ता है। यह अच्छी व्यावसायिक प्रथाओं और बदसूरत वास्तविकता के बीच एक समझौता है। जैसे: कुछ स्पेगेटी कोड लिखें, यदि आप जोर देते हैं, लेकिन कृपया पैकेज के भीतर बदसूरत गंदगी छोड़ दें; कम से कम संकुल के बीच कुछ अच्छे इंटरफेस बनाएँ।

संभवतः अन्य कारण भी हैं, लेकिन मैं इसे कम नहीं समझूंगा।


14

डिफ़ॉल्ट पहुँच निजी पहुँच संशोधक को प्रस्तुत नहीं करता है।

उस पर भाषा डिजाइनरों की स्थिति आधिकारिक ट्यूटोरियल में परिलक्षित होती है - एक कक्षा के सदस्यों तक पहुंच को नियंत्रित करना और यह बहुत स्पष्ट है (आपकी सुविधा के लिए, बोली में प्रासंगिक कथन बोल्ड किया गया है ):

एक्सेस स्तर चुनने पर सुझाव:

यदि अन्य प्रोग्रामर आपकी कक्षा का उपयोग करते हैं, तो आप यह सुनिश्चित करना चाहते हैं कि दुरुपयोग से त्रुटियां नहीं हो सकती हैं। प्रवेश स्तर आपको ऐसा करने में मदद कर सकता है।

  • सबसे अधिक प्रतिबंधात्मक पहुंच स्तर का उपयोग करें जो किसी विशेष सदस्य के लिए समझ में आता है। जब तक आपके पास कोई अच्छा कारण न हो, निजी का उपयोग करें।
  • स्थिरांक को छोड़कर सार्वजनिक क्षेत्रों से बचें। (ट्यूटोरियल में कई उदाहरण सार्वजनिक क्षेत्रों का उपयोग करते हैं। यह कुछ बिंदुओं को संक्षिप्त रूप से चित्रित करने में मदद कर सकता है, लेकिन उत्पादन कोड के लिए अनुशंसित नहीं है।) सार्वजनिक क्षेत्र आपको एक विशेष कार्यान्वयन से जोड़ते हैं और आपके कोड को बदलने में आपके लचीलेपन को सीमित करते हैं।

पूरी तरह से निजी संशोधक को छोड़ने के औचित्य के रूप में परीक्षण के लिए आपकी अपील गलत है, उदाहरण के लिए टीडीडी में नए द्वारा दिए गए उदाहरणों से। क्या मुझे अब निजी तरीकों से बचना चाहिए?

बेशक आपके पास निजी तरीके हो सकते हैं, और निश्चित रूप से आप उनका परीक्षण कर सकते हैं।

या तो वहाँ है कुछ रास्ता चलाने के लिए निजी विधि प्राप्त करने के लिए, इस स्थिति में आप इसे उस तरह से परीक्षण कर सकते हैं, या वहाँ कोई चलाने के लिए निजी प्राप्त करने के लिए जिस तरह से, जिस स्थिति में: क्यों हो तुम यह परीक्षण करने के लिए कोशिश कर रहे हैं, बस धिक्कार है हटाओ ...


पैकेज स्तर पहुंच के उद्देश्य और उपयोग पर भाषा डिजाइनरों की स्थिति को एक अन्य आधिकारिक ट्यूटोरियल में समझाया गया है, पैकेज बनाना और उपयोग करना और इसमें निजी संशोधक छोड़ने के विचार के साथ सामान्य रूप से कुछ भी नहीं है (आपकी सुविधा के लिए, बोली में बोल्ड किए गए प्रासंगिक विवरण ) :

आपको निम्न सहित कई कारणों से इन कक्षाओं और इंटरफ़ेस को एक पैकेज में बंडल करना चाहिए:

  • आप और अन्य प्रोग्रामर आसानी से निर्धारित कर सकते हैं कि ये प्रकार संबंधित हैं ...
  • आप पैकेज के भीतर प्रकारों को एक दूसरे के लिए अप्रतिबंधित पहुंच रखने की अनुमति दे सकते हैं, फिर भी पैकेज के बाहर के प्रकारों के लिए पहुंच को प्रतिबंधित कर सकते हैं ...

<शेख़ी "मुझे लगता है कि मैंने पर्याप्त स्वर सुना है। लगता है कि यह जोर से और स्पष्ट रूप से कहने का समय है ...">

यूनिट परीक्षण के लिए निजी तरीके फायदेमंद होते हैं।

नीचे ध्यान दें कि आप कोड कवरेज से परिचित हैं । यदि नहीं, तो सीखने के लिए समय निकालें, क्योंकि यह यूनिट परीक्षण में रुचि रखने वालों और परीक्षण में बिल्कुल उपयोगी है।

सब ठीक है, इसलिए मैंने उस निजी पद्धति और इकाई परीक्षणों, और कवरेज विश्लेषण से मुझे बताया है कि एक अंतर है, मेरी निजी पद्धति परीक्षणों द्वारा कवर नहीं की गई है। अभी व...

इसे निजी रखने से मुझे क्या लाभ होगा

चूंकि विधि निजी है, इसलिए आगे बढ़ने का एकमात्र तरीका यह जानने के लिए कोड का अध्ययन करना है कि इसका उपयोग गैर-निजी एपीआई के माध्यम से कैसे किया जाता है। आमतौर पर, इस तरह के एक अध्ययन से पता चलता है कि अंतर का कारण यह है कि परीक्षणों में विशेष उपयोग परिदृश्य गायब है।

    void nonPrivateMethod(boolean condition) {
        if (condition) {
            privateMethod();
        }
        // other code...
    }

    // unit tests don't invoke nonPrivateMethod(true)
    //   => privateMethod isn't covered.

पूर्णता के लिए, ऐसे कवरेज अंतराल के लिए अन्य (कम लगातार) कारणों से विनिर्देश / डिजाइन में कीड़े हो सकते हैं। मैं यहाँ इन चीजों को सरल रखने के लिए गहराई से गोता नहीं लगाऊँगा; यह कहने के लिए पर्याप्त है कि यदि आप "केवल परीक्षण योग्य बनाने के लिए पहुँच सीमा" को कमज़ोर करते हैं, तो आपको यह जानने का मौका मिलेगा कि ये बग बिल्कुल मौजूद हैं।

अंतर को ठीक करने के लिए, मैं लापता परिदृश्य के लिए एक इकाई परीक्षण जोड़ता हूं, कवरेज विश्लेषण दोहराता हूं और सत्यापित करता हूं कि अंतर समाप्त हो गया है। मेरे पास अब क्या है? मुझे गैर-निजी एपीआई के विशिष्ट उपयोग के लिए नई इकाई परीक्षा मिली है।

  1. नया परीक्षण यह सुनिश्चित करता है कि इस उपयोग के लिए अपेक्षित व्यवहार बिना सूचना के नहीं बदलेगा क्योंकि यदि यह बदल जाता है, तो परीक्षण विफल हो जाएगा।

  2. एक बाहरी पाठक इस परीक्षण को देख सकता है और सीख सकता है कि इसका उपयोग और व्यवहार कैसे करना है (यहां, बाहर के पाठक में मेरा भविष्य स्वयं शामिल है, क्योंकि मैं कोड को एक या दो महीने बाद भूल जाता हूं, जब मैं इसके साथ किया जाता हूं)।

  3. नए परीक्षण पुनर्रचना के सहिष्णु (मैं निजी तरीकों refactor? आप शर्त लगा सकता!) जो कुछ भी मैं करने के लिए क्या है privateMethod, मैं हमेशा परीक्षण करना चाहते हैं nonPrivateMethod(true)। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं privateMethod, परीक्षण को संशोधित करने की कोई आवश्यकता नहीं होगी क्योंकि विधि सीधे लागू नहीं होती है।

बुरा नहीं? बिलकुल।

मैं पहुंच सीमा को कमजोर करने से क्या ढीला कर सकता हूं

अब कल्पना करें कि ऊपर के बजाय, मैं बस पहुंच सीमा को कमजोर करता हूं। मैं उस कोड के अध्ययन को छोड़ देता हूं जो विधि का उपयोग करता है और सीधे उस परीक्षण के साथ आगे बढ़ता है जो मेरा आह्वान करता है exPrivateMethod। महान? नहीं!

  1. क्या मैं ऊपर उल्लिखित गैर-निजी एपीआई के विशिष्ट उपयोग के लिए एक परीक्षण प्राप्त कर सकता हूं? नहीं: nonPrivateMethod(true)पहले कोई टेस्ट नहीं था , और अब ऐसा कोई टेस्ट नहीं है।

  2. क्या बाहर के पाठकों को कक्षा के बेहतर उपयोग को समझने का मौका मिलता है? नहीं। "- अरे यहाँ पर परीक्षण की गई विधि का क्या उद्देश्य है? - इसे भूल जाओ, यह आंतरिक उपयोग के लिए कड़ाई से है। - उफ़।"

  3. क्या यह रिफलेक्टिंग के प्रति सहिष्णु है? कोई रास्ता नहीं: मैं जो भी बदलूंगा exPrivateMethod, वह परीक्षण को तोड़ देगा। नाम बदलें, किसी अन्य विधि में विलय करें, तर्क बदलें और परीक्षण बस संकलन बंद कर देगा। सरदर्द? बिलकुल!

संक्षेप में, निजी विधि के साथ चिपके हुए मुझे इकाई परीक्षण में एक उपयोगी, विश्वसनीय वृद्धि लाता है। इसके विपरीत, "परीक्षण के लिए" सीमाओं को कमजोर करना "केवल मुझे एक अस्पष्ट, परीक्षण कोड के टुकड़े को समझने के लिए कठिन देता है, जो कि किसी भी मामूली रिफैक्टरिंग द्वारा टूटने के स्थायी जोखिम के अतिरिक्त है; स्पष्ट रूप से मुझे जो मिलता है वह तकनीकी ऋण की तरह संदिग्ध दिखता है ।

</ शेख़ी>


7
मुझे लगता है कि निजी तरीकों को मजबूर करने के परीक्षण के लिए तर्क नहीं मिला है। आप उन सभी कारणों के लिए हर समय तरीकों में कोड को रिफ्लेक्टर करते हैं जिनका किसी वर्ग के सार्वजनिक एपीआई से कोई लेना-देना नहीं है, और किसी अन्य कोड को शामिल किए बिना उन तरीकों का स्वतंत्र रूप से परीक्षण करने में सक्षम होना बहुत अच्छी बात है । यही कारण है कि आप refactored, सही है? स्वतंत्र कार्यक्षमता का एक टुकड़ा पाने के लिए। यह कार्यक्षमता स्वतंत्र रूप से भी परीक्षण योग्य होनी चाहिए।
रॉबर्ट हार्वे

@RobertHarvey उत्तर ने इसे संबोधित करते हुए एक शेख़ी के साथ विस्तार किया। "निजी तरीके यूनिट परीक्षण के लिए फायदेमंद हैं ..."
gnat

मैं देखता हूं कि आप निजी तरीकों और कोड कवरेज के बारे में क्या कह रहे हैं, लेकिन मैं वास्तव में उन तरीकों को सार्वजनिक करने की वकालत नहीं कर रहा था ताकि आप उनका परीक्षण कर सकें। मैं निजी तौर पर होते हुए भी उन्हें स्वतंत्र रूप से परखने का तरीका अपनाने की वकालत कर रहा था। आप अभी भी अपने सार्वजनिक परीक्षण कर सकते हैं जो यदि आप चाहते हैं, तो निजी पद्धति को स्पर्श करें। और मेरे निजी परीक्षण हो सकते हैं।
रॉबर्ट हार्वे

@RobertHarvey मैं देख रहा हूं। लगता है कि यह कोडिंग शैली को उबालता है। मेरे द्वारा आमतौर पर उत्पादित निजी विधियों की मात्रा पर, और जिस दर पर मैं इन्हें रिफ्लेक्टर करता हूं, उनके लिए परीक्षण करना केवल एक लक्जरी है जिसे मैं बर्दाश्त नहीं कर सकता। गैर-निजी एपीआई एक और मामला है, मैं इसे संशोधित करने में बहुत अनिच्छुक और धीमा हूं
जीएनएटी

शायद आप उन तरीकों को लिखने में बेहतर हैं जो पहली बार मैं हूं की तुलना में काम करता हूं। मेरे लिए, मुझे यह सुनिश्चित करने के लिए विधि का परीक्षण करने की आवश्यकता है कि यह आगे बढ़ने से पहले पहले काम करता है, और अन्य तरीकों की एक श्रृंखला को बंद करके अप्रत्यक्ष रूप से परीक्षण करने के लिए यह अनाड़ी और अजीब होगा।
रॉबर्ट हार्वे

9

संभावित कारण यह है: इसका इतिहास से लेना-देना है। जावा के पूर्वज, ओक के पास केवल तीन पहुंच स्तर थे: निजी, संरक्षित, सार्वजनिक।

ओक में निजी को छोड़कर, जावा में पैकेज निजी के बराबर था। आप ओक की भाषा विनिर्देश (जोर मेरा) के खंड 4.10 पढ़ सकते हैं :

डिफ़ॉल्ट रूप से एक वर्ग (कंस्ट्रक्टर सहित) में सभी चर और तरीके निजी हैं। निजी चर और विधियों को केवल कक्षा में घोषित विधियों द्वारा ही पहुँचा जा सकता है, न कि इसके उपवर्गों या किसी अन्य वर्गों ( एक ही पैकेज में कक्षाओं को छोड़कर ) द्वारा।

तो आपकी बात के लिए, निजी पहुंच, जैसा कि जावा में जाना जाता है, मूल रूप से वहां नहीं थी। लेकिन जब आपके पास एक पैकेज में कुछ से अधिक कक्षाएं होती हैं, तो निजी नहीं होने के नाते, जैसा कि हम जानते हैं कि अब यह नाम टकराव की एक दुःस्वप्न का कारण बनेगी (उदाहरण के लिए, java.until.concurrent में करीब 60 कक्षाएं हैं), जो कि शायद यही वजह है कि इसे पेश किया।

हालांकि डिफ़ॉल्ट पैकेज एक्सेस (मूल रूप से निजी कहा जाता है) शब्दार्थ ओक और जावा के बीच नहीं बदले गए थे।


5

मेरा मानना ​​है कि यदि डिफ़ॉल्ट पहुंच का सही उपयोग किया जाता है तो यह एन्कैप्सुलेशन बनाए रखते हुए संवर्धित परीक्षण क्षमता प्रदान करता है। और यह निजी एक्सेस मॉडिफायर बेमानी को भी प्रस्तुत करता है।

ऐसी परिस्थितियां हैं, जहां कोई दो अलग-अलग वर्ग चाहेगा जो जनता के साथ सब कुछ उजागर करने की तुलना में अधिक कसकर बाध्य हो। C ++ में 'दोस्तों' के समान विचार हैं जहां एक और वर्ग जिसे दूसरे का 'दोस्त' घोषित किया जाता है, अपने निजी सदस्यों तक पहुंच सकता है।

यदि आप BigInteger जैसी कक्षाओं की सराय में देखते हैं, तो आपको फ़ील्ड और विधियों पर पैकेज डिफ़ॉल्ट सुरक्षा के कई नंबर मिलेंगे (सूची में नीला त्रिकोण)। यह java.math पैकेज में अन्य वर्गों को विशिष्ट ऑपरेशनों के लिए अपनी पारी के लिए अधिक इष्टतम उपयोग करने की अनुमति देता है (आप इन तरीकों को BigDecimal में कह सकते हैं - BigDecimal एक BigInteger द्वारा समर्थित है और BigInteger को फिर से लागू करने से बचाता है। । ये पैकेज स्तर isn 'हैं) t सुरक्षा के लिए एक मुद्दा क्योंकि java.math एक सील पैकेज है और इसमें कोई अन्य कक्षाएं नहीं जोड़ी जा सकती हैं।

दूसरी ओर, कई चीजें हैं जो वास्तव में निजी हैं, जैसा कि उन्हें होना चाहिए। अधिकांश पैकेजों को सील नहीं किया गया है। निजी के बिना, आपका सहकर्मी उस पैकेज में एक और वर्ग डाल सकता है और (अब नहीं) निजी क्षेत्र तक पहुंच सकता है और एनकैप्सुलेशन को तोड़ सकता है।

ध्यान में रखते हुए, इकाई परीक्षण कुछ ऐसा नहीं था जो सुरक्षा स्कॉप्स के निर्माण के समय वापस सोचा गया था। 1997 तक JUnit (Java के लिए XUnit टेस्टिंग फ्रेमवर्क) की कल्पना नहीं की गई थी (उस की कहानी के बारे में बताने वाले को http://www.martinfowler.com/bliki/Xunit.html पर पढ़ा जा सकता है )। JDK का अल्फा और बीटा संस्करण 1995 में था और JDK 1.0 1996 में था, हालांकि JDK 1.0.2 तक सुरक्षा स्तर वास्तव में नीचे नहीं मिला था (इससे पहले कि आप एक private protectedसुरक्षा स्तर हो सकते थे)।

कुछ का तर्क है कि डिफ़ॉल्ट पैकेज स्तर नहीं होना चाहिए, लेकिन निजी। दूसरों का तर्क है कि डिफ़ॉल्ट सुरक्षा नहीं होनी चाहिए, लेकिन सब कुछ स्पष्ट रूप से कहा जाना चाहिए - इस के कुछ अनुयायी कोड लिखेंगे जैसे:

public class Foo {
    /* package */ int bar = 42;
    ...
}

वहाँ टिप्पणी पर ध्यान दें।

पैकेज स्तर की सुरक्षा का वास्तविक कारण डिफ़ॉल्ट रूप से जावा के डिजाइन नोटों के गुम होने की संभावना है (मैं खुदाई कर रहा हूं और कोई भी लेख क्यों नहीं मिल रहा है , बहुत सारे लोग अंतर को समझा रहे हैं, लेकिन कोई भी नहीं कह रहा है "यह कारण है ")।

तो मैं एक अनुमान लगाऊंगा। और यह सब है - एक अनुमान।

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

  • डिजाइनरों ने C ++ के 'मित्र' संबंध के लिए एक सामयिक आवश्यकता देखी।
  • डिजाइनर इसके लिए स्पष्ट कथन चाहते थे public, और privateइनका उपयोग पर सबसे बड़ा प्रभाव पड़ता है।

इस प्रकार, निजी डिफ़ॉल्ट और अच्छी तरह से नहीं है, बाकी सब कुछ जगह में गिर गया। डिफ़ॉल्ट स्कोप को डिफ़ॉल्ट के रूप में छोड़ दिया गया था। यह पहला स्कोप हो सकता है जो बनाया गया था और पुराने कोड के साथ कठोर पश्चगामी संगतता के हित में, इस तरह छोड़ दिया गया था।

जैसा कि मैंने कहा, ये सभी एक अनुमान हैं


आह यदि केवल मित्र सुविधा को सदस्यों को एक अविभाज्य आधार पर लागू किया जा सकता है, तो आप कह सकते हैं कि शून्यकरण () केवल दसवीं कक्षा द्वारा देखा जा सकता है ... जो वास्तव में एन्कैप्सुलेशन को कस देगा!
newlogic

ओह रुको आप सी ++ में ऐसा कर सकते हैं, हमें जावा में इसकी आवश्यकता है!
newlogic

2
@ user1037729 यह दो वर्गों के बीच एक सख्त युग्मन के लिए बनाता है - विधि के साथ वर्ग को अब अन्य वर्गों के बारे में जानना होगा जो इसके मित्र हैं। यह जावा को प्रदान किए गए डिजाइन दर्शन के खिलाफ जाता है। समस्याओं का समूह जो दोस्तों के साथ हल करने योग्य है, लेकिन पैकेज स्तर की सुरक्षा नहीं है, वह बड़ी नहीं है

2

एनकैप्सुलेशन यह कहने का एक तरीका है "आपको इस बारे में सोचने की ज़रूरत नहीं है"।

                 Access Levels
Modifier    Class   Package  Subclass   World
public        Y        Y        Y        Y
protected     Y        Y        Y        N
no modifier   Y        Y        N        N
private       Y        N        N        N

इन्हें गैर-तकनीकी शब्दों में रखना।

  1. सार्वजनिक: सभी को इसके बारे में सोचना होगा।
  2. संरक्षित: डिफ़ॉल्ट और उपवर्गों को इसके बारे में जानना होगा।
  3. डिफ़ॉल्ट, यदि आप पैकेज पर काम कर रहे हैं, तो आप इसके बारे में जानेंगे (यह आपकी आंखों के सामने वहीं है) हो सकता है कि आप इसके बारे में सलाह दें।
  4. निजी, आपको केवल इस बारे में जानने की आवश्यकता है कि क्या आप इस वर्ग पर काम कर रहे हैं।

मुझे नहीं लगता कि प्राइवेट क्लास या प्रोटेक्टेड क्लास जैसी कोई चीज होती है ..
कोरे तुगे

@KorayTugay: docs.oracle.com/javase/tutorial/java/javaOO/innerclasses.html देखें । भीतर का वर्ग निजी है। अंतिम पैराग्राफ पढ़ें।
जोर्मेनो

0

मुझे नहीं लगता कि उन्होंने परीक्षण पर ध्यान केंद्रित किया, क्योंकि परीक्षण बहुत सामान्य नहीं था।

मुझे क्या लगता है कि वे हासिल करना चाहते थे पैकेज के स्तर पर इनकैप्सुलेशन था। एक वर्ग जैसा कि आप जानते हैं कि आपके पास आंतरिक तरीके और क्षेत्र हैं और केवल सार्वजनिक सदस्यों के माध्यम से इसे उजागर करते हैं। उसी तरह एक पैकेज में आंतरिक कक्षाएं, विधियां और क्षेत्र हो सकते हैं, और केवल इसमें से कुछ को उजागर कर सकते हैं। यदि आप इस तरह से सोचते हैं, तो एक पैकेज में कक्षाओं, विधियों और क्षेत्रों के एक समूह में आंतरिक कार्यान्वयन होता है, साथ ही कक्षाओं, विधियों और क्षेत्रों के सेट में एक सार्वजनिक इंटरफ़ेस (संभवतः आंशिक रूप से ओवरलैपिंग) होता है।

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


आप सही हैं कि स्वचालित परीक्षण वहाँ बहुत आम नहीं था। लेकिन यह एक अपरिपक्व डिजाइन है।
टॉम हॉल्टिन -
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.