मान लीजिए कि मेरा नाम एक अमूर्त वर्ग है Task
।
क्या कोई मानक या सम्मेलन है जो यह सुझाएगा कि मुझे इसके AbstractTask
बजाय नाम देना चाहिए ?
मान लीजिए कि मेरा नाम एक अमूर्त वर्ग है Task
।
क्या कोई मानक या सम्मेलन है जो यह सुझाएगा कि मुझे इसके AbstractTask
बजाय नाम देना चाहिए ?
जवाबों:
बलोच के प्रभावी जावा (आइटम 18) के अनुसार सार उपसर्ग एक विशेष मामले में उपयोग किया जाने वाला एक सम्मेलन है।
आप प्रत्येक nontrivial इंटरफ़ेस के साथ जाने के लिए एक अमूर्त कंकाल कार्यान्वयन वर्ग प्रदान करके इंटरफेस और अमूर्त वर्गों के गुणों को जोड़ सकते हैं। ... कन्वेंशन द्वारा, कंकाल कार्यान्वयन को AbstractInterface कहा जाता है, जहां इंटरफ़ेस उस इंटरफ़ेस का नाम है जिसे वे लागू करते हैं।
लेकिन बलोच यह भी बताते हैं कि स्केलेटलइंटरफेस नाम का अर्थ समझ में आया होगा, लेकिन यह निष्कर्ष निकलता है
अमूर्त सम्मेलन अब दृढ़ता से स्थापित है।
जैसा कि अन्य उत्तरों ने बताया है, सामान्य तौर पर सभी अमूर्त वर्गों के लिए इस नामकरण सम्मेलन को लागू करने का कोई कारण नहीं है।
कोई सम्मेलन नहीं है। यह सब कुछ है जो आपको डेवलपर की मदद करेगा, तेजी से और बेहतर कोड, और दूसरों को आपके कोड को समझने में मदद करेगा।
उन लोगों से पूछें जो कोड को देख रहे हैं और बनाए रखेंगे। बल्कि वे क्या देखेंगे? यह उन पर क्या आसान बना देगा? फिर इसका नाम इस आधार पर रखें कि वे क्या चाहते हैं।
एक अन्य नोट पर, जावा प्रोग्रामिंग लैंग्वेज के लिए कोड कन्वेंशन: 9. नामकरण कन्वेंशन कोई आवश्यकता नहीं बताता है:
वर्ग के नाम संज्ञाएं होनी चाहिए, मिश्रित मामले में प्रत्येक आंतरिक शब्द के पहले अक्षर के साथ पूंजीकृत। अपने वर्ग के नाम को सरल और वर्णनात्मक रखने का प्रयास करें। संपूर्ण शब्दों से बचें, समरूपता और संक्षिप्तताओं से बचें (जब तक कि संक्षिप्त रूप लंबे रूप से अधिक व्यापक रूप से उपयोग नहीं किया जाता है, जैसे URL या HTML)।
नहीं, अगर यह अमूर्त है, तो Intellisense तुच्छ रूप से मुझे बताएगा, इसलिए आप यहाँ DRY का उल्लंघन कर रहे हैं।
abstract
एक वर्ग के नाम को जोड़ना DRY का उल्लंघन नहीं करता है, और हर कोई अंतरंगता का उपयोग नहीं करता है। उदाहरण के लिए, यदि आप एक वेब पेज पर कोड पढ़ रहे हैं, या यदि यह एक पैच का हिस्सा है जिसे आप एक सादे टेक्स्ट एडिटर या बाहरी अंतर टूल में देख रहे हैं तो आप क्या करते हैं?
abstract class AbstractName
? स्पष्ट रूप से दो बार "सार" है। और अगर आप Intellisense का उपयोग नहीं कर रहे हैं, तो यह आपकी समस्या है, बाकी सभी लोग कोड देखने के लिए समझदार टूल का उपयोग करते हैं।
यह कुछ हद तक प्राथमिकता का विषय है (लेकिन सीमावर्ती बुरे अभ्यास), लेकिन अधिकांश लोग कक्षा के नाम पर क्वालीफायर का हिस्सा देखना पसंद नहीं करते हैं।
अधिकांश IDE की जानकारी वैसे भी आपको आसानी से उपलब्ध हो जाएगी, इसलिए इसे नाम में रखना आवश्यक नहीं है, और इसे केवल अप्रचलित करने के लिए क्लीनर होगा। यह वैरिएबल के नामकरण की याद दिलाता है, और यह निश्चित रूप से अब बुरा दिन माना जाता है। मैं बस इसे फोन करने की सलाह देता हूं Task
।
.NET में, अमूर्त आधार वर्ग को निरूपित करने के लिए एक प्रत्यय के रूप में "आधार" का उपयोग अक्सर देखा जाता है। मैं अन्य उत्तरों के लिए टाल दूंगा कि क्या यह जावा में सामान्य अभ्यास है।
मेरी राय में, एक इकाई के नाम को इसके प्रकार की संरचना के बारे में जानकारी नहीं दी जानी चाहिए, लेकिन इसके शब्दार्थ के बारे में। तो यह समझ में नहीं आता कि अगर एब्सट्रैक्शन इसके रनटाइम लक्ष्य का हिस्सा नहीं है, तो "एब्सट्रैक्टिंग" के रूप में अपनी कक्षा को परिभाषित करें। यह प्रोग्रामर के लिए एक बेस एब्सट्रेक्ट क्लास है, और नाम में परिलक्षित होने की जरूरत नहीं है।
हालांकि, अगर किसी अमूर्त कारखाने के कार्यान्वयन को एब्सट्रैक्ट फैक्ट्री कहना सही है, क्योंकि यह वर्ग के इरादे से संबंधित है।
सामान्य तौर पर, नामकरण सम्मेलन के पक्ष में जो आपकी कक्षा के लक्ष्य के बारे में सबसे अधिक जानकारी देने में मदद करता है।
इसी तरह से स्पष्ट रहें SomethingImpl
। हमें परवाह नहीं है कि यह एक कार्यान्वयन है और आधार वर्ग नहीं है। यदि आपकी श्रेणी पदानुक्रम विरासत के लिए ठीक से डिज़ाइन की गई है, तो कोई व्यक्ति इसे विरासत में प्राप्त कर सकता है। निश्चित रूप से उनमें अधिक "इम्प्ल" प्रत्यय या अन्य कलाकृतियों को जोड़ने का कोई मूल्य नहीं होगा। "इंटरफ़ेस" प्रत्यय या "I" उपसर्ग जोड़ने में भी कोई मूल्य नहीं है।
विचार करें:
IVehicle <-- IMotoredVehicle <-- AbstractCar <-- CarImpl
विरोध के रूप में:
Vehicle <-- MotoredVehicle <-- Car <-- DefaultCar
<-- Ferrari
<-- Trabi
मैं बहुत बाद तक पसंद करता हूं।
यह, कुछ मामलों में, हंगेरियन नोटेशन के धुंधला दुरुपयोग के समान है, जिसने बाद में इसे अपना बुरा प्रतिनिधि दिया , क्योंकि लोगों ने गलत तरीके से व्याख्या करने के लिए डेवलपर्स के चर के संकेतक के साथ अपने चर को उपसर्ग करने की आवश्यकता के रूप में शुरू किया। हालांकि यह कभी-कभी इसके उपयोग हो सकता है (ज्यादातर यदि आप टाइप की परिभाषा को देखने के लिए आलसी हैं), तो यह ज्यादातर बेकार है। सिमोनी का हंगेरियन नोटेशन के साथ मूल विचार इकाई के क्षमताओं के विकासकर्ता को याद दिलाने के लिए एक महामारी के रूप में इसका उपयोग करना था, न कि इसके प्रकार का।
अंगूठे का एक अच्छा नियम एक नाम में गुणों को शामिल नहीं करना है जो वाक्य रचना से स्पष्ट हैं। चूंकि जावा में, आपको उपयुक्त नाम वाले abstract
कीवर्ड के साथ एक अमूर्त वर्ग को चिह्नित करने की आवश्यकता है , मैं इसे नाम में शामिल नहीं करूंगा। सी ++ में, उदाहरण के लिए, मामला इतना स्पष्ट नहीं है, लेकिन कम से कम कंपाइलर आपको बताएगा कि आपने गलत तरीके से अमूर्त वर्ग का उपयोग कब किया है। फिर से पायथन जैसे कुछ में, स्पष्ट रूप से एक अमूर्त वर्ग का नामकरण इस तरह के एक बुरा विचार नहीं है।
नियम का सामान्य अपवाद तब होता है जब नाम अस्पष्ट होता है। यदि, जो भी कारण से, एक ठोस उपवर्ग है Task
(अन्य उदाहरणों में, यह अधिक समझदार हो सकता है, लेकिन जो भी हो), फिर सुनिश्चित करें, उपयोग करें AbstractTask
।
protected abstract SomeClass { }
यह मुझे बताता है कि यह एक सार वर्ग है। उपसर्ग जोड़ना एक तनातनी और विरोधी पैटर्न है और ज्यादातर मामलों में उपयुक्त नहीं है, लिंक देखें जहां यह package local
उदाहरण के लिए अपवाद होने की बात करता है ।
ज्यादातर मामलों में Abstract
कक्षाएं सार्वजनिक सामना करने वाले एपीआई का हिस्सा नहीं होनी चाहिए, अगर यह वास्तव में एक अच्छा कारण होना चाहिए और एक अच्छा कारण के अलावा एक स्पष्ट रूप से अच्छा नाम प्रदान करना चाहिए AbstractSomeClass
।
ज्यादातर मामलों में अगर आप अधिक वर्णनात्मक नाम के साथ नहीं आ सकते हैं तो आपको शायद कुछ नया करने की जरूरत है।
मेरे पांच सेंट, संभवतः आपके पास उस अमूर्त वर्ग के कार्यान्वयन होंगे और उन्हें 'SomeSpecificTask', 'TaskWithBubbles', 'StrangeTask' आदि नाम दिए जाएंगे, इसलिए आपके अमूर्त 'टास्क' और उनके बीच कोई नाम टकराव नहीं होगा।
इसके अतिरिक्त, 'अमूर्त' शब्द भाषा के सिंटैक्स के बारे में है, न कि व्यावसायिक डोमेन संस्थाओं के लिए, इसलिए मैं इसे नाम के एक भाग के रूप में उपयोग नहीं करना चाहूंगा।
दूसरी ओर, एक उत्तर में मैंने जे.ब्लॉच इफ़ेक्टिव जावा का अंश देखा, जो कहता है कि नाम के एक भाग के रूप में 'अमूर्त' का उपयोग करना एक अच्छी तरह से स्थापित अभ्यास है। ऐसा हो सकता है। लेकिन वैसे भी आधिकारिक जावा कोड सम्मेलनों में इसके बारे में कुछ भी नहीं है।
public abstract class AbstractList<E> extends AbstractCollection<E> implements List<E>
- कोई वर्ग List
के नाम के रूप में उपयोग नहीं कर सकता AbstractList
क्योंकि वह इंटरफ़ेस का नाम है। यह एक अच्छी तरह से स्थापित अभ्यास और आधिकारिक जावा कोड का हिस्सा है जो उपयोग में है जहां कुछ ऐसा है जो इंटरफ़ेस को लागू करता है या एक सार वर्ग का विस्तार नहीं कर सकता है (जो कि इंटरफ़ेस को भी लागू करता है) (कुछ)।
मैं एक जावा डेवलपर (INAJD?) नहीं हूं और ऐसी चीजों के लिए मानक नामकरण नहीं जानता, लेकिन मुझे लगता Task
है कि यह पर्याप्त लगता है कि यह अकेले ही खड़ा हो सकता है।
मैंने यह कर दिया। मैंने अपने सार वर्ग के लिए उपसर्ग के रूप में 'Abstract' को AbstractOperation नाम से जोड़ा। मैंने ऐसा करने का कारण एक और पैकेज था जिसमें ऑपरेशन नामक एक गैर-सार वर्ग था, और इससे मेरी टीम और प्रोग्रामरों को मदद मिली, जिन्होंने दोनों के बीच किसी भी भ्रम से बचने के लिए बाद में कार्यभार संभाला।