आप ओओपी में क्लास डिजाइन कैसे लेते हैं?


12

जब मैं एक OO समाधान डिजाइन करने की कोशिश करता हूं, तो मैं आम तौर पर सीआरसी मॉडलिंग का उपयोग करता हूं जिसमें मैं वर्ग के नामों (संज्ञा) को सूचीबद्ध करता हूं, वे क्या करते हैं (क्रिया) और वे अन्य वर्गों के साथ कैसे सहयोग करते हैं।

इस ब्लॉग में इस संज्ञा-क्रिया दृष्टिकोण के बारे में कहने के लिए नीचे की बात है

   ...This approach, which I will call “noun and verb,” is so limited 
   I’ll dare to call it brain damaged....

मेरा सवाल है, क्या OO दृष्टिकोण का उपयोग करने के लिए एक बेहतर मॉडलिंग तकनीक मौजूद है?


1
यह मानते हुए कि $ $ $ बोली समझ में आती है, बस कोडिंग शुरू करें। जब अटक जाता है, तो बाधा (ओं) को हटाने का एक तरीका ढूंढें। बाद में पुनः कारक। "सीआरसी" कुछ ऐसा नहीं है जो मैंने अब से पहले सुना है, लेकिन इससे मुझे कक्षाएं लिखने से नहीं रोका गया। अगर वहाँ एक महान यांत्रिक सिद्धांत था, तो किसी ने इसका उपयोग करके एक अच्छा कोड विश्लेषण उपकरण बनाया होगा और यह लोकप्रिय होगा। जब तक मुझे ऐसी बात नहीं मिलती, मैं अपने अंतर्ज्ञान का उपयोग करता रहूंगा। बेशक, किसी को सही स्थानों पर क्रियाओं और संज्ञाओं का उपयोग करना होगा ...
जॉब

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

जवाबों:


12

निष्पक्षता में, उन्होंने उस दावे में "मज़ा" जोड़ा।

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

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

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

लेकिन जैसे ही आप परीक्षण लिखना शुरू करते हैं, आपको पता चलता है कि किसी भी खेल में कौन सी वस्तु सबसे महत्वपूर्ण है: नियम।

याद रखें कि कागज का वह छोटा सा टुकड़ा जिसे आप एक बार पढ़ते हैं जब आप पहली बार खेल पाते हैं और फिर से तब तक बातचीत नहीं करते हैं जब तक कि कोई विवाद न हो? कम्प्यूटरीकृत संस्करण उस तरह से काम नहीं करता है। हर एक खिलाड़ी जो करने की कोशिश करता है, एक कंप्यूटर नियमों से परामर्श करेगा और देखेगा कि उन्हें ऐसा करने की अनुमति है या नहीं।

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

और यही कारण है कि TDD वास्तव में ड्राइविंग डिजाइन के लिए बहुत लोकप्रिय है। क्योंकि यह आपकी विचार प्रक्रिया को सही स्थानों पर शीघ्रता से ले जाता है:

जब मुझे लगता है कि मैं अपने एकाधिकार खेल के लिए कुछ परीक्षण लिखने जा रहा हूं। मैं अपने सेट को देख सकता हूं और वस्तुओं को खोजने की कोशिश कर सकता हूं। तो, हमें ये टुकड़े मिल गए हैं। मैं उन लोगों के लिए कुछ परीक्षण लिखूंगा।

शायद मेरे पास एक बेस क्लास मोनोपॉली है और प्रत्येक प्रकार का टुकड़ा उन लोगों से प्राप्त होगा। मैं डॉगपाइ के साथ शुरू करूँगा। पहला परीक्षण ... आह। दरअसल, यहां कोई तर्क नहीं है। हां, प्रत्येक टुकड़े को अलग तरह से खींचा जाएगा, इसलिए मुझे एक डॉगड्रावर की आवश्यकता हो सकती है, लेकिन जब मैं खेल से बाहर हो रहा हूं, तो मैं स्क्रीन पर "डी" लिखना चाहता हूं। मैं अंत में UI को मसाला दूँगा।

आइए परीक्षण करने के लिए कुछ वास्तविक तर्क खोजें। इन घरों और होटलों में बहुत सारे हैं, लेकिन उन्हें परीक्षणों की आवश्यकता नहीं है। पैसा, नहीं। संपत्ति कार्ड, नहीं। और इसी तरह। यहां तक ​​कि बोर्ड एक राज्य मशीन के अलावा कुछ भी नहीं है, इसमें कोई तर्क नहीं है।

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

क्या आपने देखा कि जब आप संज्ञाओं और क्रियाओं को लिखते हैं तो क्या होता है?

