Follow Us
माध्यम चुनें / Select Medium:
Eng (English) Hindi (हिन्दी)
ICSE • कक्षा 9 • Information Technology • अध्याय 2
अनुमानित समय: 45 Mins
प्रगति: अध्ययनरत

वस्तुओं और वर्गों की प्राथमिक अवधारणा (Elementary Concept of Objects and Classes)

आईसीएसई कक्षा 9 के कंप्यूटर अनुप्रयोगों में, "ऑब्जेक्ट्स और कक्षाओं की प्राथमिक अवधारणा" जावा में ऑब्जेक्ट-ओरिएंटेड सॉफ़्टवेयर डिज़ाइन के ठोस प्रोग्रामिंग यांत्रिकी को स्थापित करती है। यह मास्टर गाइड एक पहचान योग्य इकाई के रूप में एक ऑब्जेक्ट की दोहरी प्रकृति की पड़ताल करता है, जिसमें एक विशिष्ट स्टेट (विशेषताएं, विशेषताएं, उदाहरण चर) और व्यवहार (क्रियाएं, संचालन, सदस्य विधियां) होती हैं। छात्र एक ब्लूप्रिंट, टेम्पलेट, उपयोगकर्ता-परिभाषित डेटा प्रकार और "ऑब्जेक्ट फैक्ट्री" के रूप में कक्षा की मौलिक अवधारणा में महारत हासिल करते हैं जो सामान्य संरचना साझा करने वाले कई स्वतंत्र उदाहरण तैयार करता है। हम तीन-चरण ऑब्जेक्ट जीवनचक्र की जांच करते हैं - घोषणा (संदर्भ का नामकरण), इंस्टेंटिएशन (new ऑपरेटर का उपयोग करके हीप में गतिशील मेमोरी आवंटन), और इनिशियलाइज़ेशन (कंस्ट्रक्टर के माध्यम से प्रारंभिक स्थिति सेट करना) - साथ ही स्टैक बनाम हीप मेमोरी मॉडल, संदेश पासिंग के लिए डॉट ऑपरेटर (.), और सीआईएससीई परीक्षा विनिर्देशों के अनुरूप वास्तविक दुनिया जावा क्लास कार्यान्वयन।

एक ऑटोमोटिव कैसे होता है असेंबली लाइन एक वर्ग और एक वस्तु के बीच संबंध को पूरी तरह से समझाती है?

एक अत्याधुनिक टेस्ला गीगाफैक्ट्री के अंदर कदम रखने की कल्पना करें। इंजीनियरिंग कार्यालय में डिज़ाइन स्क्रीन पर "मॉडल 3" शीर्षक वाला एक एकल, बेदाग डिजिटल सीएडी ब्लूप्रिंट है। वह ब्लूप्रिंट हर आयाम, बैटरी विनिर्देश, मोटर टॉर्क और सॉफ्टवेयर फ़ंक्शन को निर्दिष्ट करता है। क्या आप उस डिजिटल ब्लूप्रिंट में शामिल हो सकते हैं और उसे राजमार्ग पर चला सकते हैं? बिल्कुल नहीं! ब्लूप्रिंट एक अमूर्त विशिष्टता है - इसमें कोई डामर नहीं है और कोई किलोवाट-घंटे नहीं जलता है। लेकिन जब रोबोटिक असेंबली लाइन उस ब्लूप्रिंट को पढ़ती है, तो यह हजारों भौतिक, चलाने योग्य कारों पर मुहर लगाती है: लाइसेंस प्लेट MH-01 के साथ एक लाल मॉडल 3, लाइसेंस प्लेट DL-04 के साथ एक नीला, और लंदन में एक सफेद। प्रत्येक कार की अपनी अलग गति, बैटरी चार्ज और माइलेज होती है। जावा में, क्लास इंजीनियरिंग ब्लूप्रिंट है, और लाइन से बाहर निकलने वाली प्रत्येक भौतिक कार एक ऑब्जेक्ट है! हम इस आर्किटेक्चर को कोड में कैसे अनुवादित करते हैं? आइए हम वस्तुओं और कक्षाओं में महारत हासिल करें।

यह अध्याय क्यों महत्वपूर्ण है

जावा में सब कुछ कक्षाओं और वस्तुओं के इर्द-गिर्द घूमता है। मॉड्यूलर, रखरखाव योग्य और स्केलेबल एंटरप्राइज़ सॉफ़्टवेयर लिखने के लिए यह समझना आवश्यक है कि कक्षाएं ब्लूप्रिंट के रूप में कैसे काम करती हैं, वस्तुएं स्वतंत्र ढेर मेमोरी का प्रबंधन कैसे करती हैं, और संदेश भेजने की विधियां कैसे सुविधाजनक बनाती हैं।

