2009-02-04 14 views
26

में "बेस" का उपयोग करना क्या कक्षा के नाम में 'बेस' शब्द का उपयोग करना स्वीकार्य है जो विरासत के पेड़ के नीचे है?कक्षा नाम

मुझे हमेशा यह एक पुलिस-आउट का थोड़ा सा पता चला है, बस सोच रहा है कि कोई मेरे साथ सहमत है या नहीं।

उदाहरण के लिए, यदि मैं MyClassA और MyClassB से कुछ सामान्य तत्वों को एक सामान्य बेस क्लास में दोबारा कर रहा हूं, तो मैं एक MyBaseClass बनाने का लुत्फ उठाउंगा जिसमें से दो उत्तराधिकारी होंगे।

लेकिन अगर मुझे कभी भी MyBaseClass को दोबारा करने की आवश्यकता है तो क्या होगा? MyBaseBaseClass? अब यह मूर्खतापूर्ण है।

मुझे पता है कि रॉकी लोत्का अपने सीएसएलए ढांचे के साथ कोई फर्क नहीं पड़ता है, लेकिन मैं हमेशा प्रोग्रामिंग में 'definites' के बारे में असहज हूं।

विचार?

मुझे क्यों स्पष्टीकरण दें मैं इसके बारे में भी चिंता कर रहा हूं।

मेरे पास दो नामस्थान हैं - MySpecificNamespace और MyCommonNamespace। MyNamespace MyCommonNamespace का उपयोग करता है, जैसा कि आप उम्मीद कर सकते हैं।

अब, समस्या के संदर्भ का वर्णन करने के लिए जहां भी संभव हो, मैं नामस्थान का अधिकतम उपयोग करना चाहता हूं, और कक्षा के नाम में संदर्भ जोड़ने से बचें। तो, उदाहरण के लिए, मान लें कि मेरे पास माईनेस्पेस में एक कक्षा है जो MyCommonNamespace में से एक से निकलती है।

विकल्प नाम के लिए एक

मैं सकता है कॉल इस

MySpecificClass: MyClass 
{ 
} 

लेकिन तब मैं जोड़ रहा 'विशिष्ट' (संदर्भ) - जो अनावश्यक है यह पहले से ही MySpecificNamespace में है के रूप में।

विकल्प बी

MyClass: MyCommonNamespace.MyClass 
{ 
} 

आप देख सकते हैं कि हम यहाँ भ्रमित हो सकता है, है ना?

विकल्प सी

एक मुझे लगता है कि गड़बड़ है:

MyClass: MyBaseClass 
{ 
} 
+0

अच्छा सवाल। धन्यवाद – frameworkninja

+0

प्रश्न के लिए धन्यवाद। Google में दर्ज एक प्रश्न पर दूसरी प्रविष्टि के रूप में आया है, यह देखना चाहते हैं कि किसी ने एक ही चीज़ से पूछा था, जैसा कि सिर्फ कक्षाओं का नाम बदल रहा था और खुद को "युक" बना रहा था! :) –

+0

यह भी देखें http://stackoverflow.com/questions/429470/naming-conventions-for-abstract-classes – nawfal

उत्तर

0

मुझे लगता है कि यह शायद बचा जाना चाहिए जहां संभव हो एक पहचानकर्ता वास्तव में वर्णन करता है कि यह क्या है के पक्ष में!

यह प्रश्न उत्तर देना मुश्किल है क्योंकि यह सार है। उदाहरण के लिए, मैं MyClassA और MyClassB, "MyClass" के आधार पर कॉल करने पर विचार कर सकता हूं।

+0

आपकी प्रतिक्रिया के लिए धन्यवाद - उम्मीद है कि मैंने प्रश्न को थोड़ा सा स्पष्ट करने में मदद की है! – Duncan

3

मुझे लगता है कि यह इस सवाल को विकी-फ्यूइंग के लायक है।

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

8

मैं उद्धृत किए गए बिल्कुल रिफैक्टरिंग कारण के लिए "नहीं" के साथ पक्ष करता हूं।

एक वर्ग का नाम तर्कसंगत रूप से प्रतिनिधित्व करने के बाद किया जाना चाहिए, और ऑब्जेक्ट क्लास वास्तव में वास्तव में आधार के अलावा कुछ भी नहीं होना चाहिए। FTW :) तत्वमीमांसा


पुन: विकल्प बी, वहाँ के बारे में

namespace MySpecificNamespace 
{ 
    MyClass: MyCommonNamespace.MyClass 
    { 
    } 
} 
9

मैं आधार वर्ग केवल अगर यह तकनीकी नजरिए से मौजूद है, उनके नाम के एक बेस प्रत्यय जोड़ने के लिए करते हैं भ्रामक कुछ भी नहीं (है कुछ कोड साझा करने के लिए), और वास्तव में किसी भी प्रयोग योग्य वर्ग का गठन नहीं करता है (इसलिए ये सभी वर्ग सार हैं)। हालांकि ये दुर्लभ मामले हैं, और हेल्पर कक्षाओं के रूप में टालना चाहिए।

2

मैं भी शिविर के साथ नहीं हूं ... आज वहां एक आधार रखें और 6 महीनों में कोई आपके कोड कोड में MyDerivedClass क्लास को घुमाएगा, जबकि आप नहीं देख रहे हैं।

