ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाओं में एब्सट्रैक्ट मेथड एक अनूठी विशेषता है, जैसे कि जावा, पायथन और C#। इन विधियों को एक एब्सट्रैक्ट क्लास में घोषित किया जाता है, लेकिन इनमें कोई कार्यान्वयन विवरण नहीं होता है। इसका उद्देश्य अन्य क्लासों को विधियों के व्यवहार को परिभाषित करने के लिए एक खाका प्रदान करना है।
ऐतिहासिक उत्पत्ति और प्रथम उल्लेख
अमूर्त विधियाँ, और सामान्यतः अमूर्त वर्ग, की जड़ें अमूर्त डेटा प्रकारों की अवधारणा में होती हैं, जो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का एक मुख्य तत्व है। यह विचार पहली बार 1960 के दशक के दौरान सिमुला प्रोग्रामिंग भाषा में पेश किया गया था। हालाँकि, अमूर्त विधियों का पूर्ण अनुप्रयोग बाद की उच्च-स्तरीय भाषाओं जैसे C++, Java, C# और Python में स्पष्ट हो गया, जो ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग सिद्धांतों का पूरी तरह से समर्थन करते हैं।
सार विधियों पर गहराई से नज़र डालें
अमूर्त विधियों को एक अमूर्त वर्ग के भीतर परिभाषित किया गया है और इसमें कोई निकाय नहीं है; दूसरे शब्दों में, उनके पास कोई कार्यान्वयन कोड नहीं है। वे आम तौर पर उन तरीकों के लिए प्लेसहोल्डर के रूप में उपयोग किए जाते हैं जिन्हें किसी भी गैर-अमूर्त बाल वर्ग के भीतर बनाया जाना चाहिए। यह बहुरूपता की सुविधा प्रदान करते हुए भविष्य की विशिष्ट कक्षाओं के लिए एक संरचना प्रदान करता है।
अमूर्त विधि को किसी भी ठोस (यानी, गैर-अमूर्त) उपवर्ग के लिए एक संविदात्मक दायित्व के रूप में देखा जा सकता है। यह अनिवार्य करता है कि किसी भी ठोस उपवर्ग को इन विधियों के लिए कार्यान्वयन विवरण प्रदान करना चाहिए।
आंतरिक संरचना और कार्य तंत्र
एक अमूर्त विधि की आंतरिक संरचना में बिना किसी कार्यान्वयन कोड के एक अमूर्त वर्ग के भीतर इसकी घोषणा शामिल होती है। एक अमूर्त विधि को परिभाषित करने का सिंटैक्स विभिन्न प्रोग्रामिंग भाषाओं में भिन्न होता है। उदाहरण के लिए, जावा में, आप इसका उपयोग करेंगे abstract
कीवर्ड:
जावाabstract void myAbstractMethod();
जब एक ठोस वर्ग अमूर्त वर्ग का विस्तार करता है, तो उसे सभी अमूर्त तरीकों के लिए कार्यान्वयन प्रदान करना होगा। ऐसा करने में विफलता के परिणामस्वरूप संकलन-समय त्रुटि होगी।
जावाclass ConcreteClass extends AbstractClass {
void myAbstractMethod() {
// Implementation code goes here
}
}
सार विधियों की मुख्य विशेषताएं
- सार वर्गों में परिभाषा: अमूर्त विधियों को केवल अमूर्त वर्गों में ही परिभाषित किया जा सकता है।
- कोई कार्यान्वयन नहीं: इनमें कोई मुख्य भाग नहीं है, अर्थात कोई कार्यान्वयन कोड नहीं है।
- कार्यान्वयन को लागू करता है: अमूर्त वर्ग का विस्तार करने वाले किसी भी ठोस वर्ग को अमूर्त विधि के लिए कार्यान्वयन प्रदान करना होगा।
- बहुरूपता का समर्थन करता है: ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में बहुरूपता को लागू करने में सार विधियाँ एक महत्वपूर्ण घटक हैं।
सार विधियों के प्रकार
आम तौर पर, अमूर्त तरीकों के कोई विशिष्ट "प्रकार" नहीं होते हैं क्योंकि उनकी प्राथमिक विशेषता कार्यान्वयन की कमी है। हालाँकि, अमूर्त तरीकों को उनके मापदंडों, रिटर्न प्रकार और उनके द्वारा फेंके जा सकने वाले अपवादों के आधार पर विभेदित किया जा सकता है, बहुत कुछ नियमित तरीकों की तरह।
अमूर्त विधियों का उपयोग और संबंधित मुद्दे
सार विधियों का उपयोग तब किया जाता है जब कोई प्रोग्रामर उपवर्गों में कुछ व्यवहार लागू करना चाहता है। उदाहरण के लिए, एक चिड़ियाघर, एक अमूर्त वर्ग का अनुकरण करने वाले सॉफ़्टवेयर में Animal
एक अमूर्त विधि हो सकती है makeSound()
. प्रत्येक ठोस पशु वर्ग (जैसे Lion
, Elephant
, आदि) को इस विधि को लागू करना चाहिए, यह सुनिश्चित करते हुए कि प्रत्येक जानवर ध्वनि निकाल सकता है, हालांकि वास्तविक ध्वनि प्रत्येक जानवर के लिए भिन्न होती है।
अमूर्त तरीकों के उपयोग से संबंधित मुद्दे अक्सर उनके उद्देश्य की गलतफहमी के कारण होते हैं। उदाहरण के लिए, प्रोग्रामर ग़लती से एक अमूर्त वर्ग को इंस्टेंट करने का प्रयास कर सकते हैं या किसी ठोस उपवर्ग में एक अमूर्त विधि को लागू करने की उपेक्षा कर सकते हैं।
समान अवधारणाओं के साथ तुलना
विशेषता | सार विधियाँ | इंटरफ़ेस विधियाँ (जावा) | शुद्ध आभासी कार्य (C++) |
---|---|---|---|
परिभाषा | एक अमूर्त वर्ग में परिभाषित | एक इंटरफ़ेस में परिभाषित | एक वर्ग में परिभाषित किया गया है और के रूप में चिह्नित किया गया है = 0 |
कार्यान्वयन | जिस वर्ग में वे परिभाषित हैं, उसमें कोई कार्यान्वयन नहीं | जिस इंटरफ़ेस में वे परिभाषित हैं, उसमें कोई कार्यान्वयन नहीं है | जिस वर्ग में वे परिभाषित हैं, उसमें कोई कार्यान्वयन नहीं |
उपवर्ग/कार्यान्वयन कक्षाएं | अमूर्त विधि को लागू करना होगा | इंटरफ़ेस पद्धति को लागू करना होगा | शुद्ध आभासी फ़ंक्शन को लागू करना होगा |
एकाधिक वंशानुक्रम | जावा कक्षाओं के लिए एकाधिक वंशानुक्रम का समर्थन नहीं करता है | मल्टीपल इनहेरिटेंस को अनुकरण करने के लिए इंटरफेस का उपयोग किया जा सकता है | C++ एकाधिक वंशानुक्रम का समर्थन करता है |
भविष्य के परिप्रेक्ष्य और प्रौद्योगिकियाँ
अमूर्त विधियाँ ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग का एक अनिवार्य हिस्सा बनी रहेंगी, जो लचीले और रखरखाव योग्य सॉफ़्टवेयर को डिजाइन करने में महत्वपूर्ण भूमिका निभाएंगी। वे एआई प्रोग्रामिंग जैसी भविष्य की प्रौद्योगिकियों में अभिन्न अंग होंगे, जहां अमूर्त व्यवहारों को परिभाषित करना जिन्हें बाद में विशिष्ट कार्यान्वयन के साथ भरा जा सकता है, महत्वपूर्ण है।
प्रॉक्सी सर्वर और सार विधियाँ
प्रॉक्सी सर्वर के संदर्भ में, डेटा भेजने या प्राप्त करने जैसे सामान्य संचालन को परिभाषित करने के लिए अमूर्त विधियों का उपयोग किया जा सकता है। उदाहरण के लिए, ProxyServer
अमूर्त वर्ग में एक अमूर्त विधि हो सकती है handleRequest()
. ठोस वर्ग जैसे HTTPProxyServer
और SocksProxyServer
इस पद्धति का विशिष्ट कार्यान्वयन प्रदान करेगा, जिससे अनुरोधों के प्रोटोकॉल-विशिष्ट प्रबंधन की अनुमति मिलेगी।