अध्ययन से पूर्व (आवश्यक ज्ञान)

  • OOP सिद्धांतों (एब्स्ट्रैक्शन, एनकैप्सुलेशन) की मौलिक समझ।
  • चर और कार्यों के साथ बुनियादी परिचितता।
  • वास्तविक दुनिया के लिए तार्किक तर्क मॉडलिंग।

इस अध्याय के लक्ष्य

  • वास्तविक दुनिया के उदाहरणों के साथ किसी वस्तु को उसकी स्थिति (विशेषताओं) और व्यवहार (तरीकों) के संदर्भ में परिभाषित करें।
  • समझाएं कि एक क्लास को "ऑब्जेक्ट फैक्ट्री", "ब्लूप्रिंट" और "उपयोगकर्ता-परिभाषित डेटा प्रकार" क्यों कहा जाता है।
  • एक व्यापक तुलनात्मक मैट्रिक्स के साथ क्लास और ऑब्जेक्ट के बीच अंतर करें।
  • निष्पादित करें ऑब्जेक्ट निर्माण की 3-चरणीय प्रक्रिया: घोषणा, इंस्टेंटिएशन (`new`), और आरंभीकरण।
  • मेमोरी आवंटन का विश्लेषण करें: हीप पर स्टैक बनाम ऑब्जेक्ट उदाहरणों पर संदर्भ चर।
  • डॉट ऑपरेटर (`.`) का उपयोग करके वस्तुओं के बीच गुजरने वाले संदेश को प्रदर्शित करें।

अध्याय रूपरेखा एवं प्रगति

1 1। किसी वस्तु की शारीरिक रचना: अवस्...
2 2. कक्षा: ब्लूप्रिंट, उपयोगकर्ता-पर...
3 3. ऑब्जेक्ट इंस्टेंटिएशन और 3-चरणीय...
4 4. संदेश पासिंग और डॉट ऑपरेटर (`.`)
5 5. एनकैप्सुलेशन के साथ व्यापक मल्टी...
6 6. उन्नत क्लास डिज़ाइन: कंस्ट्रक्टर...
7 7. ऑब्जेक्ट आर्किटेक्चर में एक्सेस...
8 8. जावा मेमोरी में कचरा संग्रहण और...
9 9. वस्तु स्थिति संशोधन सिद्धांत

सम्पूर्ण सैद्धांतिक एवं वैचारिक अध्ययन

1। किसी वस्तु की शारीरिक रचना: अवस्था, व्यवहार और पहचान

ऑब्जेक्ट आर्किटेक्चर
ए. किसी वस्तु के तीन अंतर्निहित लक्षण:

जावा में, एक Object एक वास्तविक दुनिया या वैचारिक इकाई को मॉडलिंग करने वाले संबंधित चर और तरीकों का एक सॉफ्टवेयर बंडल है। प्रत्येक वस्तु में तीन मूलभूत विशेषताएं होती हैं:

  1. स्थिति (विशेषताएं/विशेषताएं): किसी भी क्षण में वस्तु के पास मौजूद स्थिर और गतिशील डेटा गुण। जावा में, राज्य को इंस्टेंस वेरिएबल्स (फ़ील्ड) में संग्रहीत किया जाता है।
    उदाहरण (छात्र वस्तु): रोल नंबर (101), नाम ("आरव"), अंक (94.5), ग्रेड ('ए')।
  2. व्यवहार (कार्य/संचालन): संदेशों के जवाब में वस्तु क्या कर सकती है या वस्तु के साथ क्या किया जा सकता है। जावा में, व्यवहार को सदस्य विधियों (फ़ंक्शन) द्वारा परिभाषित किया जाता है।
    उदाहरण (छात्र वस्तु): गणना ग्रेड(), प्रदर्शन विवरण(), भुगतान शुल्क()।
  3. पहचान (अद्वितीय विशिष्टता): अद्वितीय व्यक्तित्व जो किसी वस्तु को कंप्यूटर मेमोरी में अन्य सभी वस्तुओं से अलग करती है, भले ही दो वस्तुओं में समान स्थिति मान हों। जावा में, पहचान ऑब्जेक्ट के अद्वितीय हीप मेमोरी एड्रेस द्वारा स्थापित की जाती है।

2. कक्षा: ब्लूप्रिंट, उपयोगकर्ता-परिभाषित प्रकार और ऑब्जेक्ट फ़ैक्टरी

क्लास अवधारणाएँ
ए. किसी क्लास को "ऑब्जेक्ट फ़ैक्टरी" क्यों कहा जाता है:

