वस्तु (कंप्यूटर विज्ञान)

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

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

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

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

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

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

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

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

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

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

OWL ऑब्जेक्ट्स एक इंटरफ़ेस डेफिनिशन लैंग्वेज के माध्यम से एक्सेस किए गए मानक बड़े दाने वाले वितरित ऑब्जेक्ट्स की तरह नहीं हैं। ऐसा दृष्टिकोण इंटरनेट के लिए उपयुक्त नहीं होगा क्योंकि इंटरनेट लगातार विकसित हो रहा है और इंटरफेस के एक सेट पर मानकीकरण हासिल करना मुश्किल है। ओडब्लूएल ऑब्जेक्ट्स प्रोग्रामिंग भाषाओं जैसे जावा (प्रोग्रामिंग भाषा) और सी ++ में एप्लिकेशन डोमेन मॉडल को परिभाषित करने के लिए उपयोग की जाने वाली वस्तुओं के समान होते हैं।

अनुसार, OWL ऑब्जेक्ट्स और पारंपरिक ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग ऑब्जेक्ट्स के बीच महत्वपूर्ण अंतर हैं। पारंपरिक वस्तुओं को सामान्यतः एकल वंशानुक्रम के साथ स्थिर पदानुक्रम में संकलित किया जाता है, लेकिन OWL वस्तुएँ गतिशील होती हैं। एक OWL ऑब्जेक्ट रन टाइम पर अपनी संरचना बदल सकता है और नए या भिन्न -भिन्न  वर्गों का उदाहरण बन सकता है।

एक और महत्वपूर्ण अंतर यह है कि जिस तरह से मॉडल उस जानकारी का व्यवहार करता है जो वर्तमान में सिस्टम में नहीं है। प्रोग्रामिंग ऑब्जेक्ट्स और अधिकांश डेटाबेस सिस्टम क्लोज्ड-वर्ल्ड धारणा का उपयोग करते हैं। यदि कोई तथ्य सिस्टम को ज्ञात नहीं है तो उस तथ्य को झूठा मान लिया जाता है। सिमेंटिक वेब ऑब्जेक्ट ओपन-वर्ल्ड धारणा का उपयोग करते हैं, एक कथन को केवल तभी गलत माना जाता है जब वास्तविक प्रासंगिक जानकारी होती है कि यह गलत है, अन्यथा इसे अज्ञात माना जाता है, न तो सत्य और न ही गलत।

OWL ऑब्जेक्ट वास्तव में KL-ONE और लूम जैसी आर्टिफिशियल इंटेलिजेंस फ्रेम भाषा में ऑब्जेक्ट्स की तरह हैं।

निम्न तालिका पारंपरिक वस्तुओं को ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग भाषाओं जैसे जावा या सी ++ सेमेन्टिक वेब ऑब्जेक्ट्स के विपरीत करती है:

बाहरी संबंध

 * What Is an Object? from The Java Tutorials