वास्तव में, रॉबर्ट मार्टिन के एजाइल प्रिंसिपल्स पैटर्न और प्रैक्टिस में एक महान उदाहरण है, जहां वे टीडीडी का उपयोग करके एक बॉलिंग स्कोर कार्ड ऐप को बाहर निकालने की कोशिश करते हैं और सभी प्रकार की चीजों को ढूंढते हैं जो उन्हें लगता था कि स्पष्ट कक्षाएं सिर्फ परेशान करने लायक नहीं थीं।


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

+1 और पसंदीदा। सबसे पहले, मेरा अनुभव यह है कि TDD आपकी विचार प्रक्रिया को सही स्थानों पर जल्दी से चलाती है (खैर, आप कभी-कभी "जल्दी" के बारे में बहस कर सकते हैं)। और यह डिजाइन दोषों को जल्दी प्रकट करने में मदद कर सकता है: यदि आप और कुछ नहीं तो निर्भरता इंजेक्शन सीखेंगे! संज्ञा-क्रिया - यहाँ कौन शुरू नहीं करता है? लेकिन इनमें से अधिकांश वस्तुएं पूरी तरह से गूंगी हैं। डेटा, यदि आप गहरा है। एक सेमिनल पुस्तक का शीर्षक मेरे लिए यह सब कहता है एल्गोरिथ्म + डेटा संरचनाएं = कार्यक्रम
रडार

3

मैंने कभी इस तरह के तरीकों को मेरे लिए मददगार नहीं पाया। वास्तव में मैंने पाया कि उनका उपयोग करना मुझे और भी बुरा लगा। रॉबर्ट सी। मार्टिन कॉफी निर्माता की जाँच करें , मुझे नहीं लगता कि वह इस तरह के दृष्टिकोण का उपयोग करता है।

एक बात जो मुझे ठीक से परेशान करती है, वह समाधान है जो व्यक्ति सीआरसी लेख में आता है जिसे आप लिंक करते हैं। ग्राहक / ऑर्डर सहयोग कुछ ऐसा नहीं है जिसे मैं सार्थक मानूं, जैसा कि वैसे भी नहीं लिखा गया है। ग्राहक के बारे में उस मॉडल में विशेष रूप से दिलचस्प कुछ भी नहीं है जो वर्ग की स्थिति का हकदार है। केवल "ग्राहक" होने के बारे में दिलचस्प बात यह है कि उस व्यक्ति से जुड़े एक या अधिक आदेश हैं ।

कॉलेज का मॉडल भी। एक बड़ा सौदा है जो शायद छात्र और प्रोफेसर के बीच साझा किया जाना चाहिए। इसके अलावा, क्या होता है जब आप एक प्रोफेसर को क्लास लेते हैं, जैसा कि अक्सर कॉलेज कैंपस में मुफ्त में दिया जाता है?

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

संपादित करें: बस वह दूसरा ब्लॉग पढ़ें और मुझे कहना होगा कि मैं इससे काफी सहमत हूं। मुझे बाकी को पढ़ना होगा और देखना होगा कि यह सीखने के संदर्भ में क्या पेशकश कर रहा है।


2
त्रुटि: पंक्ति 2: अमान्य हाइपरलिंक!
पटाखा

1
एसई सॉफ्टवेयर उसे hosed। यह पूर्वावलोकन पर ठीक काम कर रहा था। यहां टेक्स्ट फॉर्म में लिंक दिया गया है: objectmentor.com/resources/articles/CfishMaker.pdf
एडवर्ड स्ट्रेंज

0

मेरी राय है कि वर्गों को जोड़ा (और हटाया) जाना चाहिए क्योंकि आप अलग-अलग चिंताओं को कोड करते हैं और निर्भरता कम करते हैं। डिजाइन प्रतिमानों में धाराप्रवाह होने के कारण संभवतः रीफैक्टरिंग और सरलीकरण की संभावनाएं देखने के लिए एक अच्छा दांव है।

आम तौर पर, मेरे अनुभव में, कक्षाएं संज्ञा / क्रिया श्रेणियों में बड़े करीने से नहीं पड़ती हैं, बल्कि आप विभिन्न पैटर्न वर्गों (कारखानों, एकल, रणनीति पैटर्न आदि) और अन्य प्रबंधक वर्गों के साथ संज्ञा / क्रिया वर्गों के मिश्रण के साथ समाप्त करेंगे। जो आपके आवेदन के एक पहलू को संबोधित करता है।

महत्वपूर्ण बात यह है कि आपका लक्ष्य एक वर्ग को देखने में सक्षम होना चाहिए और जो कुछ करता है उसे घटाकर उस कक्षा को बदलकर संशोधित करना चाहिए। आपके एप्लिकेशन के एक पहलू के लिए अधिक कोड उन वर्गों के बीच फैलाया जाता है, जिनका पालन करना, प्रबंधित करना और उसका विस्तार करना जितना कठिन हो जाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.