सार प्रकार

From Vigyanwiki

प्रोग्रामिंग भाषाओं में, एब्सट्रैक्ट नामांकित प्रकार की प्रणाली है जो सीधे उदाहरण (कंप्यूटर विज्ञान) नहीं हो सकता है; प्रकार जो एब्सट्रैक्ट नहीं है - जो 'कर सकता है को तत्काल किया जा सकता है-कंक्रीट प्रकार कहा जाता है। एब्सट्रैक्ट प्रकार का प्रत्येक उदाहरण कुछ कंक्रीट उपप्रकार का उदाहरण है। एब्सट्रैक्ट प्रकारों को 'अस्तित्ववादी प्रकार' के रूप में भी जाना जाता है।[1] एब्सट्रैक्ट प्रकार कोई कार्यान्वयन या अधूरा कार्यान्वयन प्रदान नहीं कर सकता है। कुछ भाषाओं में, कार्यान्वयन के बिना एब्सट्रैक्ट प्रकार (अधूरे कार्यान्वयन के बदले) को [[प्रोटोकॉल (ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग)]], अंतराफलक, संकेत या वर्ग प्रकार के रूप में जाना जाता है। क्लास-बेस्ड ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, एब्सट्रैक्ट प्रकार को एब्सट्रैक्ट क्लासेस (एब्सट्रैक्ट आधार क्लासेस के रूप में भी जाना जाता है) के रूप में क्रियान्वित किया जाता है, और कंक्रीट प्रकार को कंक्रीट क्लासेस के रूप में क्रियान्वित किया जाता है। सामान्य प्रोग्रामिंग में, समान धारणा अवधारणा (जेनेरिक प्रोग्रामिंग) है, जो समान रूप से सिंटैक्स और शब्दार्थ को निर्दिष्ट करती है, परन्तु उपप्रकार संबंध की आवश्यकता नहीं होती है: दो असंबंधित प्रकार एक ही अवधारणा को संतुष्ट कर सकते हैं।

अधिकांशतः एब्सट्रैक्ट प्रकारों में एक या अधिक कार्यान्वयन अलग से प्रदान किए जाते हैं, उदाहरण के लिए, ठोस उपप्रकारों के रूप में जिन्हें तत्काल किया जा सकता है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, एब्सट्रैक्ट क्लासेस में एब्सट्रैक्ट तरीके या एब्सट्रैक्ट गुण सम्मिलित हो सकते हैं[2] जो इसके उपवर्गों द्वारा साझा किए जाते हैं। एब्सट्रैक्ट प्रकारों को क्रियान्वित करने के लिए उपयोग की जाने वाली भाषा सुविधाओं के अन्य नामों में ट्रेट्स (कंप्यूटर विज्ञान), मिक्सिंस, फ्लेवर्स, रोल्स या प्रकार क्लासेस सम्मिलित हैं।

एब्सट्रैक्ट प्रकार का संकेत