जिस तरह एक औद्योगिक स्टैम्पिंग डाई या फैक्ट्री मोल्ड एक ही पैटर्न से हजारों समान प्लास्टिक के खिलौने बनाता है, जावा क्लास एक वास्तुशिल्प टेम्पलेट के रूप में कार्य करता है जो मांग पर असीमित संख्या में अलग-अलग ऑब्जेक्ट इंस्टेंस का उत्पादन कर सकता है। इसलिए, एक वर्ग को सार्वभौमिक रूप से ऑब्जेक्ट फ़ैक्टरी.

के रूप में मान्यता प्राप्त है
बी. एक क्लास "उपयोगकर्ता-परिभाषित समग्र डेटा प्रकार" क्यों है:

जावा 8 अंतर्निहित आदिम डेटा प्रकार प्रदान करता है (जैसे int, डबल, char)। हालाँकि, आदिम प्रकार एक जटिल वास्तविक दुनिया इकाई का प्रतिनिधित्व नहीं कर सकते हैं (उदाहरण के लिए, एक कर्मचारी जिसका नाम, वेतन, आयु और विभाग है)। जब एक प्रोग्रामर घोषणा करता है:

वर्ग कर्मचारी {
    स्ट्रिंग नाम;
    int एम्पआईडी;
    दोगुना वेतन;
}

प्रोग्रामर ने कर्मचारी नामक एक नया, कस्टम, समग्र डेटा प्रकार बनाया है। Employee प्रकार का एक वेरिएबल अब एक आदिम वेरिएबल की तरह त्वरित किया जा सकता है: Employee emp1 = new Employee();

C. कक्षा बनाम वस्तु: व्यापक तुलना:
§67new. का उपयोग करके बनाए जाने पर Heap पर भौतिक मेमोरी आवंटित की गई §89class कीवर्ड का उपयोग करके घोषित किया गया। §93new ऑपरेटर का उपयोग करके गतिशील रूप से बनाया गया।
मूल्यांकन आयाम क्लास वस्तु
वैचारिक प्रकृति एक अमूर्त टेम्पलेट, ब्लूप्रिंट, या तार्किक प्रोटोटाइप। भौतिक स्मृति पर कब्जा करने वाले वर्ग का एक ठोस, जीवंत उदाहरण।
मेमोरी आवंटन घोषित होने पर इंस्टेंस वेरिएबल के लिए कोई हीप मेमोरी नहीं रहती।
अस्तित्व संकलन समय पर केवल एक बार मौजूद होता है (स्रोत/बाइटकोड में परिभाषित)। रनटाइम पर एक ही कक्षा से एकाधिक ऑब्जेक्ट को इंस्टेंटिअट किया जा सकता है।
कीवर्ड

3. ऑब्जेक्ट इंस्टेंटिएशन और 3-चरणीय निर्माण पाइपलाइन

मेमोरी और सिंटैक्स
ए. वस्तु निर्माण के तीन चरण:

जावा में एक ऑब्जेक्ट बनाने में तीन अलग-अलग व्याकरणिक और रनटाइम चरण शामिल होते हैं:

छात्र s1 = नया विद्यार्थी();
  1. 1. घोषणा (छात्र s1): एक चर नाम (s1) को एक ऑब्जेक्ट प्रकार (छात्र) के साथ जोड़ता है। यह ऑब्जेक्ट संदर्भ चर के लिए Stack पर स्थान आवंटित करता है। इस स्तर पर, s1 में null शामिल है (कुछ नहीं की ओर इशारा करता है)।
  2. 2. इंस्टेंटिएशन (new): new ऑपरेटर एक गतिशील मेमोरी आवंटन ऑपरेटर है। यह Student वर्ग के सभी इंस्टेंस वेरिएबल्स को रखने के लिए Heap पर पर्याप्त सन्निहित मेमोरी ब्लॉक आवंटित करता है और उस आवंटित स्थान पर एक संदर्भ (मेमोरी एड्रेस) लौटाता है।
  3. 3. इनिशियलाइज़ेशन (स्टूडेंट()): कंस्ट्रक्टर (स्टूडेंट()) को डिफ़ॉल्ट या उपयोगकर्ता-निर्दिष्ट मानों के साथ नव निर्मित ऑब्जेक्ट के इंस्टेंस वेरिएबल को इनिशियलाइज़ करने के लिए मेमोरी आवंटन के तुरंत बाद लागू किया जाता है। लौटाए गए हीप मेमोरी पते को फिर संदर्भ चर s1.
  4. को सौंपा गया है
बी. स्टैक बनाम हीप मेमोरी आर्किटेक्चर:

