"हाय, अमीगो। आज मैं आपको एक विशिष्ट जावा प्रोग्राम के बारे में बताऊँगा। बड़ी खबर यह है कि जावा में लिखे गए प्रत्येक प्रोग्राम में क्लास और ऑब्जेक्ट होते हैं।"

"मुझे पहले से ही पता है कि कौन सी कक्षाएं हैं। वस्तुएं क्या हैं?"

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

"ठीक इसी तरह यह जावा के साथ काम करता है।"

" जावा प्रोग्रामर डिज़ाइन इंजीनियरों की तरह हैं, ब्लूप्रिंट बनाने के बजाय, वे कक्षाएं लिखते हैं। जहाज के हिस्से ब्लूप्रिंट के आधार पर बनाए जाते हैं, जबकि ऑब्जेक्ट कक्षाओं के आधार पर बनाए जाते हैं। "

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

"ठीक है, मुझे आपका जहाज सादृश्य मिल गया है। क्या आप मुझे यह सुनिश्चित करने में मदद करने के लिए कुछ और दे सकते हैं कि मैं समझ रहा हूँ कि आप क्या कह रहे हैं?"

"ले लो, उदाहरण के लिए, मधुमक्खियों ..."

"नहीं, इसे खरोंचो। मधुमक्खियों के साथ मेरा अनुभव खराब रहा है। चलो चींटियों को लेते हैं।"

"एक चींटी कॉलोनी इस बात का एक अच्छा उदाहरण है कि वस्तुएं कैसे बातचीत करती हैं। किसी भी चींटी कॉलोनी में तीन वर्ग होते हैं: रानी, ​​​​सैनिक और कार्यकर्ता चींटियां। प्रत्येक वर्ग में चींटियों की संख्या अलग-अलग होती है। आमतौर पर एक कॉलोनी में केवल एक रानी, ​​​​दर्जनों सैनिक होते हैं। , और सैकड़ों कार्यकर्ता। तीन वर्ग, सैकड़ों वस्तुएँ। चींटियाँ सख्त नियमों का पालन करती हैं क्योंकि वे अपनी कक्षा में चींटियों और अन्य वर्गों से संबंधित चींटियों के साथ बातचीत करती हैं।

"यह एक आदर्श उदाहरण है। एक विशिष्ट कार्यक्रम ठीक उसी तरह काम करता है। एक मुख्य वस्तु है जो सभी वर्गों में वस्तुओं का निर्माण करती है। वस्तुएं एक दूसरे के साथ और बाहरी दुनिया के साथ बातचीत करती हैं। वस्तुओं का व्यवहार आंतरिक रूप से कठोर (क्रमादेशित) होता है। "

"मुझे यह बिल्कुल समझ में नहीं आया। मेरा मतलब है, मुझे यह बिल्कुल नहीं मिला।"

"ये दो स्पष्टीकरण एक ही सिक्के के दो पहलू हैं। सच्चाई कहीं बीच में है। पहला उदाहरण (ब्लूप्रिंट और जहाजों के बारे में) हमें एक वर्ग और उसकी वस्तुओं के बीच संबंध दिखाता है। यह एक शक्तिशाली सादृश्य है। चींटी कॉलोनी सादृश्य प्रदर्शित करता है। वस्तुओं के बीच संबंध, जो कक्षाओं द्वारा वर्णित हैं और केवल एक प्रोग्राम चलने के दौरान ही मौजूद हैं।"

"आपका मतलब है कि हमें प्रोग्राम में उपयोग की जाने वाली सभी वस्तुओं के लिए कक्षाएं लिखने की ज़रूरत है, और फिर उनकी बातचीत का वर्णन करें?"

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

"यह थोड़ा फजी है, लेकिन मुझे लगता है कि मैं इसे लगभग प्राप्त कर चुका हूं।"

"हम कैसे जानते हैं कि कौन से तरीकों को कॉल करना है और कौन सा डेटा पास करना है?"

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

"हुह! अच्छा लगता है।"

"यहां। फाइलों की प्रतिलिपि बनाने वाले वर्ग के कोड पर एक नज़र डालें:"

c:\data.txt को c:\result.txt में कॉपी करें
package com.codegym.lesson2;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileCopy
{
    public static void main(String[] args) throws IOException
    {
        FileInputStream fileInputStream = new FileInputStream("c:\data.txt");
        FileOutputStream fileOutputStream = new FileOutputStream("c:\result.txt");

        while (fileInputStream.available() > 0)
        {
            int data = fileInputStream.read();
            fileOutputStream.write(data);
        }

        fileInputStream.close();
        fileOutputStream.close();
    }
}

"मैं यह नहीं कह सकता कि मुझे यह सब मिल गया है, लेकिन मुझे लगता है कि मुझे इसका सार मिल गया है।"

"बढ़िया। अगली बार फिर मिलते हैं।"

"मैं तो लगभग भूल ही गया था। यह रहा डिएगो से आपका काम।"