जैसा कि हम सभी जानते हैं, अमूर्तता सुविधा के आंतरिक कार्यान्वयन को संदर्भित करती है और केवल उपयोगकर्ताओं को व्यावहारिकता दिखाती है। यानी, यह क्या काम करता है (दिखा रहा है, हालांकि, इंटरफ़ेस जावा में पूर्ण अमूर्तता प्रदान करता है, जो अमूर्त श्रेणियां नहीं कर सकती हैं।
सार वर्ग बनाम इंटरफ़ेस
एब्सट्रैक्ट क्लास और इंटरफ़ेस के बीच मुख्य अंतर यह है कि एसोसिएट इंटरफ़ेस पूरी तरह से अन्य जावा इंटरफ़ेस का विस्तार करेगा; सहयोगी सार श्रेणी एक और जावा श्रेणी विकसित करेगी और कई जावा इंटरफेस लागू करेगी। जावा इंटरफ़ेस के सदस्य डिफ़ॉल्ट रूप से सार्वजनिक रूप से भिन्न होते हैं। जावा अमूर्त श्रेणी में व्यक्तिगत, संरक्षित आदि श्रेणी के सदस्य होंगे।
एक अमूर्त वर्ग एक ऐसा वर्ग है जिसकी घोषणा में अमूर्त कीवर्ड होता है। अमूर्त कक्षाओं में कम से कम एक अमूर्त विधि, यानी बिना शरीर वाली विधियाँ मौजूद होनी चाहिए। इसमें विभिन्न प्रकार की ठोस विधियाँ हो सकती हैं।
आप ठोस कक्षाओं के लिए ब्लूप्रिंट तैयार करने के लिए अमूर्त कक्षाओं का उपयोग कर सकते हैं। हालाँकि, अमूर्त विधि को विरासत वर्ग द्वारा लागू किया जाना चाहिए।
इंटरफ़ेस एक वर्ग के लिए एक ब्लूप्रिंट है जिसका उपयोग इसे बनाने के लिए किया जा सकता है। इंटरफ़ेस में कोई ठोस विधियाँ नहीं हैं (ऐसी विधियाँ जिनमें कोड है)। एक इंटरफ़ेस की सभी विधियाँ अमूर्त विधियाँ हैं।
इंटरफ़ेस बनाना संभव नहीं है. दूसरी ओर, इंटरफ़ेस लागू करने वाली कक्षाओं को तुरंत चालू किया जा सकता है। इंटरफ़ेस में इंस्टेंस वेरिएबल का उपयोग कभी नहीं किया जाता है। हालाँकि, सार्वजनिक स्थैतिक अंतिम चर (जिन्हें स्थिर वर्ग चर के रूप में भी जाना जाता है) का उपयोग किया जा सकता है।
सार वर्ग क्या है?
एक अमूर्त वर्ग ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) में एक मौलिक अवधारणा है जो अन्य वर्गों के लिए ब्लूप्रिंट या टेम्पलेट के रूप में कार्य करता है। यह एक ऐसा वर्ग है जिसे त्वरित नहीं किया जा सकता है और इसका उद्देश्य अन्य वर्गों द्वारा विस्तारित या उपवर्गित किया जाना है। सार वर्ग सामान्य विशेषताओं और विधियों को परिभाषित करते हैं जिन्हें कई संबंधित वर्ग विरासत पदानुक्रम के भीतर साझा करेंगे।
अमूर्त वर्गों की प्रमुख विशेषताओं और विशेषताओं में शामिल हैं:
- त्वरित नहीं किया जा सकता: किसी अमूर्त वर्ग का उपयोग सीधे ऑब्जेक्ट या उदाहरण बनाने के लिए नहीं किया जा सकता है। इसके बजाय, यह उपवर्गों को इसके गुणों और विधियों को प्राप्त करने और लागू करने के लिए एक रूपरेखा प्रदान करता है।
- इसमें सार विधियाँ शामिल हो सकती हैं: सार वर्गों में एक या अधिक अमूर्त विधियाँ शामिल होती हैं। बिना किसी कार्यान्वयन विवरण के विधि घोषणाएँ। उपवर्गों को इन अमूर्त तरीकों के लिए ठोस कार्यान्वयन प्रदान करना होगा।
- ठोस तरीके शामिल हो सकते हैं: सार वर्गों में ठोस (पूरी तरह से कार्यान्वित) विधियां भी हो सकती हैं जो उपवर्गों को विरासत में मिल सकती हैं। ये विधियाँ सभी उपवर्गों द्वारा साझा की जाने वाली सामान्य कार्यक्षमता प्रदान कर सकती हैं।
- कोड पुन: प्रयोज्यता के लिए प्रयुक्त: सार वर्ग सामान्य कोड को एक ही सार वर्ग में परिभाषित करने और संबंधित उपवर्गों के बीच साझा करने की अनुमति देकर कोड पुन: प्रयोज्यता और DRY (डोंट रिपीट योरसेल्फ) सिद्धांत को बढ़ावा देते हैं।
- विरासत: उपवर्गों को अमूर्त वर्ग में परिभाषित विशेषताएँ और विधियाँ विरासत में मिलती हैं। यह एक सामान्य संरचना को बनाए रखते हुए व्यवहार की विशेषज्ञता और अनुकूलन की अनुमति देता है।
- सार बनाम ठोस कक्षाएं: सार वर्ग ठोस वर्गों से भिन्न होते हैं, जिन्हें सीधे त्वरित किया जा सकता है। कंक्रीट कक्षाएं अपनी सभी विधियों के लिए पूर्ण कार्यान्वयन प्रदान करती हैं।
जावा और सी# जैसी भाषाओं में, कीवर्ड "सार" अमूर्त वर्गों को परिभाषित करता है। सार वर्ग संबंधित वर्गों के पदानुक्रम के निर्माण के लिए मूल्यवान उपकरण हैं जो व्युत्पन्न वर्गों में अनुकूलन और विशेषज्ञता की अनुमति देते हुए सामान्य विशेषताओं और व्यवहारों को साझा करते हैं।
इंटरफ़ेस क्या है?
इंटरफ़ेस ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग (ओओपी) में एक मौलिक अवधारणा है जो एक अनुबंध या विधि हस्ताक्षर के सेट को परिभाषित करता है जिसे इंटरफ़ेस का पालन करने वाले किसी भी वर्ग द्वारा कार्यान्वित किया जाना चाहिए। इंटरफ़ेस उन भाषाओं में एकाधिक वंशानुक्रम प्राप्त करने का एक तरीका प्रदान करते हैं जो सीधे इसका समर्थन नहीं करते हैं, और वे कोड अमूर्तता, मॉड्यूलरिटी और लचीलेपन को बढ़ावा देते हैं।
इंटरफ़ेस की मुख्य विशेषताओं और विशेषताओं में शामिल हैं:
- विधि हस्ताक्षर: एक इंटरफ़ेस कार्यान्वयन विवरण के बिना विधि हस्ताक्षरों के संग्रह को परिभाषित करता है। ये विधि हस्ताक्षर व्यवहारों के एक सेट का प्रतिनिधित्व करते हैं जो कार्यान्वयन कक्षाओं को प्रदान करना होगा।
- अनुबंधातम्क दायित्व: जब कोई वर्ग एक इंटरफ़ेस लागू करता है, तो उसे उस इंटरफ़ेस में परिभाषित सभी तरीकों के लिए ठोस कार्यान्वयन प्रदान करना होगा। ऐसा करने में विफलता के परिणामस्वरूप संकलन त्रुटि होती है।
- एकाधिक वंशानुक्रम: कक्षाओं के विपरीत, जो एकल वंशानुक्रम (एक वर्ग का विस्तार) का समर्थन करते हैं, एक वर्ग कई इंटरफेस लागू कर सकता है। यह एक वर्ग को व्यवहार के कई सेट विरासत में देने और प्रदान करने की अनुमति देता है।
- अमूर्तता और बहुरूपता: इंटरफ़ेस "क्या" (विधि हस्ताक्षर) को "कैसे" (विधि कार्यान्वयन) से अलग करके अमूर्तता को बढ़ावा देते हैं। यह अमूर्तता बहुरूपता की अनुमति देती है, जहां एक ही इंटरफ़ेस को लागू करने वाले विभिन्न वर्गों की वस्तुओं को परस्पर विनिमय किया जा सकता है।
- कोड पुन: प्रयोज्यता: इंटरफ़ेस सामान्य व्यवहारों को परिभाषित करके कोड पुन: प्रयोज्य की सुविधा प्रदान करते हैं जिन्हें विभिन्न वर्ग लागू कर सकते हैं। यह DRY (डोंट रिपीट योरसेल्फ) सिद्धांत को बढ़ावा देता है।
- लचीलापन: इंटरफ़ेस कक्षाओं को उनके द्वारा कार्यान्वित इंटरफ़ेस के आधार पर विनिमेय होने की अनुमति देकर शिथिल युग्मित कोड को सक्षम बनाता है। यह लचीलापन मॉड्यूलर और एक्स्टेंसिबल सिस्टम को डिजाइन करने में विशेष रूप से उपयोगी है।
कक्षाओं के बीच अनुबंधों को परिभाषित करने और लागू करने के लिए जावा, सी# और टाइपस्क्रिप्ट जैसी भाषाओं में इंटरफेस का व्यापक रूप से उपयोग किया जाता है, यह सुनिश्चित करते हुए कि वे एक निर्दिष्ट एपीआई (एप्लिकेशन प्रोग्रामिंग इंटरफ़ेस) का पालन करते हैं और विविध कार्यान्वयन की अनुमति देते हुए सामान्य व्यवहार साझा करते हैं।
सार वर्ग और इंटरफ़ेस के बीच तुलना तालिका
विभेदन के पैरामीटर | सार वर्ग | इंटरफेस |
---|---|---|
प्रारंभ | सीधे तौर पर त्वरित नहीं किया जा सकता. | इसे सीधे तौर पर शुरू नहीं किया जा सकता. |
उद्देश्य | अन्य वर्गों के लिए एक ब्लूप्रिंट के रूप में कार्य करता है और कार्यान्वयन के साथ या उसके बिना दोनों विधि घोषणाएँ प्रदान कर सकता है। | इसे सीधे तौर पर शुरू नहीं किया जा सकता. |
तरीके | इसमें अमूर्त (अक्रियान्वित) विधियाँ, ठोस (कार्यान्वित) विधियाँ, या दोनों का संयोजन हो सकता है। | बिना किसी कार्यान्वयन के केवल विधि हस्ताक्षर शामिल हैं; सभी विधियाँ पूर्णतः अमूर्त हैं। |
एकाधिक वंशानुक्रम | एकल वंशानुक्रम का समर्थन करता है; एक वर्ग केवल एक अमूर्त वर्ग का विस्तार कर सकता है। | एकाधिक वंशानुक्रम का समर्थन करता है; एक वर्ग अनेक इंटरफ़ेस लागू कर सकता है। |
कंस्ट्रक्टर्स | इसमें कंस्ट्रक्टर हो सकते हैं, जिन्हें उपवर्ग का एक उदाहरण बनाते समय लागू किया जाता है। | कंस्ट्रक्टर नहीं हो सकते क्योंकि उन्हें सीधे इंस्टेंटियेट नहीं किया जा सकता। |
कोड पुन: प्रयोज्य | सामान्य कोड को संबंधित वर्गों के बीच साझा करने की अनुमति देकर कोड पुन: प्रयोज्य को बढ़ावा देता है। | व्यवहारों के सामान्य सेटों को परिभाषित करके कोड पुन: प्रयोज्यता को बढ़ावा देता है जिन्हें कक्षाओं को लागू करना चाहिए। |
लचीलापन | अमूर्तता और सामान्य कार्यक्षमता प्रदान करने के बीच संतुलन प्रदान करता है। | अमूर्तता और एक अनुबंध को निर्दिष्ट करने पर जोर देता है। |
बक्सों का इस्तेमाल करें | साझा व्यवहार और विशेषताओं के साथ संबंधित वर्गों के पदानुक्रम बनाने के लिए उपयोगी। | उन अनुबंधों को परिभाषित करने के लिए उपयोगी है जो यह सुनिश्चित करते हैं कि कार्यान्वयन कक्षाएं विशिष्ट व्यवहार प्रदान करती हैं। |
उदाहरण | abstract class Shape { abstract double area(); } | interface Drawable { void draw(); } |
परिदृश्य | उपयोगी जब आप कुछ डिफ़ॉल्ट व्यवहार के साथ एक सामान्य आधार वर्ग प्रदान करना चाहते हैं लेकिन उपवर्गों द्वारा लागू करने के लिए विशिष्ट तरीकों को छोड़ देते हैं। | उपयोगी जब आप एक सामान्य आधार वर्ग को निर्देशित किए बिना कई वर्गों में एक अनुबंध या व्यवहार के साझा सेट को परिभाषित करना चाहते हैं। |
के बीच मुख्य अंतर सार वर्ग और इंटरफ़ेस
सार वर्ग:
- इसमें अमूर्त (अकार्यान्वित) और ठोस (कार्यान्वित) दोनों तरीके हो सकते हैं।
- एकल वंशानुक्रम का समर्थन करता है, जिसका अर्थ है कि एक वर्ग केवल एक अमूर्त वर्ग का विस्तार कर सकता है।
- ऑब्जेक्ट स्थिति आरंभ करने के लिए कंस्ट्रक्टर हो सकते हैं।
- डिफ़ॉल्ट व्यवहार के साथ बेस क्लास के निर्माण की अनुमति देता है।
- अमूर्तता और सामान्य कार्यक्षमता के बीच संतुलन प्रदान करता है।
- साझा विशेषताओं और व्यवहारों के साथ संबंधित वर्गों के पदानुक्रम बनाते समय उपयोगी।
इंटरफ़ेस:
- बिना किसी कार्यान्वयन के केवल विधि हस्ताक्षर शामिल हैं; सभी विधियाँ पूर्णतः अमूर्त हैं।
- एकाधिक वंशानुक्रम का समर्थन करता है, जिसका अर्थ है कि एक वर्ग कई इंटरफेस लागू कर सकता है।
- कंस्ट्रक्टर नहीं हो सकते, क्योंकि इंटरफ़ेस को इंस्टेंटियेट नहीं किया जा सकता।
- एक अनुबंध को परिभाषित करता है जो विधियों के एक सेट को निर्दिष्ट करता है जो कक्षाओं को लागू करने के लिए प्रदान करना होगा।
- अमूर्तता और व्यवहार के साझा सेट को निर्दिष्ट करने पर जोर देता है।
- अनुबंधों को परिभाषित करने और यह सुनिश्चित करने के लिए उपयोगी है कि कक्षाएं विशिष्ट एपीआई आवश्यकताओं का पालन करती हैं।
निष्कर्ष
एक अमूर्त वर्ग आपको ऐसी कार्यक्षमता बनाने की अनुमति देता है जिसे उपवर्ग कार्यान्वित या ओवरराइड कर सकते हैं, जबकि एक इंटरफ़ेस आपको कार्यक्षमता बताने की अनुमति देता है लेकिन कार्यक्षमता लागू करने की नहीं। जबकि एक वर्ग केवल एक अमूर्त वर्ग का विस्तार कर सकता है, यह कई इंटरफेस लागू कर सकता है।