जावा के रनटाइम मेमोरी लेआउट में:

  • स्टैक मेमोरी: आदिम स्थानीय चर और ऑब्जेक्ट संदर्भ चर संग्रहीत करता है (उदाहरण के लिए, s1, s2)। स्टैक आवंटन तेज़ है और सख्त LIFO (लास्ट-इन-फर्स्ट-आउट) विधि दायरे का पालन करता है।
  • हीप मेमोरी: विस्तृत मेमोरी पूल जहां सभी वास्तविक ऑब्जेक्ट इंस्टेंस और उनके इंस्टेंस वेरिएबल रहते हैं। जब किसी ऑब्जेक्ट को किसी भी स्टैक वैरिएबल द्वारा संदर्भित नहीं किया जाता है, तो जावा का स्वचालित गारबेज कलेक्टर अपनी ढेर मेमोरी को पुनः प्राप्त करता है।

4. संदेश पासिंग और डॉट ऑपरेटर (`.`)

संचार
ए. अंतर-वस्तु संचार (संदेश पासिंग):

ओओपी में, वस्तुएं पृथक साइलो में काम नहीं करती हैं; वे संदेश भेजकर और प्राप्त करके बातचीत करते हैं। संदेश एक विशिष्ट सदस्य विधि को लागू करने के लिए एक ऑब्जेक्ट से दूसरे ऑब्जेक्ट पर भेजा गया एक अनुरोध है।

बी. डॉट ऑपरेटर सिंटैक्स:

डॉट ऑपरेटर (.) किसी ऑब्जेक्ट संदर्भ और उसके आंतरिक सदस्यों (चर और विधियों) के बीच लिंक स्थापित करता है:

  • वेरिएबल तक पहुँचना: objectName.variableName; (उदाहरण के लिए, s1.name = "रोहन";)
  • एक विधि का आह्वान: ऑब्जेक्टनाम.विधिनाम(तर्क); (उदाहरण के लिए, s1.गणना प्रतिशत(450, 500);)
C. संपूर्ण कार्यशील जावा उदाहरण:
// वर्ग परिभाषा (ब्लूप्रिंट)
वर्ग वृत्त {
    दोहरा त्रिज्या; // इंस्टेंस वैरिएबल (राज्य)

    // त्रिज्या निर्धारित करने के लिए सदस्य विधि
    शून्य सेटरेडियस(डबल आर) {
        त्रिज्या = आर;
    }

    // क्षेत्र (व्यवहार) की गणना करने के लिए सदस्य विधि
    डबल कंप्यूटएरिया() {
        वापसी Math.PI * त्रिज्या * त्रिज्या;
    }
}

// निष्पादन वर्ग
पब्लिक क्लास ज्योमेट्रीडेमो {
    सार्वजनिक स्थैतिक शून्य मुख्य(स्ट्रिंग[] तर्क) {
        // ऑब्जेक्ट इंस्टेंटेशन
        वृत्त c1 = नया वृत्त();
        वृत्त c2 = नया वृत्त();

        // संदेश डॉट ऑपरेटर के माध्यम से गुजर रहा है
        c1.setRadius(7.0);
        c2.setRadius(14.0);

        System.out.println('सर्कल 1 का क्षेत्र:' + c1.computeArea());
        System.out.println('सर्कल 2 का क्षेत्र:' + c2.computeArea());
    }
}

5. एनकैप्सुलेशन के साथ व्यापक मल्टी-ऑब्जेक्ट बैंकिंग प्रोग्राम