एब्सट्रैक्ट वर्ग कई तरीकों से बनाए जा सकते हैं, जो की संकेतित या सिम्युलेटेड हो सकते हैं:

  • स्पष्ट कीवर्ड (कंप्यूटर प्रोग्रामिंग) के उपयोग से abstract जावा (प्रोग्रामिंग भाषा), डी (प्रोग्रामिंग भाषा) या सी शार्प (प्रोग्रामिंग लैंग्वेज) के रूप में क्लास परिभाषा में C # होता है।
  • वर्ग परिभाषा में, एक या एक से अधिक एब्सट्रैक्ट विधियों (जिन्हें C++ में शुद्ध आभासी कार्य कहा जाता है) को सम्मिलित करके, जिसे क्लासेस को इसके प्रोटोकॉल के भाग के रूप में स्वीकार करने के लिए घोषित किया जाता है, परन्तु जिसके लिए कोई कार्यान्वयन प्रदान नहीं किया जाता है।
  • एब्सट्रैक्ट प्रकार से प्रकृति (कंप्यूटर विज्ञान) द्वारा, और कक्षा की परिभाषा को पूरा करने के लिए आवश्यक सभी अनुपस्थित सुविधाओं को ओवरराइड नहीं करना होता है | दूसरे शब्दों में, चाइल्ड प्रकार जो अपने मूल से सभी एब्सट्रैक्ट विधियों को क्रियान्वित नहीं करता है, वह एब्सट्रैक ही बन जाता है।[2][3]
  • स्मॉलटाक जैसी कई गतिशील रूप से टाइप की गई भाषाओं में, कोई भी क्लासेस जो इस (कंप्यूटर विज्ञान) को विशेष विधि भेजता है, परन्तु उस विधि को क्रियान्वित नहीं करता है, उसे एब्सट्रैक्ट माना जा सकता है। (चूँकि, ऐसी कई भाषाओं में, जैसे आब्जेक्टिव-C, त्रुटि का पता तब तक नहीं चलता जब तक कि क्लासेस का उपयोग नहीं किया जाता है, और संदेश का परिणाम अपवाद त्रुटि संदेश होता है जैसे कि चयनकर्ता को नहीं पहचान पाता हैं: xxx as - [NSObject doesNotRecognizeSelector:(SEL)selector] अक्रियान्वित विधि का पता लगाने पर क्रियान्वित किया जाता है)।

उदाहरण (जावा)

//By default, all methods in all classes are concrete, unless the abstract keyword is used.
abstract class Demo {
    // An abstract class may include abstract methods, which have no implementation.
    abstract public int sum(int x, int y);

    // An abstract class may also include concrete methods.
    public int product(int x, int y) { return x*y; }
}

//By default, all methods in all interfaces are abstract, unless the default keyword is used.
interface DemoInterface {
    [abstract] int getLength(); //Abstract can be used here, though is completely useless
    
    //The default keyword can be used in this context to specify a concrete method in an interface
    default int product(int x, int y) {
        return x * y;
    }
}

UML class pet.svg

एब्सट्रैक्ट प्रकारों का प्रयोग

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

कुछ लेखकों का तर्क है कि लीफ क्लासेस (प्रोग्रामिंग भाषा) होनी चाहिए (कोई उपप्रकार नहीं है), या फिर एब्सट्रैक्ट होना चाहिए।[4][5] एब्सट्रैक्ट प्रकार इस स्थिति में उपयोगी हैं कि उनका उपयोग प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) को परिभाषित करने और क्रियान्वित करने के लिए किया जा सकता है; संचालन का सेट जो प्रोटोकॉल को क्रियान्वित करने वाली सभी ऑब्जेक्ट का समर्थन करना चाहिए।

एब्सट्रैक्ट प्रकार भी टेम्पलेट_मेथड_पैटर्न का एक अनिवार्य भाग हैं।

यह भी देखें

संदर्भ

  1. Mitchell, John C.; Plotkin, Gordon D.; Abstract Types Have Existential Type, ACM Transactions on Programming Languages and Systems, Vol. 10, No. 3, July 1988, pp. 470–502
  2. 2.0 2.1 "Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)". Oracle.com. Retrieved 2019-08-14.
  3. "C++ में प्योर वर्चुअल फंक्शंस और एब्स्ट्रैक्ट क्लासेस". GeeksforGeeks.org. 15 July 2014.
  4. Riel, Arthur (1996). ऑब्जेक्ट-ओरिएंटेड डिज़ाइन ह्यूरिस्टिक्स. Addison-Wesley Professional. p. 89. ISBN 0-201-63385-X.
  5. Meyers, Scott (1996). अधिक प्रभावी सी ++. Addison-Wesley Professional. p. 258. ISBN 0-201-63371-X. गैर-पत्ती वर्गों को सार बनाएँ

अग्रिम पठन

बाहरी संबंध