सार प्रकार: Difference between revisions
No edit summary |
No edit summary |
||
| Line 3: | Line 3: | ||
{{distinguish|Abstract data type}} | {{distinguish|Abstract data type}} | ||
{{Type systems}} | {{Type systems}} | ||
[[प्रोग्रामिंग भाषा]]ओं में, एब्सट्रैक्ट [[नाममात्र प्रकार की प्रणाली|नामांकित प्रकार की प्रणाली]] है जो सीधे [[उदाहरण (कंप्यूटर विज्ञान)]] नहीं हो सकता है; प्रकार जो एब्सट्रैक्ट नहीं है - जो ''<nowiki/>'कर सकता है'' को तत्काल किया जा सकता है-'' | [[प्रोग्रामिंग भाषा]]ओं में, एब्सट्रैक्ट [[नाममात्र प्रकार की प्रणाली|नामांकित प्रकार की प्रणाली]] है जो सीधे [[उदाहरण (कंप्यूटर विज्ञान)]] नहीं हो सकता है; प्रकार जो एब्सट्रैक्ट नहीं है - जो ''<nowiki/>'कर सकता है'' को तत्काल किया जा सकता है-कंक्रीट ''प्रकार'' कहा जाता है। एब्सट्रैक्ट प्रकार का प्रत्येक उदाहरण कुछ कंक्रीट उपप्रकार का उदाहरण है। एब्सट्रैक्ट प्रकारों को 'अस्तित्ववादी प्रकार' के रूप में भी जाना जाता है।<ref>Mitchell, John C.; Plotkin, Gordon D.; [http://theory.stanford.edu/~jcm/papers/mitch-plotkin-88.pdf ''Abstract Types Have Existential Type''], ACM Transactions on Programming Languages and Systems, Vol. 10, No. 3, July 1988, pp. 470–502</ref> एब्सट्रैक्ट प्रकार कोई कार्यान्वयन या अधूरा कार्यान्वयन प्रदान नहीं कर सकता है। कुछ भाषाओं में, कार्यान्वयन के बिना एब्सट्रैक्ट प्रकार (अधूरे कार्यान्वयन के बदले) को [[प्रोटोकॉल ([[ ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग |ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग]])]], अंतराफलक, हस्ताक्षर या वर्ग प्रकार के रूप में जाना जाता है। क्लास-बेस्ड ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, एब्सट्रैक्ट प्रकार को एब्सट्रैक्ट क्लासेस ([[सार आधार वर्ग|एब्सट्रैक्ट आधार]][[ ठोस वर्ग |क्लासेस]] के रूप में भी जाना जाता है) के रूप में क्रियान्वित किया जाता है, और कंक्रीट टाइप्स को [[ ठोस वर्ग |कंक्रीट क्लासेस]] के रूप में क्रियान्वित किया जाता है। [[ सामान्य प्रोग्रामिंग ]]में, समान धारणा [[अवधारणा (जेनेरिक प्रोग्रामिंग)]] है, जो समान रूप से सिंटैक्स और शब्दार्थ को निर्दिष्ट करती है, परन्तु उपप्रकार संबंध की आवश्यकता नहीं होती है: दो असंबंधित प्रकार एक ही अवधारणा को संतुष्ट कर सकते हैं। | ||
अधिकांशतः, एब्सट्रैक्ट प्रकारों में एक या अधिक कार्यान्वयन अलग से प्रदान किए जाते हैं, उदाहरण के लिए, ठोस उपप्रकारों के रूप में जिन्हें तत्काल किया जा सकता है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, एब्सट्रैक्ट | अधिकांशतः, एब्सट्रैक्ट प्रकारों में एक या अधिक कार्यान्वयन अलग से प्रदान किए जाते हैं, उदाहरण के लिए, ठोस उपप्रकारों के रूप में जिन्हें तत्काल किया जा सकता है। ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग में, एब्सट्रैक्ट क्लासेस में एब्सट्रैक्ट तरीके या एब्सट्रैक्ट गुण सम्मिलित हो सकते हैं<ref name="Oracle">{{cite web | title=Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance) | website=Oracle.com| url=https://docs.oracle.com/javase/tutorial/java/IandI/abstract.html | access-date=2019-08-14}}</ref> जो इसके उपवर्गों द्वारा साझा किए जाते हैं। एब्सट्रैक्ट प्रकारों को क्रियान्वित करने के लिए उपयोग की जाने वाली भाषा सुविधाओं के अन्य नामों में [[विशेषता (कंप्यूटर विज्ञान)]], मिश्रण, पदार्थ, भूमिकाएं या प्रकार क्लासेस सम्मिलित हैं। | ||
<big>'''एब्सट्रैक्ट प्रकार का संकेत'''</big> | <big>'''एब्सट्रैक्ट प्रकार का संकेत'''</big> | ||
| Line 11: | Line 11: | ||
एब्सट्रैक्ट वर्ग कई तरीकों से बनाए जा सकते हैं, संकेतित या सिम्युलेटेड हो सकते हैं: | एब्सट्रैक्ट वर्ग कई तरीकों से बनाए जा सकते हैं, संकेतित या सिम्युलेटेड हो सकते हैं: | ||
* स्पष्ट [[कीवर्ड (कंप्यूटर प्रोग्रामिंग)]] के उपयोग से {{code|abstract}} [[ जावा (प्रोग्रामिंग भाषा) |जावा (प्रोग्रामिंग भाषा)]], [[ डी (प्रोग्रामिंग भाषा) |डी (प्रोग्रामिंग भाषा)]] या सी शार्प (प्रोग्रामिंग लैंग्वेज) के रूप में क्लास परिभाषा में C # होता है। | * स्पष्ट [[कीवर्ड (कंप्यूटर प्रोग्रामिंग)]] के उपयोग से {{code|abstract}} [[ जावा (प्रोग्रामिंग भाषा) |जावा (प्रोग्रामिंग भाषा)]], [[ डी (प्रोग्रामिंग भाषा) |डी (प्रोग्रामिंग भाषा)]] या सी शार्प (प्रोग्रामिंग लैंग्वेज) के रूप में क्लास परिभाषा में C # होता है। | ||
* वर्ग परिभाषा में, एक या एक से अधिक एब्सट्रैक्ट विधियों (जिन्हें [[C++]] में शुद्ध [[आभासी कार्य]] कहा जाता है) को सम्मिलित करके, जिसे | * वर्ग परिभाषा में, एक या एक से अधिक एब्सट्रैक्ट विधियों (जिन्हें [[C++]] में शुद्ध [[आभासी कार्य]] कहा जाता है) को सम्मिलित करके, जिसे क्लासेस को इसके प्रोटोकॉल के भाग के रूप में स्वीकार करने के लिए घोषित किया जाता है, परन्तु जिसके लिए कोई कार्यान्वयन प्रदान नहीं किया जाता है। | ||
* एब्सट्रैक्ट प्रकार से [[वंशानुक्रम (कंप्यूटर विज्ञान)|प्रकृति (कंप्यूटर विज्ञान)]] द्वारा, और कक्षा की परिभाषा को पूरा करने के लिए आवश्यक सभी अनुपस्थित सुविधाओं को ओवरराइड नहीं करना होता है | दूसरे शब्दों में, चाइल्ड प्रकार जो अपने मूल से सभी एब्सट्रैक्ट विधियों | * एब्सट्रैक्ट प्रकार से [[वंशानुक्रम (कंप्यूटर विज्ञान)|प्रकृति (कंप्यूटर विज्ञान)]] द्वारा, और कक्षा की परिभाषा को पूरा करने के लिए आवश्यक सभी अनुपस्थित सुविधाओं को ओवरराइड नहीं करना होता है | दूसरे शब्दों में, चाइल्ड प्रकार जो अपने मूल से सभी एब्सट्रैक्ट विधियों को क्रियान्वित नहीं करता है, वह एब्सट्रैक ही बन जाता है।<ref name="Oracle" /><ref>{{Cite web|url=https://www.geeksforgeeks.org/pure-virtual-functions-and-abstract-classes/|title=C++ में प्योर वर्चुअल फंक्शंस और एब्स्ट्रैक्ट क्लासेस|website=GeeksforGeeks.org|date=15 July 2014 }}</ref> | ||
* स्मॉलटाक जैसी कई गतिशील रूप से टाइप की गई भाषाओं में, कोई भी | * स्मॉलटाक जैसी कई गतिशील रूप से टाइप की गई भाषाओं में, कोई भी क्लासेस जो इस (कंप्यूटर विज्ञान) को विशेष विधि भेजता है, परन्तु उस विधि को क्रियान्वित नहीं करता है, उसे एब्सट्रैक्ट माना जा सकता है। (चूँकि, ऐसी कई भाषाओं में, जैसे [[Objective-C|आब्जेक्टिव-C]], त्रुटि का पता तब तक नहीं चलता जब तक कि क्लासेस का उपयोग नहीं किया जाता है, और संदेश का परिणाम अपवाद त्रुटि संदेश होता है जैसे कि चयनकर्ता को नहीं पहचान: xxx as <code>- [NSObject doesNotRecognizeSelector:(SEL)selector]</code> अक्रियान्वित विधि का पता लगाने पर क्रियान्वित किया जाता है)। | ||
=== उदाहरण (जावा) === | === उदाहरण (जावा) === | ||
| Line 41: | Line 41: | ||
[[File:UML class pet.svg]] | [[File:UML class pet.svg]] | ||
== | == एब्सट्रैक्ट प्रकारों का प्रयोग == | ||
[[स्थिर टाइपिंग]] | [[स्थिर टाइपिंग]] ओपिपि भाषाओं में एब्सट्रैक्ट प्रकार एक महत्वपूर्ण विशेषता है। कई [[गतिशील टाइपिंग]] भाषाओं में कोई समतुल्य सुविधा नहीं होती है (चूँकि[[ बतख टाइपिंग | डक टाइपिंग]] का उपयोग एब्सट्रैक्ट प्रकार को अनावश्यक बनाता है); चूँकि [[विशेषता (कंप्यूटर प्रोग्रामिंग)]] कुछ आधुनिक गतिशील रूप से टाइप की गई भाषाओं में पाई जाती है। | ||
कुछ लेखकों का तर्क है कि | कुछ लेखकों का तर्क है कि [[ पत्ता वर्ग (प्रोग्रामिंग भाषा) |लीफ क्लासेस (प्रोग्रामिंग भाषा)]] होनी चाहिए (कोई उपप्रकार नहीं है), या फिर एब्सट्रैक्ट होना चाहिए।<ref name="riel1996">{{cite book|last=Riel|first=Arthur|title=ऑब्जेक्ट-ओरिएंटेड डिज़ाइन ह्यूरिस्टिक्स|publisher=Addison-Wesley Professional|year=1996|isbn=0-201-63385-X|page=89}}</ref><ref name="meyers1996">{{cite book|last=Meyers|first=Scott|title=अधिक प्रभावी सी ++|publisher=Addison-Wesley Professional|year=1996|isbn=0-201-63371-X|page=[https://archive.org/details/moreeffectivec3500meye/page/258 258]|quote=गैर-पत्ती वर्गों को सार बनाएँ|url=https://archive.org/details/moreeffectivec3500meye/page/258}}</ref> एब्सट्रैक्ट प्रकार इस स्थिति में उपयोगी हैं कि उनका उपयोग प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) को परिभाषित करने और क्रियान्वित करने के लिए किया जा सकता है; संचालन का सेट जो प्रोटोकॉल को क्रियान्वित करने वाली सभी ऑब्जेक्ट का समर्थन करना चाहिए।{{Citation needed|date=April 2020}} | ||
एब्सट्रैक्ट प्रकार भी टेम्पलेट_मेथड_पैटर्न का एक अनिवार्य भाग हैं। | |||
== यह भी देखें == | == यह भी देखें == | ||
Revision as of 08:19, 28 June 2023
This article needs additional citations for verification. (January 2022) (Learn how and when to remove this template message) |
| Type systems |
|---|
| General concepts |
| Major categories |
|
| Minor categories |
प्रोग्रामिंग भाषाओं में, एब्सट्रैक्ट नामांकित प्रकार की प्रणाली है जो सीधे उदाहरण (कंप्यूटर विज्ञान) नहीं हो सकता है; प्रकार जो एब्सट्रैक्ट नहीं है - जो 'कर सकता है को तत्काल किया जा सकता है-कंक्रीट प्रकार कहा जाता है। एब्सट्रैक्ट प्रकार का प्रत्येक उदाहरण कुछ कंक्रीट उपप्रकार का उदाहरण है। एब्सट्रैक्ट प्रकारों को 'अस्तित्ववादी प्रकार' के रूप में भी जाना जाता है।[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;
}
}
एब्सट्रैक्ट प्रकारों का प्रयोग
स्थिर टाइपिंग ओपिपि भाषाओं में एब्सट्रैक्ट प्रकार एक महत्वपूर्ण विशेषता है। कई गतिशील टाइपिंग भाषाओं में कोई समतुल्य सुविधा नहीं होती है (चूँकि डक टाइपिंग का उपयोग एब्सट्रैक्ट प्रकार को अनावश्यक बनाता है); चूँकि विशेषता (कंप्यूटर प्रोग्रामिंग) कुछ आधुनिक गतिशील रूप से टाइप की गई भाषाओं में पाई जाती है।
कुछ लेखकों का तर्क है कि लीफ क्लासेस (प्रोग्रामिंग भाषा) होनी चाहिए (कोई उपप्रकार नहीं है), या फिर एब्सट्रैक्ट होना चाहिए।[4][5] एब्सट्रैक्ट प्रकार इस स्थिति में उपयोगी हैं कि उनका उपयोग प्रोटोकॉल (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) को परिभाषित करने और क्रियान्वित करने के लिए किया जा सकता है; संचालन का सेट जो प्रोटोकॉल को क्रियान्वित करने वाली सभी ऑब्जेक्ट का समर्थन करना चाहिए।[citation needed]
एब्सट्रैक्ट प्रकार भी टेम्पलेट_मेथड_पैटर्न का एक अनिवार्य भाग हैं।
यह भी देखें
- वर्ग (कंप्यूटर प्रोग्रामिंग)
- संकल्पना (जेनेरिक प्रोग्रामिंग)
- वर्ग टाइप करें
संदर्भ
- ↑ 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.0 2.1 "Abstract Methods and Classes (The Java™ Tutorials > Learning the Java Language > Interfaces and Inheritance)". Oracle.com. Retrieved 2019-08-14.
- ↑ "C++ में प्योर वर्चुअल फंक्शंस और एब्स्ट्रैक्ट क्लासेस". GeeksforGeeks.org. 15 July 2014.
- ↑ Riel, Arthur (1996). ऑब्जेक्ट-ओरिएंटेड डिज़ाइन ह्यूरिस्टिक्स. Addison-Wesley Professional. p. 89. ISBN 0-201-63385-X.
- ↑ Meyers, Scott (1996). अधिक प्रभावी सी ++. Addison-Wesley Professional. p. 258. ISBN 0-201-63371-X.
गैर-पत्ती वर्गों को सार बनाएँ
अग्रिम पठन
- Head First Java. O'Reilly Media. 2003. pp. 688. ISBN 0-596-00920-8.
- Core Java: An Integrated Approach by R. Nageswara Rao
बाहरी संबंध
- "Abstract or Skeletal Interfaces Explained" [1]
- Types and Programming Languages by Benjamin Pierce (MIT Press 2002) [2]
- Abstract type at Rosetta Code