abstract class - अमूर्त वर्ग/विधियों का उपयोग कब और क्यों किया जाता है?




abstract-class abstract-methods (4)

मुझे पता है कि अमूर्त कक्षाओं का मूल उपयोग भविष्य की कक्षाओं के लिए टेम्पलेट बनाना है। लेकिन क्या उनके कोई और उपयोग हैं?

न केवल आप बच्चों के लिए एक टेम्प्लेट को परिभाषित कर सकते हैं, बल्कि एब्सट्रैक्ट क्लासेस आपको कार्यक्षमता को परिभाषित करने का अतिरिक्त लाभ प्रदान करते हैं जो कि आपके बच्चे की कक्षाएं बाद में उपयोग कर सकती हैं।

आप इंटरफ़ेस के लिए कार्यान्वयन प्रदान नहीं कर सकते।

आपको इंटरफेस पर उन्हें कब पसंद करना चाहिए और कब नहीं?

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

यदि आप केवल वस्तुओं के अनुसरण के लिए एक अनुबंध को परिभाषित करना चाहते हैं, तो एक इंटरफ़ेस का उपयोग करें।

इसके अलावा, अमूर्त तरीके कब उपयोगी हैं?

सार तरीके उसी तरह से उपयोगी होते हैं जिस तरह से एक इंटरफेस में तरीकों को परिभाषित करना उपयोगी है। यह सार वर्ग के डिजाइनर के लिए कहने का एक तरीका है "मेरा कोई भी बच्चा इस पद्धति को लागू करें"।

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


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

http://en.wikipedia.org/wiki/Template_method_pattern


निम्नलिखित लेख पढ़ें http://mycodelines.wordpress.com/2009/09/01/in-which-scenario-we-use-abstract-classes-and-interfaces/

सार वर्ग

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

उदाहरण के लिए फिर से ऊपर वाहन वर्ग का उदाहरण लें। यदि हम चाहते हैं कि सभी वर्ग वाहन से व्युत्पन्न ड्राइव () विधि को एक निश्चित तरीके से लागू करें, जबकि अन्य विधियां बाल वर्गों द्वारा ओवरराइड की जा सकती हैं। ऐसे परिदृश्य में हम वाहन वर्ग को ड्राइव के कार्यान्वयन के साथ एक सार वर्ग के रूप में कार्यान्वित करते हैं जबकि अन्य विधियों / गुणों को सार के रूप में छोड़ देते हैं ताकि उन्हें बाल वर्गों द्वारा ओवरराइड किया जा सके।

-> एक अमूर्त वर्ग का उद्देश्य एक आधार वर्ग की एक आम परिभाषा प्रदान करना है जिसे कई व्युत्पन्न वर्ग साझा कर सकते हैं।

उदाहरण के लिए एक वर्ग पुस्तकालय एक अमूर्त वर्ग को परिभाषित कर सकता है जिसे उसके कई कार्यों के लिए एक पैरामीटर के रूप में उपयोग किया जाता है और एक व्युत्पन्न वर्ग बनाकर कक्षा का अपना कार्यान्वयन प्रदान करने के लिए उस पुस्तकालय का उपयोग करने वाले प्रोग्रामर की आवश्यकता होती है।

अमूर्त वर्ग का उपयोग करें

क्लास लाइब्रेरी बनाते समय जिसे व्यापक रूप से वितरित किया जाएगा या पुन: उपयोग किया जाएगा - विशेष रूप से ग्राहकों के लिए, इंटरफ़ेस की प्राथमिकता में एक अमूर्त वर्ग का उपयोग करें; क्योंकि, यह वर्जनिंग को सरल बनाता है। यह Microsoft टीम द्वारा उपयोग की जाने वाली प्रथा है जिसने बेस क्लास लाइब्रेरी विकसित की है। (COM को इंटरफेस के आसपास डिज़ाइन किया गया था।) प्रकार के परिवार के लिए एक सामान्य आधार वर्ग को परिभाषित करने के लिए एक सार वर्ग का उपयोग करें। डिफ़ॉल्ट व्यवहार प्रदान करने के लिए एक अमूर्त वर्ग का उपयोग करें। उपवर्ग एक पदानुक्रम में केवल एक आधार वर्ग होता है, जिसका वर्ग तार्किक रूप से होता है।


बहुत उच्च स्तर पर:

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