ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में मुख्य की जिम्मेदारियां क्या हैं?


10

मैं ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग में नया हूं और मुझे समझ नहीं आ रहा है कि मुख्य का उद्देश्य क्या है।

हां, मैंने पढ़ा है कि यह कार्यक्रम का "प्रवेश बिंदु" है लेकिन जो मुझे समझ नहीं आ रहा है वह मुख्य में क्या होना चाहिए? और इसकी जिम्मेदारियां क्या हैं?

ऐसा हो सकता है कि मुख्य में लिखी गई कोई चीज़ किसी अन्य ऑब्जेक्ट में एनकैप्सुलेट की जा सकती है, लेकिन आपको इस दृष्टिकोण का कितना उपयोग करना चाहिए?

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

मेरा प्रश्न इस तथ्य से उत्पन्न हुआ कि इंटरफ़ेस को किसी अन्य ऑब्जेक्ट में समझाया जा सकता है और मुख्य को यह जिम्मेदारी नहीं दी जा सकती है।

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

    System.out.println("What type of animal do you want to create? \n dog cat");
    String type = input.nextLine();
    if ( Objects.equals(type, "dog")){
        System.out.println("Enter the animal's age: ");
        int age = input.nextInt(); // Scans the next token of the input as an int.
        System.out.println("Enter the animal's name: ");
        String name = input.next();
        Dog first = new Dog(name, age);
    }
    else if ( Objects.equals(type, "cat")) {
        System.out.println("Enter the animal's age: ");
        int age = input.nextInt(); // Scans the next token of the input as an int.
        System.out.println("Enter the animal's name: ");
        String name = input.next();
        Cat first = new Cat(name, age);
    }

    else{
        System.out.println("Error: the specified type does not exist.");
    }
    System.out.println("The number of animals is:" + numberOfAnimals);
}

2
mainसमारोह OOP से एक अवधारणा नहीं है।
एंड्रेस एफ।

जवाबों:


10

सबसे पहले, आपका उदाहरण ऑब्जेक्ट-ओरिएंटेड प्रोग्राम नहीं है। यह एक प्रक्रियात्मक कार्यक्रम है जो वस्तुओं में डेटा को संग्रहीत करने के लिए होता है, क्योंकि यह वह उपकरण है जो आपकी भाषा (जावा?) संरचित डेटा प्रदान करता है।

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

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

एक साधारण उदाहरण के रूप में, एक वेब-एप्लिकेशन पर विचार करें जो एक डेटाबेस के ऊपर बनाया गया है। इस एप्लिकेशन को कई तरीकों से वस्तुओं में तोड़ा जा सकता है, लेकिन यहां उनमें से एक है: एक Networkingऑब्जेक्ट जो कनेक्शन स्वीकार करता है, HTTP अनुरोध को पार्स करता है, और एक उपयुक्त Controllerऑब्जेक्ट को भेजता है , जो एक Databaseऑब्जेक्ट के साथ इंटरैक्ट करता है और प्रतिक्रिया उत्पन्न करता है (यदि आप चाहें तो Viewप्रत्येक नियंत्रक के साथ एक या एक से अधिक वस्तुओं को जोड़ना , ऐसा करने के लिए स्वतंत्र महसूस करना)। Threadpoolनिष्पादन की अलग-अलग धाराएँ प्रदान करने के लिए आप एक वस्तु भी जोड़ सकते हैं ।

mainइस एप्लिकेशन की भूमिका निम्नलिखित के लिए हो सकती है:

  1. Databaseवस्तु बनाएँ
  2. सभी Controllerऑब्जेक्ट बनाएं , और उन्हें Databaseऑब्जेक्ट के साथ जोड़ दें
  3. Networkऑब्जेक्ट बनाएँ , और सभी Controllerऑब्जेक्ट्स को इसके साथ संबद्ध करें ।
  4. Networkऑब्जेक्ट रनिंग शुरू करें (जिसमें Threadpoolइसे बनाना और वायरिंग करना भी शामिल हो सकता है Network)।

इन सेटअप चरणों को स्पष्ट रूप से निर्दिष्ट किया जा सकता है main, या उन्हें किसी अन्य ऑब्जेक्ट द्वारा नियंत्रित किया जा सकता है। उदाहरण के लिए, एक सामान्य स्प्रिंग एप्लिकेशन में, जो भी mainफ़ंक्शन करता है वह एप्लिकेशन संदर्भ (एक एकल ऑब्जेक्ट) बनाता है। यह उस एप्लिकेशन संदर्भ के लिए कॉन्फ़िगरेशन में उल्लिखित सभी ऑब्जेक्ट्स के निर्माण और वायरिंग को ट्रिगर करता है।


1
एक ऐसी भाषा के उदाहरण के लिए समाचारपत्र देखें जो OO को इतना गंभीर लेती है कि mainविधि जैसी कोई चीज भी मौजूद नहीं हो सकती है।
जोर्ग डब्ल्यू मित्तग

1
अच्छा जवाब है, लेकिन अगर मैं आप होते, तो मैं डिपेंडेंसी इंजेक्शन का भी उल्लेख करता।
आर्सेनी मूरज़ेंको

