2008-10-25 16 views
20

क्या अमूर्त वर्गों को आवृत्ति चर परिभाषित करने के लिए यह अच्छा अभ्यास है?जावा - सार वर्ग रखने के लिए सार वर्ग?

public abstract class ExternalScript extends Script { 

    String source; 

    public abstract void setSource(String file); 

    public abstract String getSource(); 
} 

उप वर्ग, ExternalJavaScript.class, तो स्वचालित रूप से स्रोत चर मिलेगा लेकिन मुझे लगता है यह आसान है कोड को पढ़ने के लिए है, तो सभी उप वर्गों खुद को स्रोत को परिभाषित विरासत से करने के बजाय,।

आपकी सलाह क्या है?

/एडम

उत्तर

29

मुझे लगता है कि ऐसा कुछ बेहतर होगा, क्योंकि आप एक चर जोड़ रहे हैं, तो एक्सेस को प्रतिबंधित क्यों न करें और इसे क्लीनर क्यों न करें? आपके गेटटर/सेटर्स को टिन पर जो कुछ कहना है वह करना चाहिए।

public abstract class ExternalScript extends Script { 

private String source; 

public void setSource(String file) { 
    source = file; 
} 

public String getSource() { 
    return source; 
} 

सवाल को यह वापस लाना, क्या तुमने कभी जहां गेटर/सेटर कोड है जब यह पढ़ने को देखकर परेशान हो? यदि वे सभी मिलते और सेटिंग करते हैं तो आपको कोड पढ़ने के दौरान 'क्या करता है' के बारे में चिंता करने की आवश्यकता नहीं है।

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

हमेशा सोचें कि आपकी कक्षा वास्तव में एक अलग बात है या नहीं, और यह तय करने में मदद करनी चाहिए कि आपको और कुछ चाहिए या नहीं।

6

ज़रूर .. क्यों नहीं?
सार आधार वर्ग भंडारण और रखरखाव की दक्षता के लिए एक ही स्थान पर 2 या अधिक कक्षाओं के लिए आम तौर पर घर व्यवहार और डेटा के लिए एक सुविधा है। यह एक कार्यान्वयन विस्तार है।
देखभाल करें हालांकि आप एक सार आधार वर्ग का उपयोग नहीं कर रहे हैं जहां आपको इंटरफ़ेस का उपयोग करना चाहिए। Interface vs Base class

1

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

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