मैंने हाल ही में कुछ मंच पर एक ओओ डिजाइन प्रश्न देखा और आरटीटीआई का उपयोग करने की सोच शुरू कर दी। हालांकि यह खराब डिजाइन होना चाहिए लेकिन मैं एक विकल्प के बारे में सोचने में असमर्थ हूं।ओओ डिजाइन में आरटीटीआई से परहेज
मेरा कुत्ता, बडी नाम है, पिछवाड़े में रहता है -
इस परिदृश्य पर OO अवधारणाओं के उपयोग के लिए एक सी ++ प्रोग्राम बनाएं: यहाँ सरल सवाल है। वह रात में छालता है जब वह एक बिल्ली या गिलहरी देखता है जो यात्रा करने आया है। अगर वह मेंढक देखता है, और वह भूख लगी है, तो वह खाता है। अगर वह एक मेंढक देखता है और वह भूखा नहीं है, तो वह इसके साथ खेलता है। अगर उसने पहले से ही 2 मेंढक खाए हैं, और अभी भी भूखे हैं, तो वह इसे जाने देगा। अगर वह कोयोट देखता है, तो वह मदद के लिए रोता है। कभी-कभी उसका दोस्त स्पॉट बंद हो जाता है, और वे एक-दूसरे का पीछा करते हैं। अगर वह किसी अन्य जानवर को देखता है, तो वह उसे देखता है। मैं उम्मीद करता हूं कि आपके पास पशु वर्ग, और एक बिल्ली, कुत्ता, गिलहरी, कोयोट वर्ग होगा जो पशु वर्ग से विरासत में मिलता है।
मैं कुत्ता वर्ग है जो एक पशु तर्क लेता में एक देखने() विधि होने के बारे में सोच शुरू किया और फिर वस्तु (मेंढक, बिल्ली आदि) के वास्तविक प्रकार की जाँच करता है और आवश्यक कार्रवाई की जाती है - नाटक, पीछा आदि वास्तविक प्रकार के आधार पर। हालांकि इसके लिए आरटीटीआई की आवश्यकता होगी जो खराब डिजाइन होना चाहिए। क्या कोई भी बेहतर डिजाइन सुझा सकता है जो आरटीटीआई से बचने और मेरी सोच में गलती को इंगित करेगा?
मुझे लगता है कि यह प्रश्न प्रोग्रामर.स्टैकएक्सchange.com पर है। –
ए ** बहुत ** महत्वपूर्ण नोट आरटीटीआई है, जैसा कि * कंपाइलर * द्वारा संभाला जाता है, किसी ऑब्जेक्ट को स्वयं पहचानने का एकमात्र तरीका नहीं है। आपके पास 'एनम एनिम टाइप्स' और 'वर्चुअल एनिमल :: गेट टाइप()' विधि, या 'यूयूआईडी अज्ञात :: गेट क्लास()' विधि (एक ला कॉम 'IU अज्ञात :: QueryInterface') या यहां तक कि एक समस्या-विशिष्ट भी हो सकती है 'पशु :: IsScarierThan (पशु * मुझे) '। आरटीटीआई का उपयोग किए बिना रनटाइम प्रकार की जानकारी प्राप्त करने के लिए ऑब्जेक्ट-ओरिएंटेड डिज़ाइन का उपयोग करने के कई तरीके हैं। – ssube
* जो आने के लिए आया है * -> आपका मतलब है कि बिल्ली और गिलहरी * आगंतुक * हैं;)? –