अंकल बॉब 'संज्ञा वाक्यांश नामों' से क्या तात्पर्य है?


14

मैं अंकल बॉब द्वारा क्लीन कोड पढ़ रहा हूं । क्योंकि मैं एक देशी-अंग्रेजी वक्ता नहीं हूं, मैं निम्नलिखित कथन को समझ नहीं सका:

वर्गों और वस्तुओं की तरह संज्ञा या संज्ञा पद के नाम होना चाहिए Customer, WikiPage, Account, और AddressParser। बचें शब्द की तरह है Manager, Processor, Data, या Infoएक वर्ग के नाम पर। एक वर्ग का नाम एक क्रिया नहीं होना चाहिए।

मैं जानता हूँ कि, में से कोई भी रूप में Manager, Processor, Data, और Infoएक क्रिया है, है ना? वह वास्तविक बिंदु क्या है जो वह जोर देना चाहता है?


हो सकता है कि अंकल बॉब संसाधन-के-ऑब्जेक्ट्स के गुणों को निकालने में रैस्टफुल सोच को अपना रहे हों।
rwong

जवाबों:


21

तीन बिंदु अलग हैं:

  • वर्ग के नाम संज्ञा या संज्ञा वाक्यांश होने चाहिए । इसका मतलब है कि कक्षा का नाम कुछ ऐसा होना चाहिए जो एक क्रिया का विषय होगा। ऑब्जेक्ट-ओरिएंटेड डिज़ाइन के मामले में, विधियाँ वे क्रियाएं होंगी जो इस बात पर होती हैं कि वर्ग किसका प्रतिनिधित्व करता है।

  • कुछ शब्दों से बचना चाहिए। Managerएक संभव देवता वर्ग को इंगित करता है । Infoऔर Dataडमी डेटा कंटेनर को इंगित कर सकता है। इस तरह के शब्द समस्या स्थान के खराब मॉडलिंग का संकेत दे सकते हैं।

  • क्रियाओं का वर्ग नाम कभी नहीं होना चाहिए। पहला बिंदु देखें - कक्षाएं मॉडल चीजें, विधियां मॉडल क्रियाएं।


1
इस तरह के शब्द समस्या स्थान के खराब मॉडलिंग का संकेत दे सकते हैं। - ठीक है, किसी को लगता है, या तो समस्या स्थान खराब तरीके से तैयार किया गया है या नहीं, चुने गए नामों से स्वतंत्र है। एक अच्छा नाम एक खराब डिजाइन की मदद नहीं करता है; और एक अच्छा डिजाइन केवल खराब नाम से ही आहत होता है।
इंगो

और जब आप वास्तव में अपनी कक्षा का निर्माण करते हैं और यह बाहरी दुनिया के साथ कैसे व्यवहार करता है, इस पर विचार करते हुए आप इसे एक कदम नीचे ले जा सकते हैं - वर्ग के गुण आमतौर पर संज्ञाएँ होंगे, जबकि कक्षा की विधियाँ आमतौर पर
क्रियात्मक होंगी

यदि आपकी परियोजना में एक वर्ग है जिसे आप "प्रबंधक" या "जानकारी" या "डेटा" कहने पर विचार करेंगे, तो संभावना है कि इस तरह के एक दर्जन वर्ग हैं, जिसका अर्थ है कि आप इन नामों का उपयोग नहीं करेंगे। आपके पास एक ThisManager और ThatManager और OtherManger और इतने पर होगा।
gnasher729

उनका कहना है कि क्रियाओं को कभी भी कक्षा के नाम में नहीं होना चाहिए, लेकिन मैं सिर्फ सार्थक संदर्भ जोड़ रहा था, और पृष्ठ 29 पर अपने उदाहरण में, वह एक वर्ग का नाम लगाता है GuessStatisticMessage। अब मैं नियम पर उलझन में हूं, क्योंकि मैं एक क्रिया के रूप में, एक संज्ञा के विपरीत, गेस के उनके उपयोग की व्याख्या करता हूं। dictionary.com/browse/guess?s=t
डेविन ग्लीसन लैम्बर्ट

2
@DevinGleasonLambert लेकिन यह अनुमान नहीं है। यह एक अनुमानी आंकड़ा है। एक संदेश एक संज्ञा है। अनुमान आँकड़ा केवल संदेश के प्रकार का वर्णन करता है कि यह है - एक जो अनुमान आँकड़ों के बारे में संदेश देता है।
थॉमस ओवेन्स

7

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

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


5
दुर्भाग्य से, इस तरह की सोच गलत डिजाइन का कारण बन सकती है। प्रमुख उदाहरणों में से एक बैंक खाते का क्लासिक परिचयात्मक उदाहरण है। लगभग सभी OO पाठ्यपुस्तकों में, Accountएक वस्तु है, balanceएक क्षेत्र है और transferविधि है। लेकिन सही डिजाइन यह होगा: Transferएक वस्तु है, accountएक क्षेत्र है और balanceएक विधि है। कि बैंकिंग प्रणाली वास्तव में कैसे लागू की जाती है और कंप्यूटर से पहले बैंकिंग वास्तव में कैसे काम करती है।
जोर्ग डब्ल्यू मित्तग

@ JörgWMittag: सावधानी की कहानी उत्तर के रूप में अच्छी तरह से पोस्ट करने लायक है; ये सामान्य दिशानिर्देश हैं, और कुछ दुर्लभ मामलों में खराब अपघटन हो सकता है।
1919
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.