कक्षा आधारित प्रोग्रामिंग

From alpha
Jump to navigation Jump to search

क्लास-आधारित प्रोग्रामिंग, या अधिक सामान्यतः क्लास-ओरिएंटेशन, ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग (OOP) की एक शैली है जिसमें वंशानुक्रम (वस्तु-उन्मुख प्रोग्रामिंग) वस्तु (कंप्यूटर विज्ञान) के वर्ग (कंप्यूटर प्रोग्रामिंग) es को परिभाषित करके होता है। )एस, अकेले वस्तुओं के माध्यम से होने वाली विरासत के बजाय (प्रोटोटाइप-आधारित प्रोग्रामिंग की तुलना करें)।

ऑब्जेक्ट-आधारित मॉडल के बजाय OOP का सबसे लोकप्रिय और विकसित मॉडल क्लास-आधारित मॉडल है। इस मॉडल में, वस्तुएँ ऐसी संस्थाएँ हैं जो राज्य (कंप्यूटर विज्ञान) (अर्थात, डेटा), व्यवहार (अर्थात, प्रक्रियाएँ, या विधि (कंप्यूटर विज्ञान)) और पहचान को जोड़ती हैं (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) (अन्य सभी वस्तुओं के बीच अद्वितीय अस्तित्व)। किसी वस्तु की संरचना और व्यवहार को एक वर्ग (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) द्वारा परिभाषित किया जाता है, जो एक विशिष्ट प्रकार की सभी वस्तुओं की एक परिभाषा या खाका है। किसी वस्तु को स्पष्ट रूप से एक वर्ग के आधार पर बनाया जाना चाहिए और इस प्रकार बनाई गई वस्तु को उस वर्ग का एक तात्कालिकता (कंप्यूटर विज्ञान) माना जाता है। एक ऑब्जेक्ट एक डेटा संरचना के समान है, जिसमें मेथड पॉइंटर्स, सदस्य अभिगम नियंत्रण और एक निहित डेटा सदस्य शामिल है, जो वर्ग पदानुक्रम में वर्ग (अर्थात, वर्ग की वस्तुओं) के उदाहरणों का पता लगाता है (रनटाइम वंशानुक्रम सुविधाओं के लिए आवश्यक) .

एनकैप्सुलेशन

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

विरासत

क्लास-बेस्ड प्रोग्रामिंग में, इनहेरिटेंस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) नए क्लास को मौजूदा क्लास के एक्सटेंशन (सिमेंटिक्स) के रूप में परिभाषित करके किया जाता है: मौजूदा क्लास पेरेंट क्लास है और नया क्लास उपवर्ग (कंप्यूटर विज्ञान) है। यदि किसी चाइल्ड क्लास में केवल एक अभिभावक वर्ग है, तो इसे सिंगल इनहेरिटेंस के रूप में जाना जाता है, जबकि यदि चाइल्ड क्लास में एक से अधिक पैरेंट क्लास हो सकते हैं, तो इसे एकाधिक वंशानुक्रम के रूप में जाना जाता है। यह कक्षाओं को पदानुक्रम में व्यवस्थित करता है, या तो एक पेड़ (सेट सिद्धांत) (यदि एकल विरासत) या जाली (क्रम) (यदि एकाधिक विरासत)।

वंशानुक्रम की परिभाषित विशेषता यह है कि इंटरफ़ेस और कार्यान्वयन दोनों विरासत में मिले हैं; यदि केवल इंटरफ़ेस इनहेरिट किया गया है, तो इसे इंटरफ़ेस विरासत या सबटाइपिंग के रूप में जाना जाता है। इनहेरिटेंस क्लास के बिना भी किया जा सकता है, जैसा कि प्रोटोटाइप-आधारित प्रोग्रामिंग में होता है।

वर्ग-आधारित मॉडलों की आलोचना

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

उपप्रकार की आवश्यकता: चलो वस्तुओं के बारे में सिद्ध संपत्ति हो प्रकार का . तब वस्तुओं के लिए सत्य होना चाहिए प्रकार का कहाँ का उपप्रकार है . </ब्लॉककोट>

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

इसके अलावा, एक अन्य सामान्य उदाहरण यह है कि एक उपवर्ग (कंप्यूटर विज्ञान) से बनाई गई एक व्यक्ति वस्तु मूल वर्ग की वस्तु नहीं बन सकती है क्योंकि एक बाल वर्ग और एक अभिभावक वर्ग एक व्यक्ति वर्ग को विरासत में देता है, लेकिन वर्ग-आधारित भाषाएँ ज्यादातर प्रकार को बदलने की अनुमति नहीं देती हैं। रनटाइम पर वस्तु का वर्ग। वर्ग-आधारित भाषाओं के लिए, यह प्रतिबंध अपने उपयोगकर्ताओं के लिए वर्ग के एकीकृत दृश्य को संरक्षित करने के लिए आवश्यक है। उपयोगकर्ताओं को इस बात की परवाह करने की आवश्यकता नहीं होनी चाहिए कि क्या किसी विधि के कार्यान्वयन से परिवर्तन होता है जो वर्ग के अपरिवर्तनीय (कंप्यूटर विज्ञान) को तोड़ता है। वस्तु को नष्ट करके और उसके स्थान पर दूसरी रचना करके ऐसे परिवर्तन किए जा सकते हैं। बहुरूपता का उपयोग प्रासंगिक इंटरफेस को बनाए रखने के लिए भी किया जा सकता है, भले ही ऐसे परिवर्तन किए गए हों, क्योंकि वस्तुओं को ब्लैक बॉक्स अबास्ट्रक्शन के रूप में देखा जाता है और ऑब्जेक्ट पहचान (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के माध्यम से एक्सेस किया जाता है। हालाँकि, आमतौर पर ऑब्जेक्ट को संदर्भित करने वाले ऑब्जेक्ट संदर्भों का मान बदल जाता है, जिससे क्लाइंट कोड पर प्रभाव पड़ता है।

उदाहरण भाषाएँ

हालांकि सिमुला ने वर्ग अमूर्तता की शुरुआत की, वर्ग-आधारित भाषा का विहित उदाहरण स्मॉलटाक है। अन्य में PHP, C++, Java (प्रोग्रामिंग भाषा), C Sharp (प्रोग्रामिंग भाषा)|C#, और Objective-C शामिल हैं।

यह भी देखें

संदर्भ

  1. Kiselyov, Oleg. "Subtyping, Subclassing, and Trouble with OOP". Retrieved 7 October 2012.
  2. Ducasse, Stéphane. "A set cannot be a subtype of a bag". Retrieved 7 October 2012.