मैं अमूर्त वर्गों के उपयोग के बारे में हाल ही में परेशान हूं।
कभी-कभी एक अमूर्त वर्ग पहले से बनाया जाता है और एक टेम्पलेट के रूप में काम करता है कि व्युत्पन्न वर्ग कैसे काम करेगा। इसका मतलब है, कम या ज्यादा, कि वे कुछ उच्च स्तर की कार्यक्षमता प्रदान करते हैं लेकिन व्युत्पन्न वर्गों द्वारा लागू किए जाने वाले कुछ विवरणों को छोड़ देते हैं। अमूर्त वर्ग कुछ सार विधियों को लगाकर इन विवरणों की आवश्यकता को परिभाषित करता है। ऐसे मामलों में, एक अमूर्त वर्ग एक खाका की तरह काम करता है, कार्यक्षमता का एक उच्च स्तरीय विवरण या जिसे आप इसे कॉल करना चाहते हैं। इसका उपयोग स्वयं नहीं किया जा सकता है, लेकिन उन विवरणों को परिभाषित करने के लिए विशेष होना चाहिए जो उच्च स्तर के कार्यान्वयन से बचे हुए हैं।
कुछ अन्य बार, ऐसा होता है कि कुछ "व्युत्पन्न" वर्गों के निर्माण के बाद अमूर्त वर्ग का निर्माण होता है (चूंकि माता-पिता / अमूर्त वर्ग ऐसा नहीं है, वे अभी तक व्युत्पन्न नहीं हुए हैं, लेकिन आप जानते हैं कि मेरा क्या मतलब है)। इन मामलों में, अमूर्त वर्ग आमतौर पर एक ऐसी जगह के रूप में उपयोग किया जाता है जहां आप किसी भी प्रकार के सामान्य कोड डाल सकते हैं जिसमें वर्तमान व्युत्पन्न वर्ग होते हैं।
उपरोक्त टिप्पणियों के बाद, मैं सोच रहा हूं कि इन दोनों मामलों में से कौन सा नियम होना चाहिए। क्या किसी भी तरह के विवरण को केवल सार वर्ग तक ही सीमित किया जाना चाहिए, क्योंकि वे वर्तमान में सभी व्युत्पन्न वर्गों में सामान्य हैं? क्या सामान्य कोड जो एक उच्च-स्तरीय कार्यक्षमता का हिस्सा नहीं है, होना चाहिए?
क्या ऐसा कोड होना चाहिए जो अमूर्त वर्ग के लिए कोई अर्थ न रखता हो, क्योंकि यह केवल इसलिए होता है क्योंकि यह व्युत्पन्न वर्गों के लिए सामान्य है?
मुझे एक उदाहरण दें: सार वर्ग A में एक विधि () और एक सार विधि aq () है। विधि aq (), दोनों व्युत्पन्न वर्गों AB और AC में, विधि b () का उपयोग करती है। क्या बी () को A में स्थानांतरित किया जाना चाहिए? यदि हाँ, तो यदि कोई व्यक्ति केवल A को देखता है (आइए दिखाते हैं कि AB और AC नहीं हैं), b () का अस्तित्व बहुत मायने नहीं रखेगा! क्या यह खराब चीज़ है? क्या किसी को एक अमूर्त वर्ग में देखने और समझने में सक्षम होना चाहिए कि व्युत्पन्न वर्गों का दौरा किए बिना क्या चल रहा है?
सच कहूं, तो यह पूछने के समय, मैं यह मानता हूं कि एक अमूर्त वर्ग लिखना जो बिना किसी व्युत्पन्न वर्ग को देखने के लिए समझ में आता है, यह साफ कोड और स्वच्छ वास्तुकला का विषय है। That वास्तव में एक सार वर्ग के विचार को पसंद नहीं करते हैं जो किसी भी तरह के कोड के लिए डंप की तरह काम करता है सभी व्युत्पन्न वर्गों में सामान्य होता है।
आप क्या सोचते / अभ्यास करते हैं?
Writing an abstract class that makes sense without having to look in the derived classes is a matter of clean code and clean architecture.
-- क्यों? क्या यह संभव नहीं है कि, एक आवेदन को डिजाइन करने और विकसित करने के दौरान, मुझे पता चलता है कि कई वर्गों में सामान्य कार्यक्षमता है जो स्वाभाविक रूप से एक अमूर्त वर्ग में बदल सकती है? क्या मुझे व्युत्पन्न वर्गों के लिए कोई भी कोड लिखने से पहले हमेशा यह अनुमान लगाने के लिए पर्याप्त होना चाहिए? अगर मैं इस कसौटी पर खरा नहीं उतरता हूं, तो क्या मुझे इस तरह के रिफलेक्टर करने से मना किया गया है? क्या मुझे अपना कोड टॉस करना चाहिए और शुरू करना चाहिए?