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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ओडब्ल्यूएल ऑब्जेक्ट वास्तव में केएल-वन और लूम जैसी आर्टिफिशियल इंटेलिजेंस फ्रेम भाषा में ऑब्जेक्ट्स की तरह होती है।

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

बाहरी संबंध

 * What Is an Object? from The Java Tutorials