वास्तविक ऑब्जेक्ट उन्मुख सिस्टम में, ऑब्जेक्ट का प्रकार क्लाइंट के लिए पारदर्शी है।तो कोड जो पुस्तकों को संभालता है उसे पता नहीं होना चाहिए कि पुस्तक का प्रकार क्या है, लेकिन केवल पुस्तकों पर तरीकों का आह्वान करता है।
इसलिए यदि आपको विधि आमंत्रण के जवाब में पुस्तक के भीतर विभिन्न व्यवहार को लागू करने की आवश्यकता है, तो पुस्तक का विस्तार करें और इसके कुछ तरीकों को ओवरराइड करें। यदि आप नहीं करते हैं, तो नहीं।
ऐसा लगता है कि, आपके उप-वर्गों के खाली निकायों को देखते हुए, वे किताबों के समान तरीके से व्यवहार करते हैं। तो आप केवल कुछ अतिरिक्त डेटा के साथ पुस्तक को टैग कर रहे हैं - एनसाइक्लोपीडिया और नोवेल के बीच का अंतर हार्डबैक या सॉफ्टबैक या बड़े प्रिंट या मानक प्रिंट की तुलना में पुस्तक के लिए आवश्यक नहीं है - एक ग्राहक इन्हें अलग-अलग उपयोग कर सकता है, और प्रत्येक पुस्तक या तो बड़ी है प्रिंट बुक या यह एक मानक प्रिंट बुक है, लेकिन ये आवश्यक अंतरों की बजाय पुस्तक के सभी गुण हैं।
मुझे पुस्तक के लिए एक enum का उपयोग करने की आवश्यकता नहीं होगी, क्योंकि आप अधिक डेटा जोड़ना चाहते हैं - मैं या तो एक ढीली टैगिंग प्रणाली का उपयोग करता हूं, ताकि आप एक प्रकार के संग्रह के साथ एक पुस्तक टैग कर सकें - ताकि आप {'बच्चों के', 'ऑर्निथोलॉजिकल', 'एनसाइक्लोपीडिया',} के रूप में टैग की गई एक पुस्तक होगी - या भूमिकाओं में संरचना की अनुमति दें - इसलिए जब आवश्यक हो, 'बच्चों के ऑर्निथोलॉजिकल एनसाइक्लोपीडिया' के लिए एक भूमिका है, लेकिन कोई निश्चित गणना नहीं है।
स्रोत
2010-06-24 08:34:02
बिल्कुल सहमत हैं। मैं अभी सोच रहा था कि "महत्वपूर्ण अंतर" कैसे व्यक्त किया जाए। गरीब अंग्रेजी :( –
सहमत हैं। ऐसा लगता है कि वह केवल इसे अलग-अलग प्रकार के रूप में देखना चाहता है। विरासत एक मजबूत युग्मन बनाता है, और जब आपके पास शैलियों को पार करने वाली कोई पुस्तक होती है तो क्या होता है? एकाधिक विरासत की अनुमति देने के लिए C++ पर स्विच करें? ए [ध्वज] 'ed enum यहां एक अच्छी पसंद हो सकती है। – simendsjo
+1 एक बहुत ही स्पष्ट उत्तर के लिए। एकमात्र सही उत्तर IMHO। – pyrocumulus