2015-10-26 12 views
10

मेरे पास कोई जावा अनुभव नहीं है और सी पृष्ठभूमि है।मुझे समर्पित कक्षा में मुख्य() क्यों रखा जाना चाहिए?

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

मैंने इन दो अलग-अलग तरीकों को लिखा है, और दोनों काम करने लगते हैं। लेकिन मैं दूसरी तरफ की कमियों को समझ नहीं पा रहा हूं।

  1. यहां, मैं डेटा प्रकार के लिए एक वर्ग बनाता हूं, इसका एक उदाहरण बना देता हूं, और उसके बाद संचालन करता हूं। मैंने इसे इंटरनेट पर ट्यूटोरियल में इस्तेमाल किया गया डिज़ाइन पाया है।

    public class DesignOne { 
        public static void main(String[] args) { 
         MyDataType obj = new MyDataType(3,4); 
         System.out.println(obj.sum()); 
        } 
    } 
    
    class MyDataType { 
        int i; 
        int j; 
    
        MyDataType(int i, int j) { 
         this.i = i; 
         this.j = j; 
        } 
    
        int sum() { 
         return this.i + this.j; 
        } 
    } 
    
  2. यहाँ, मैं एक ही कक्षा जहां मैं अपने ड्राइवर कार्य हो में वर्ग का एक उदाहरण बना सकते हैं। sum जैसे ऑपरेशंस को कक्षा के सदस्यों के रूप में भी परिभाषित किया जाता है। असल में, केवल एक वर्ग है।

    public class DesignTwo { 
        int i; 
        int j; 
    
        DesignTwo(int i, int j) { 
         this.i = i; 
         this.j = j; 
        } 
    
        int sum() { 
         return this.i + this.j; 
        } 
    
        public static void main(String[] args) { 
         DesignTwo obj = new DesignTwo(3,4); 
         System.out.println("sum == "+obj.sum()); 
        } 
    } 
    

DesignTwo की कमियों क्या हैं, और क्यों DesignOne पसंद किया जाता है?

+4

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

उत्तर

10

यह अनिवार्य रूप से Abstraction तक उबाल जाता है। आपको प्रत्येक वर्ग को एक भूमिका देने की कोशिश करनी चाहिए। यहाँ, आप दो भूमिकाएं भरे जाने की आवश्यकता है:

  1. लोड एक वस्तु और प्रदर्शित यह
  2. एक वस्तु का प्रतिनिधित्व करते हैं

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

+2

साथ ही, डेटा-केवल ऑब्जेक्ट के रूप में MyDataType को भविष्य में फायदे हैं यदि आप डेटा को दीर्घकालिक बने रखना चाहते हैं। (Https://en.wikipedia.org/wiki/Separation_of_concerns भी देखें) – Gus

10

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

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