मैं देखता हूं कि मेरे कोड के बारे में आपका क्या मतलब है जो वस्तु उन्मुख नहीं है। मैंने ध्यान नहीं दिया, लेकिन वास्तव में, मेरे द्वारा बनाई गई वस्तुओं का कोई व्यवहार नहीं है। इसे "अधिक OO" बनाने के लिए एक विचार कुछ अन्य वस्तुओं का निर्माण कर सकता है जो मेरे पास पहले से मौजूद "उपयोग" हैं, हालांकि, क्या बिना तरीकों के सभी ऑब्जेक्ट पर नहीं होना बेहतर होगा?
एलिया

@ ईलिया - नहीं, यह बेहतर नहीं होगा। वहाँ संरचित डेटा टाइप किया गया है और नाम दिया गया है (बनाम सिर्फ इसे डंपिंग में Map)। लेकिन जावा केवल ऐसा करने का एक तरीका प्रदान करता है (बनाम सी ++, जो संरचना और वर्गों के बीच अंतर करता है)। इसलिए व्यवहार के बिना कक्षाओं को परिभाषित करें, क्योंकि इससे आपके कार्यक्रम को समझने में आसानी होती है, लेकिन पहचानें कि ऐसा करने से आपका कार्यक्रम "ऑब्जेक्ट-ओरिएंटेड" नहीं होता है।
kdgregory

1

अच्छा वह निर्भर करता है। इसे दो चरम सीमाओं पर ले जाएं:

  1. अपने द्वारा सभी कोड लाइन को लाइन में रखें main। यह अच्छी तरह से संकलित और चलेगा। लेकिन एक मानव के लिए, कोड पचने योग्य नहीं होगा।
  2. बस एक ही फ़ंक्शन को इसमें रखें mainऔर कॉल करें doWhatNeedsToBeDoneऔर अंततः इस तरह से इस रूटीन को जारी रखें। अब आपके पास बहुत साफ-सुथरा mainलेकिन निश्चित रूप से, आपको वह नहीं करना है जो करने की आवश्यकता है।

तो, सच्चाई कहीं न कहीं बीच में है। mainएक पेज बनाने की कोशिश करें , ताकि किसी को यह मिल सके कि मुख्य निर्देश क्या हैं जिन्हें करने की आवश्यकता है। सही सीमा प्राप्त करना केवल अनुभव का विषय है।

उपरोक्त एक सामान्य नियम है और OO के साथ-साथ कार्यात्मक प्रोग्रामिंग पर लागू होता है।


1

स्थिर मुख्य विधि गैर-वस्तु उन्मुख दुनिया से वस्तु उन्मुख दुनिया में संक्रमण के रूप में मौजूद है। यह 80 के दशक में कम से कम C ++ के बाद से किया गया है।

स्थैतिक तरीके अनिवार्य रूप से गैर-वस्तु उन्मुख तरीके हैं: वे प्रक्रियात्मक तरीके हो सकते हैं; वे कार्यात्मक तरीके हो सकते हैं। स्थिर तरीकों की धारणा अनिवार्य रूप से अन्य प्रोग्रामिंग प्रतिमानों के लिए ओओपी से बच रही है।

जावा, सी #, और सी ++ सभी अपनी मुख्य प्रोग्रामिंग भाषा में पारंपरिक सी-शैली के मुख्य से एक संक्रमण के रूप में स्थैतिक मुख्य का उपयोग करते हैं, जिसमें से आप अब वसीयत में वस्तुओं (या नहीं) का उपयोग करना चुन सकते हैं।

इन भाषाओं को एक स्थैतिक मुख्य के बजाय एक मौलिक उदाहरण ऑब्जेक्ट की आवश्यकता हो सकती है, लेकिन इसके बजाय स्थैतिक मुख्य दृष्टिकोण को चुना है। इंस्टेंस एप्रोच विकल्प का उपयोग करते हुए, mainक्लास क्लास का एक उपवर्ग होगा thread, और भाषा रनटाइम क्लास की एक प्रारंभिक ऑब्जेक्ट आवृत्ति को जोड़ mainदेगा और फिर इसकी runआवृत्ति विधि को लागू करेगा , जिस तरह से अतिरिक्त थ्रेड्स लॉन्च / निर्मित किए जाते हैं।

लेकिन यह ऐतिहासिक रूप से इसके बजाय दूसरे तरीके से किया गया है: भाग में, ये भाषाएं केवल सूट का पालन कर रही हैं, और भाग में, क्योंकि थ्रेडिंग उन दिनों में प्राथमिकता नहीं थी, इसलिए वे सरल स्थिर दृष्टिकोण का उपयोग करते थे।

इसके अलावा, स्थैतिक मुख्य दृष्टिकोण "सरल" है जिसमें आपको उपवर्ग का उपयोग नहीं करना पड़ता है, इसलिए तुच्छ ट्यूटोरियल कार्यक्रम जैसे hello worldकुछ अर्थों में सरल होते हैं (फिर भी वे अपेक्षाकृत अकथनीय का उपयोग करते हैं static, जो किसी को समझाने के लिए कठिन है जब आप पहले OOP सिखाने की कोशिश कर रहा है।)


-1

कार्यक्रम को चलाने के लिए मुख्य () विधि का उपयोग किया जाता है

जवाबदेही - एक बार जब आप अपना कार्यक्रम चलाना शुरू कर देते हैं, तो मुख्य () विधि आपके कार्यक्रम को चलाने के लिए अन्य तरीकों को बुलाती है।

यह एक सरल उत्तर है जो मुझे यह समझने में मदद करता है कि मुख्य () विधि की जिम्मेदारी क्या है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.