संपूर्ण कक्षा कार्यान्वयन
ए. बैंकअकाउंट क्लास ब्लूप्रिंट:
// ब्लूप्रिंट क्लास एक बैंक खाते का प्रतिनिधित्व करता है
सार्वजनिक वर्ग बैंक खाता {
    // निजी उदाहरण चर (राज्य) - एनकैप्सुलेशन / डेटा छिपाना
    निजी लंबी खाता संख्या;
    निजी स्ट्रिंग खाताधारकनाम;
    निजी डबल करंट बैलेंस;

    // इंस्टेंटेशन पर किसी ऑब्जेक्ट को इनिशियलाइज़ करने के लिए कंस्ट्रक्टर
    सार्वजनिक बैंक खाता (लंबा खाता संख्या, स्ट्रिंग नाम, डबल प्रारंभिक जमा) {
        खाता संख्या = खाता संख्या;
        अकाउंटहोल्डरनाम = नाम;
        करंटबैलेंस = प्रारंभिक जमा;
    }

    //सदस्य पैसा जमा करने का तरीका (व्यवहार)
    सार्वजनिक शून्य जमा (दोगुनी राशि) {
        यदि (राशि > 0) {
            वर्तमान शेष += राशि;
            System.out.println("जमा किया गया ₹" + राशि + " | अद्यतन शेष राशि: ₹" + वर्तमान शेष);
        }अन्यथा{
            System.out.println('त्रुटि: जमा राशि सकारात्मक होनी चाहिए!');
        }
    }

    //सत्यापन के साथ पैसे निकालने की सदस्य विधि
    सार्वजनिक शून्य निकासी (दोगुनी राशि) {
        यदि (राशि > 0 && राशि <= वर्तमान शेष) {
            वर्तमान शेष -= राशि;
            System.out.println("निकासी गई ₹" + राशि + "| शेष शेष: ₹" + वर्तमान शेष);
        }अन्यथा{
            System.out.println('लेन-देन विफल: अपर्याप्त धनराशि या अमान्य राशि!');
        }
    }

    // खाता स्थिति प्रदर्शित करने की विधि
    सार्वजनिक शून्य डिस्प्लेअकाउंटस्टेटमेंट() {
        System.out.println('खाता संख्या :' + खाता संख्या);
        System.out.println('खाता धारक:' + खाताधारकनाम);
        System.out.println('वर्तमान शेष: ₹' + वर्तमान शेष);
        System.out.println(''------------------------------------------------'');
    }
}
बी. मल्टी-ऑब्जेक्ट इंस्टेंटिएशन प्रदर्शन:
पब्लिक क्लास बैंकसिमुलेशन {
    सार्वजनिक स्थैतिक शून्य मुख्य(स्ट्रिंग[] तर्क) {
        // हीप पर ऑब्जेक्ट 1 बनाना
        BankAccount acc1 = नया BankAccount(100101L, "आरव शर्मा", 15000.0);
        
        // हीप पर ऑब्जेक्ट 2 बनाना (पूरी तरह से स्वतंत्र स्थिति!)
        BankAccount acc2 = नया BankAccount(100102L, "अनन्या सेन", 25000.0);

        // संदेश पासिंग के माध्यम से संचालन करना
        acc1.deposit(5000.0);    // केवल acc1 बैलेंस को संशोधित करता है
        acc2.withdraw(8000.0);   // केवल acc2 बैलेंस को संशोधित करता है

        acc1.displayAccountStatement();
        acc2.displayAccountStatement();
    }
}

6. उन्नत क्लास डिज़ाइन: कंस्ट्रक्टर प्रकार और `this` कीवर्ड

कंस्ट्रक्टर और स्कोपिंग
ए. जावा में कंस्ट्रक्टर्स:

A Constructor एक विशेष सदस्य विधि है जिसका नाम क्लास के समान है और इसमें कोई रिटर्न प्रकार नहीं है (void भी नहीं)। यह स्वचालित रूप से तब लागू होता है जब किसी ऑब्जेक्ट को उसके इंस्टेंस वेरिएबल को आरंभ करने के लिए new का उपयोग करके इंस्टेंट किया जाता है।

  • डिफॉल्ट / गैर-पैरामीटरयुक्त कंस्ट्रक्टर: कोई तर्क नहीं लेता; डिफ़ॉल्ट या शून्य मानों के साथ इंस्टेंस वेरिएबल प्रारंभ करता है। यदि कोई कंस्ट्रक्टर नहीं लिखा गया है, तो जावा कंपाइलर स्वचालित रूप से एक खाली डिफ़ॉल्ट कंस्ट्रक्टर को संश्लेषित करता है।
  • पैरामीटरयुक्त कंस्ट्रक्टर: निर्माण के समय कस्टम शुरुआती मूल्यों के साथ अलग-अलग ऑब्जेक्ट को प्रारंभ करने के लिए पैरामीटर स्वीकार करता है।
बी. `this` कीवर्ड:

यह कीवर्ड एक अंतर्निहित संदर्भ चर है जो सीधे वर्तमान कॉलिंग ऑब्जेक्ट की ओर इशारा करता है। जब पैरामीटर नाम उदाहरण चर नामों के समान होते हैं तो यह नाम छायाकरण को हल करता है:

वर्ग पुस्तक {
    निजी स्ट्रिंग शीर्षक;
    निजी दोगुनी कीमत;

    // पैरामीटरयुक्त कंस्ट्रक्टर 'इस' का उपयोग कर रहा है
    सार्वजनिक पुस्तक(स्ट्रिंग शीर्षक, दोगुनी कीमत) {
        यह.शीर्षक = शीर्षक; // 'this.title' उदाहरण चर है; 'शीर्षक' स्थानीय पैरामीटर है
        यह.कीमत = कीमत;
    }

    सार्वजनिक शून्य डिस्प्लेबुक विवरण() {
        System.out.println('पुस्तक शीर्षक :' + यह शीर्षक);
        System.out.println('पुस्तक मूल्य: ₹' + यह.मूल्य);
    }
}

7. ऑब्जेक्ट आर्किटेक्चर में एक्सेस स्पेसिफायर और मेथड ओवरलोडिंग

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

