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

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

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

डेटाबेस प्रबंधन के संबंधपरक मॉडल में, एक ऑब्जेक्ट तालिका या कॉलम डेटाबेस के रूप में होती है, डेटा और डेटाबेस इकाई के बीच एक संबंध हो सकता है जैसे किसी व्यक्ति की आयु को किसी विशिष्ट व्यक्ति से संबंधित होती है।

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

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

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

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

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

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

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

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

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

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

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

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

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

बाहरी संबंध

 * What Is an Object? from The Java Tutorials