3

मैं भी सुझाव है कि नहीं, लेकिन पत्थर में डाली नहीं ...

OO मंत्र के बाद, अपने नामकरण प्रणाली सबसे अच्छा अंतर्निहित ऑब्जेक्ट कोड encapsulating जा करने के लिए माना जाता है प्रतिनिधित्व करना चाहिए। वहां वास्तव में पसंद की प्रोग्रामिंग भाषा के वास्तविक वाक्य रचनात्मक मेकअप से संबंधित कोई 'मेटा भाषा' नहीं होनी चाहिए।

यह कहा गया कि, यदि आपका ऑब्जेक्ट वास्तव में अमूर्त है और आप वास्तव में इसे किसी भी समय बदलते नहीं देखते हैं, तो एक तर्क है कि 'बेस' जोड़ने से सामान्य पठनीयता में मदद मिलती है।

अधिकांश चीजों के साथ, कोई कंबल सही और गलत जवाब नहीं है - यह आपके कोडबेस के समग्र लेआउट पर निर्भर करता है, यह विशिष्ट कोड क्या प्रतिनिधित्व करता है और आपके घर में शैली क्या है। बस सुसंगत होने की कोशिश करें।

आधार कहीं और इस्तेमाल किया जाता है?

0

"सार" उपसर्ग शायद?

+0

लगभग निश्चित रूप से, लेकिन नेमस्पेस समस्या – annakata

1

जावा में मैं एक अमूर्त कक्षा FooBase में एक इंटरफेस फू का मूल कार्यान्वयन प्रदान करता हूं। मुझे लगता है कि यह बिल्कुल ठीक है, और इंटरफेस से कनेक्शन बहुत स्पष्ट और नियमित बनाता है।

इंटरफ़ेस के बिना मैं अमूर्त बेस क्लास फू को कॉल करूंगा।

0

मैं आम तौर पर इंटरफ़ेस के लिए IFoo और कंकाल कार्यान्वयन के लिए सारफू के साथ जाता हूं, जो .NET और Java सम्मेलनों का मिश्रण है।

+0

हमम हल नहीं करता है, मुझे नहीं लगता कि बेस के साथ सार और पोस्ट-फ़िक्सिंग के साथ पूर्व-फ़िक्सिंग के बीच अंतर क्या है मुझे डर है! – Duncan

1

मैं मानता हूं, सारफू एक सभ्य समाधान है। मैं ऐसे नाम चुनने की कोशिश करता हूं जिन्हें अतिरिक्त विशेषण की आवश्यकता नहीं है। मैं आधार का उपयोग करने से दूर शर्मिंदा होगा।

5

कक्षाएं जिनके माता-पिता वर्गों के समान नाम हैं, मुझे कोई अंत नहीं है। जावा में java.sql.Date java.util.Date को बढ़ाता है। यह बहुत परेशान है क्योंकि आपको उस सटीक वर्ग को निर्दिष्ट करना है जिसे आप आयात करना चाहते हैं या फिर कक्षा का नाम पूरी तरह से निर्दिष्ट करें (पैकेज/नामस्थान सहित)।

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

उदाहरण के लिए, जावा में, हमारे पास कनेक्शन इंटरफ़ेस (डीबी कनेक्शन के लिए) है। इसे कनेक्शन कहा जाता है, न कि आईकनेक्शन। आप इसे इस तरह का उपयोग करें:

Connection con = getConnectionFromSomewhere(); 

आप एक JDBC ड्राइवर बनाने और कनेक्शन लागू करने की आवश्यकता है, तो आप एक ConnectionBase या AbstractConnection जो अपने विशेष कनेक्शन के कार्यान्वयन विस्तार की निचली परत है हो सकता था। आपके पास

abstract class AbstractConnection implements Connection 

class OracleConnection extends AbstractConnection 

या ऐसा कुछ हो सकता है। हालांकि, आपके कोड के ग्राहक कभी भी सार कनेक्शन नहीं देखते हैं और न ही वे ओरेकल कनेक्शन देखते हैं, वे केवल कनेक्शन देखते हैं।

इसलिए, आम तौर पर, कक्षाएं जो आम तौर पर उपयोगी होती हैं उन्हें नामित करने के बाद नामित किया जाना चाहिए, जबकि कोड रखरखाव/संगठन के लिए मददगार वर्गों का नाम उनके नाम पर रखा जा सकता है।

* ps मुझे नामकरण इंटरफ़ेस नाम से नफरत है। क्या लोग सी के साथ अपने सभी वर्गों का नाम देते हैं? यह 200 9 है! आपका आईडीई आपको बता सकता है कि किस प्रकार की ऑब्जेक्ट है, अजीब मामले में जब यह एक इंटरफ़ेस या कक्षा है तो यह भी महत्वपूर्ण है।

4

"आपके सभी बेस क्लास हमारे हैं।"

मैं एक अपवाद के साथ एक निश्चित संख्या के साथ पक्ष। यदि आप सैन्य प्रतिष्ठानों या बेसबॉल स्टेडियमों का प्रबंधन करने के लिए एक ऐप लिख रहे हैं, तो इसके लिए जाएं।

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