मेथड ओवरलोडिंग एक वर्ग को सटीक समान नाम वाले कई तरीकों की अनुमति देता है लेकिन अलग-अलग पैरामीटर सूचियों (तर्कों की विभिन्न संख्या, विभिन्न डेटा प्रकार, या पैरामीटर के विभिन्न अनुक्रम) द्वारा विभेदित होता है। यह संकलन-समय बहुरूपता का उदाहरण देता है।

क्लास शेपकैलकुलेटर {
    डबल कैलकुलेट एरिया (डबल रेडियस) { रिटर्न मैथ.पीआई * रेडियस * रेडियस; }
    डबल कैलकुलेट एरिया (डबल लंबाई, डबल चौड़ाई) { रिटर्न लंबाई * चौड़ाई; }
    डबल कैलकुलेटएरिया(इंट साइड) { रिटर्न साइड * साइड; }
}

8. जावा मेमोरी में कचरा संग्रहण और ऑब्जेक्ट लाइफटाइम

कचरा संग्रहण
ए. स्वचालित मेमोरी प्रबंधन बनाम C/C++:

C++ जैसी भाषाओं में, प्रोग्रामर को malloc() और free() (या new और delete) का उपयोग करके मेमोरी को मैन्युअल रूप से आवंटित और हटा देना चाहिए। मेमोरी को खाली करना भूल जाने से भयावह मेमोरी लीक होती है, जबकि मेमोरी को समय से पहले खाली करने से खतरनाक डैंगलिंग पॉइंटर्स होती है। जावा एक स्वायत्त डेमॉन थ्रेड के माध्यम से दोनों खतरों को पूरी तरह से समाप्त कर देता है: गारबेज कलेक्टर (जीसी).

  • कोई वस्तु कचरा संग्रहण के लिए कब योग्य हो जाती है? ढेर पर एक वस्तु कचरा संग्रहण के लिए योग्य हो जाती है जैसे ही यह एप्लिकेशन में किसी भी सक्रिय संदर्भ चर द्वारा पहुंच योग्य नहीं रह जाती है (उदाहरण के लिए, जब एक संदर्भ चर null पर सेट होता है, या जब कोई वस्तु किसी विधि के अंदर स्थानीय रूप से बनाई जाती है और वह विधि निष्पादन समाप्त करती है)।
  • जीसी का अनुरोध: प्रोग्रामर विनम्रतापूर्वक सुझाव दे सकते हैं कि जेवीएम System.gc() या Runtime.getRuntime().gc() का उपयोग करके कचरा संग्रहण चलाता है, हालांकि JVM तत्काल निष्पादन की गारंटी नहीं देता है।

9. वस्तु स्थिति संशोधन सिद्धांत

स्टेट इनकैप्सुलेशन

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

सामान्य गलतियाँ एवं परीक्षक के जाल (Examiner Traps)

सामान्य भ्रम / गलत उत्तर

समानता तुलना (==) के साथ असाइनमेंट (=) को भ्रमित करना या अमान्य पहचानकर्ताओं का उपयोग करना।

सही वैज्ञानिक तथ्य

तुलना के लिए == का उपयोग करें और सत्यापित करें कि पहचानकर्ता मानक जावा नामकरण सम्मेलनों का पालन करते हैं।

सामान्य भ्रम / गलत उत्तर

स्विच-केस में ब्रेक को छोड़ना या स्कैनर में बिना उपयोग किए गए न्यूलाइन बफर को छोड़ना।

सही वैज्ञानिक तथ्य

फ़ॉल-थ्रू को रोकने के लिए हमेशा केस ब्लॉक में ब्रेक को शामिल करें और नेक्स्टलाइन () से पहले बफर को फ्लश करें।

क्लास (ऑब्जेक्ट फैक्ट्री) और हीप मेमोरी आवंटन आर्किटेक्चर

Class (Object Factory) & Heap Memory Allocation Architecture CLASS: THE OBJECT FACTORY (BLUEPRINT) class Student { // State (Instance Variables) int rollNo; String name; double marks; } // Behavior (Member Methods) • void inputDetails() • double calculateGrade() • void displayReportCard() Memory footprint: 0 Bytes in Heap (Logical entity) STACK VS HEAP RUNTIME MEMORY MODEL STACK (References) s1 (ref) addr: 0x500A s2 (ref) addr: 0x820F HEAP (Object Instances) Object 1 [0x500A]: rollNo = 101; name = "Aarav"; marks = 94.5; Object 2 [0x820F]: rollNo = 102; name = "Ananya"; marks = 98.0; CLASS = Factory/Type | OBJECT = Instance/Value | new = Heap Dynamic Memory Allocator

अध्याय का सार संक्षेप एवं 10 मुख्य निष्कर्ष

मुख्य बिंदु 1
ऑब्जेक्ट्स की त्रिपक्षीय प्रकृति: प्रत्येक ऑब्जेक्ट में राज्य (उदाहरण चर), व्यवहार (सदस्य विधियां), और एक अद्वितीय पहचान (हीप मेमोरी पता) होती है।
मुख्य बिंदु 2
क्लास के रूप में ब्लूप्रिंट: एक क्लास एक अमूर्त टेम्पलेट है; यह वेरिएबल्स के लिए शून्य हीप मेमोरी का उपभोग करता है जब तक कि किसी ऑब्जेक्ट को स्पष्ट रूप से इंस्टेंट नहीं किया जाता है।
मुख्य बिंदु 3
ऑब्जेक्ट फैक्ट्री: एक क्लास एक ऑब्जेक्ट फैक्ट्री के रूप में कार्य करता है क्योंकि यह समान संरचना को साझा करने वाले अनगिनत अलग, स्वायत्त ऑब्जेक्ट इंस्टेंस उत्पन्न कर सकता है।
मुख्य बिंदु 4
उपयोगकर्ता-परिभाषित डेटा प्रकार: एक क्लास एक कस्टम समग्र डेटा प्रकार के रूप में कार्य करता है जो प्रोग्रामर को विषम डेटा सदस्यों और संचालन को बंडल करने की अनुमति देता है।
मुख्य बिंदु 5
तीन निर्माण चरण: घोषणा (स्टैक पर संदर्भ बनाता है), इंस्टेंटिएशन (नए के माध्यम से हीप मेमोरी आवंटित करता है), इनिशियलाइज़ेशन (कन्स्ट्रक्टर को आमंत्रित करता है)।
मुख्य बिंदु 6
नया ऑपरेटर: डायनामिक मेमोरी आवंटन ऑपरेटर जो हीप पर ऑब्जेक्ट बनाता है और उसका मेमोरी एड्रेस संदर्भ लौटाता है।
मुख्य बिंदु 7
स्टैक बनाम हीप: संदर्भ चर स्टैक मेमोरी में रहते हैं, जबकि वास्तविक ऑब्जेक्ट इंस्टेंस और उनके फ़ील्ड हीप मेमोरी में रहते हैं।
मुख्य बिंदु 8
डॉट ऑपरेटर (।): वाक्यात्मक पुल का उपयोग सदस्य विधियों को लागू करने और किसी ऑब्जेक्ट के अनुमत सदस्य चर तक पहुंचने के लिए किया जाता है।
मुख्य बिंदु 9
संदेश पासिंग: ऑब्जेक्ट-ओरिएंटेड तंत्र जहां एक ऑब्जेक्ट किसी अन्य ऑब्जेक्ट को विधि आमंत्रण के माध्यम से सेवा करने का अनुरोध करता है।
मुख्य बिंदु 10
स्वतंत्र राज्य: प्रत्येक इंस्टेंटियेटेड ऑब्जेक्ट इंस्टेंस वेरिएबल्स की अपनी स्वतंत्र प्रतिलिपि बनाए रखता है; s1 को संशोधित करने से s2 प्रभावित नहीं होता है।

स्व-मूल्यांकन अभ्यास (Check Your Understanding)

मूल वैचारिक स्पष्टता की जांच के लिए नैदानिक प्रश्न। पहले स्वयं हल करें, फिर उत्तर देखें।

1
एक क्लास को "ऑब्जेक्ट फैक्ट्री" क्यों कहा जाता है?
उत्तर एवं व्याख्या देखें
उत्तर: एक क्लास को एक ऑब्जेक्ट फैक्ट्री कहा जाता है क्योंकि, एक औद्योगिक मोल्ड या फैक्ट्री स्टैम्पिंग डाई की तरह, यह एक केंद्रीय ब्लूप्रिंट के रूप में कार्य करता है जो समान संरचनात्मक विशेषताओं और विधियों को साझा करते हुए असीमित संख्या में व्यक्तिगत ऑब्जेक्ट इंस्टेंसेस का निर्माण करने में सक्षम है।
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
2
स्पष्ट करें सिंटैक्स के साथ ऑब्जेक्ट डिक्लेरेशन और ऑब्जेक्ट इंस्टेंटिएशन के बीच अंतर।
उत्तर एवं व्याख्या देखें
उत्तर: घोषणा (उदाहरण के लिए, "छात्र s1;") स्टैक पर संदर्भ चर प्रस्तुत करता है और इसे हीप मेमोरी आवंटित किए बिना एक वर्ग प्रकार के साथ जोड़ता है। इंस्टेंटिएशन (उदाहरण के लिए, "s1 = नया छात्र();") हीप पर ऑब्जेक्ट के लिए मेमोरी को भौतिक रूप से आवंटित करने और इसे प्रारंभ करने के लिए "नए" ऑपरेटर का उपयोग करता है।
ICSE कंप्यूटर एप्लिकेशन मार्किंग स्कीम
3
दो प्राथमिक घटक क्या हैं जो सॉफ़्टवेयर में किसी भी वास्तविक दुनिया की वस्तु को परिभाषित करते हैं?
उत्तर एवं व्याख्या देखें
उत्तर: 1। राज्य (विशेषताएँ, विशेषताएँ, या उदाहरण चर में संग्रहीत डेटा मान); और 2. व्यवहार (कार्य, संचालन, या सदस्य विधियों के माध्यम से कार्यान्वित कार्य)।
ICSE कंप्यूटर अनुप्रयोग अंकन योजना
4
जावा में संग्रहीत ऑब्जेक्ट संदर्भ चर और वास्तविक ऑब्जेक्ट उदाहरण किस मेमोरी सेगमेंट में संग्रहीत हैं?
उत्तर एवं व्याख्या देखें
उत्तर: ऑब्जेक्ट संदर्भ चर (जो मेमोरी पते रखते हैं) स्टैक मेमोरी में संग्रहीत होते हैं, जबकि इंस्टेंस चर वाले वास्तविक ऑब्जेक्ट इंस्टेंस को हीप में आवंटित किया जाता है मेमोरी.
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
5
जावा में डॉट ऑपरेटर (.) की क्या भूमिका है?
उत्तर एवं व्याख्या देखें
उत्तर: डॉट ऑपरेटर का उपयोग संदेश भेजने के लिए किया जाता है; यह एक बाहरी प्रोग्राम को किसी ऑब्जेक्ट के सार्वजनिक इंस्टेंस वेरिएबल्स तक पहुंचने और उसके सदस्य तरीकों (उदाहरण के लिए, "ऑब्जेक्टनाम.मेथोडनाम()") को लागू करने की अनुमति देता है।
ICSE कंप्यूटर अनुप्रयोग अंकन योजना
6
एक वर्ग को "उपयोगकर्ता-परिभाषित समग्र डेटा प्रकार" क्यों माना जाता है?
उत्तर एवं व्याख्या देखें
उत्तर: क्योंकि एक प्रोग्रामर कई विषम आदिम डेटा प्रकारों (int, डबल, char, आदि) और विधियों को एक एकल अनुकूलित समग्र प्रकार में संयोजित करके एक वर्ग को परिभाषित करता है जिसका उपयोग तब चर (ऑब्जेक्ट्स) घोषित करने के लिए किया जा सकता है।
ICSE कंप्यूटर अनुप्रयोग अंकन योजना
7
यदि एक ही वर्ग की दो वस्तुओं के सभी उदाहरण चर में समान मान हैं, तो क्या वे समान हैं? स्पष्ट करें.
उत्तर एवं व्याख्या देखें
उत्तर: नहीं. जबकि उनकी स्थिति समान है, उनकी पहचान अलग रहती है क्योंकि वे हीप पर दो अलग, अलग मेमोरी स्थानों पर कब्जा कर लेते हैं।
ICSE कंप्यूटर एप्लीकेशन मार्किंग स्कीम
8
क्या होता है जब हीप मेमोरी में कोई ऑब्जेक्ट अब किसी भी स्टैक संदर्भ चर द्वारा संदर्भित नहीं किया जाता है?
उत्तर एवं व्याख्या देखें
उत्तर: यह स्वचालित कचरा संग्रहण के लिए पात्र हो जाता है। जावा का अंतर्निहित गारबेज कलेक्टर समय-समय पर ऐसी अनाथ वस्तुओं की पहचान करता है और मेमोरी लीक को रोकने के लिए उनकी ढेर मेमोरी को हटा देता है।
ICSE कंप्यूटर एप्लिकेशन मार्किंग स्कीम
अध्याय का अध्ययन पूर्ण हुआ?
अभ्यास के लिए तैयार?

ऑनलाइन CBT टेस्ट देकर तैयारी का मूल्यांकन करें

झारखण्ड बोर्ड परीक्षा पैटर्न पर आधारित बहुविकल्पीय प्रश्नों का ऑनलाइन टेस्ट दें। तुरंत परिणाम, समय विश्लेषण और प्रत्येक प्रश्न का विस्तृत हल प्राप्त करें।

AI अध्ययन मित्र

त्वरित शंका समाधान

वस्तुओं और वर्गों की प्राथमिक अवधारणा (Elementary Concept of Objects and Classes) में कोई संदेह या प्रश्न है? हमारे AI अध्ययन मित्र से तुरंत समझें।