घटक वस्तु मॉडल

From Vigyanwiki
Revision as of 10:06, 26 May 2023 by Manidh (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

COM
Component Object Model
AbbreviationCOM
StatusIn force
First published1993; 31 years ago (1993)
Latest versionLiving standard
2021
OrganizationMicrosoft
SeriesSystem Services
Base standardsMIDL, UUID
Related standards
DomainComponent Interfacing
Websitedocs.microsoft.com/en-us/windows/win32/com/the-component-object-model

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

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

इतिहास

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

1991 में, माइक्रोसॉफ्ट ने विज़ुअल बेसिक एक्सटेंशन (वीबीएक्सX) को विज़ुअल बेसिक 1.0 के साथ प्रस्तुत किया। एक वीबीएक्स एक डायनेमिक-लिंक लाइब्रेरी (डीएलएल) के रूप में एक पैकेज्ड एक्सटेंशन है जो ऑब्जेक्ट को ग्राफिक रूप से एक रूप में रखने और गुणधर्म (प्रोग्रामिंग) और विधि (कंप्यूटर विज्ञान) द्वारा हेरफेर करने की अनुमति देता है। इन्हें बाद में अन्य भाषाओं जैसे विजुअल सी ++ ++ द्वारा उपयोग के लिए अनुकूलित किया गया था। 1992 में, जब विंडोज़ का विंडोज़ 3.1x संस्करण जारी किया गया था, तो माइक्रोसॉफ्ट ने इसके अंतर्निहित ऑब्जेक्ट मॉडल के साथ ओएलई 2 जारी किया। सीओएम एप्लिकेशन बाइनरी इंटरफ़ेस (एबीआई) एमएपीआई एबीआई (1992 में जारी) के समान था, और जैसे यह एमएसआरपीसी पर आधारित था और अंततः खुला समूह के डीसीई/आरपीसी पर आधारित था। जबकि ओएलई 1 यौगिक डॉक्यूमेंट पर केंद्रित था, सीओएम और ओएलई 2 को सामान्य रूप से सॉफ़्टवेयर कॉम्पोनेन्टों को संबोधित करने के लिए डिज़ाइन किया गया था। टेक्स्ट कम्युनिकेशन और विंडोज संदेश एक मजबूत और एक्स्टेंसिबल तरीके से एप्लिकेशन सुविधाओं को साझा करने की अनुमति देने के लिए पर्याप्त लचीले प्रमाणित नहीं हुए थे, इसलिए सीओएम को एक नई नींव के रूप में बनाया गया था, और ओएलई को ओएलई2 में बदल दिया गया था। 1994 में ओएलई कस्टम नियंत्रण (ओसीएक्स) को वीबीएक्सX नियंत्रणों के उत्तराधिकारी के रूप में प्रस्तुत किया गया था। उसी समय, माइक्रोसॉफ्ट ने कहा कि ओएलई 2 को केवल ओएलई के रूप में जाना जाएगा, और यह कि ओएलई अब एक संक्षिप्त नाम नहीं था, बल्कि कंपनी की सभी कॉम्पोनेन्ट तकनीकों के लिए एक नाम था। 1996 के प्रारम्भ में, माइक्रोसॉफ्ट ने ओएलई कस्टम नियंत्रणों के लिए एक नया उपयोग पाया, सामग्री को प्रस्तुत करने के लिए अपने वेब ब्राउज़र की क्षमता का विस्तार करते हुए, इंटरनेट एक्टिव एक्स से संबंधित ओएलई के कुछ हिस्सों का नाम बदल दिया, और धीरे-धीरे सभी ओएलई तकनीकों का नाम बदलकर एक्टिव एक्स कर दिया, यौगिक डॉक्यूमेंट तकनीक को छोड़कर माइक्रोसॉफ्ट ऑफिस में उपयोग किया जाता है। उस वर्ष बाद में, माइक्रोसॉफ्ट ने डिस्ट्रिब्यूटेड कॉम्पोनेन्ट ऑब्जेक्ट मॉडल के साथ पूरे नेटवर्क में काम करने के लिए सीओएम का विस्तार किया।[6]


संबंधित प्रौद्योगिकियां

सीओएम विंडोज के लिए प्रमुख सॉफ्टवेयर डेवलपमेंट प्लेटफॉर्म था और इस तरह, कई सहायक तकनीकों के विकास को प्रभावित किया। यह वैसे ही पहले की तकनीकों से काफी प्रभावित था।

डीडीई

सीओएम ने डायनेमिक डेटा स्थानांतरण को इंटरप्रोसेस संचार के पसंदीदा रूप में बदल दिया।

डीसीई/आरपीसी और एमएसआरपीसी

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

डिस्ट्रिब्यूटेड कॉम्पोनेन्ट ऑब्जेक्ट मॉडल

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

कॉम+

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

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

नेट

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

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

विंडोज रनटाइम

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

नैनो-कॉम (एक्सपीसीओएम)

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

एक नैनो-कॉम हेडर फ़ाइल कम से कम तीन प्रकारों को परिभाषित या नाम देती है:

  • इंटरफ़ेस प्रकारों की पहचान करने के लिए GUID - यह प्रभावी रूप से 128 बिट संख्या है
  • विधि कॉल से त्रुटि कोड की पहचान करने के लिए HRESULT - यह प्रभावी रूप से 32-बिट iएनटीs के प्रसिद्ध मानों (S_OK, E_FAIL, E_OUTOFMEMORY, आदि) का मानकीकृत उपयोग है।
  • सभी टाइप किए गए ऑब्जेक्ट संदर्भों के लिए आधार प्रकार के रूप में अज्ञात - यह समर्थन करने के लिए प्रभावी रूप से सार वर्चुअल फ़ंक्शंस है dynamic_cast<T>नए इंटरफ़ेस प्रकारों का स्टाइल अधिग्रहण और एक ला की गिनती करना shared_ptr<T>

नैनो-कॉम के कई उपयोग परिणाम के रूप में कैली-आवंटित मेमोरी बफ़र्स को संबोधित करने के लिए दो कार्यों को भी परिभाषित करते हैं

  • <NanoCom>Alloc - कॉल करने वाले को लौटाए जाने वाले कच्चे बफर (ऑब्जेक्ट नहीं) आवंटित करने के लिए विधि कार्यान्वयन द्वारा बुलाया जाता है
  • <NanoCom>Free - विधि कॉल करने वालों द्वारा कैली-आवंटित बफ़र्स को एक बार उपयोग में नहीं होने पर मुक्त करने के लिए कॉल किया जाता है

नैनो-कॉम के कुछ कार्यान्वयन जैसे कि डायरेक्ट 3 डी एलोकेटर फ़ंक्शंस से बचते हैं और केवल कॉलर-आवंटित बफ़र्स का उपयोग करने के लिए खुद को प्रतिबंधित करते हैं।

नैनो-कॉम में कक्षाओं, अपार्टमेंट्स, मार्शलिंग, पंजीकरण आदि की कोई धारणा नहीं है। बल्कि, ऑब्जेक्ट संदर्भों को केवल कार्य सीमाओं के पार भेज दिया जाता है और मानक भाषा निर्माण (जैसे, C++ नया ऑपरेटर) के माध्यम से आवंटित किया जाता है।

सुरक्षा

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

तकनीकी विवरण

सीओएम प्रोग्रामर सीओएम-जागरूक सॉफ़्टवेयर कॉम्पोनेन्टों का उपयोग करके अपने सॉफ़्टवेयर का निर्माण करते हैं। क्लास आईडी (सीएलएसआईडीs) द्वारा विभिन्न कॉम्पोनेन्ट प्रकारों की पहचान की जाती है, जो वैश्विक रूप से विशिष्ट पहचानकर्ता (GUIDs) हैं। प्रत्येक सीओएम कॉम्पोनेन्ट एक या अधिक इंटरफ़ेस (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) के माध्यम से अपनी कार्यक्षमता को उजागर करता है। एक कॉम्पोनेन्ट द्वारा समर्थित विभिन्न इंटरफ़ेस इंटरफ़ेस आईडी (आईआईडी) का उपयोग करके एक दूसरे से अलग होते हैं, जो कि GUID भी हैं। सीओएम इंटरफ़ेस में कई भाषाओं में भाषा बंधन होती है, जैसे C (प्रोग्रामिंग लैंग्वेज), C++, विजुअल बेसिक, डेल्फी (प्रोग्रामिंग भाषा), पायथन (प्रोग्रामिंग लैंग्वेज)[10][11] और कई स्क्रिप्टिंग भाषाओं को विंडोज प्लेटफॉर्म पर लागू किया गया। कॉम्पोनेन्टों तक सभी पहुंच इंटरफ़ेस की विधि (कंप्यूटर विज्ञान) के माध्यम से की जाती है। यह इंटर-प्रोसेस, या यहां तक ​​कि इंटर-कंप्यूटर प्रोग्रामिंग (डीसीओएम के समर्थन का उपयोग करने वाला बाद वाला) जैसी तकनीकों की अनुमति देता है।

इंटरफ़ेस

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

क्लासेस

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

इंटरफ़ेस परिभाषा लैंग्वेज और प्रकार लाइब्रेरी

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

ऑब्जेक्ट फ्रेमवर्क

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

आईडीएल में निम्नलिखित उदाहरण कोक्लास परिभाषा पर विचार करें:

coclass SomeClass {
  [default] interface ISomeInterface;
};

उपरोक्त कोड खंड नामित एक सीओएम वर्ग SomeClass घोषित करता है जो नाम के एक इंटरफ़ेस ISomeInterface को लागू करता है .

यह वैचारिक रूप से निम्नलिखित C++ वर्ग को परिभाषित करने के बराबर है:

class SomeClass : public ISomeInterface {
  ...
  ...
};

जहाँ ISomeInterface एक C++ शुद्ध आभासी वर्ग है (जिसे कभी-कभी एब्स्ट्रैक्ट बेस क्लास भी कहा जाता है)।

सीओएम इंटरफ़ेस और कक्षाओं वाली आईडीएल फाइलें टाइप लाइब्रेरी (टीएलबी) फाइलों में संकलित की जाती हैं, जिन्हें बाद में रनटाइम पर क्लाइंट द्वारा पार्स किया जा सकता है, यह निर्धारित करने के लिए कि कौन सा इंटरफ़ेस किसी ऑब्जेक्ट का समर्थन करता है, और किसी ऑब्जेक्ट के इंटरफ़ेस तरीकों को लागू करता है।

सी ++ में, सीओएम ऑब्जेक्ट्स को तत्काल किया जाता है CoCreateInstance फ़ंक्शन जो क्लास आईडी (सीएलएसआईडी) और इंटरफ़ेस आईडी (आईआईडी) को तर्क के रूप में लेता है। की तात्कालिकता SomeClass निम्नानुसार कार्यान्वित किया जा सकता है:

ISomeInterface* interface_ptr = NULL;
HRESULT hr = CoCreateInstance(CLSID_SomeClass, NULL, CLSCTX_ALL,
                              IID_ISomeInterface, (void**)&interface_ptr);

इस उदाहरण में, सीओएम सब-सिस्टम का उपयोग किसी ऑब्जेक्ट के लिए पॉइंटर प्राप्त करने के लिए किया जाता है जो लागू होता है ISomeInterface इंटरफ़ेस, और coclass सीएलएसआईडी_SomeClass के इस इंटरफ़ेस के विशेष कार्यान्वयन की आवश्यकता है।

रेफरेन्स काउंट

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

अडड्रेफ को कब कॉल करना है और सीओएम ऑब्जेक्ट्स पर रिलीज़ करना है, इसके लिए निम्नलिखित दिशानिर्देश हैं:

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

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

प्रोग्रामिंग

सीओएम एक भाषा-स्वतंत्र विनिर्देश बाइनरी मानक है जिसे किसी भी प्रोग्रामिंग भाषा में विकसित किया जा सकता है जो इसके बाइनरी परिभाषित डेटा प्रकारों और इंटरफ़ेस को समझने और कार्यान्वित करने में सक्षम है। सीओएम कार्यान्वयन सीओएम वातावरण में प्रवेश करने और छोड़ने, सीओएम ऑब्जेक्ट्स को तत्काल और संदर्भ-गणना करने, समर्थित इंटरफ़ेस के लिए ऑब्जेक्ट क्वेरी करने, साथ ही साथ त्रुटियों को संभालने के लिए ज़िम्मेदार हैं। माइक्रोसॉफ्ट विज़ुअल सी ++ कंपाइलर सी ++ एट्रिब्यूट्स के रूप में संदर्भित सी ++ भाषा के एक्सटेंशन का समर्थन करता है।[13] ये एक्सटेंशन सीओएम विकास को आसान बनाने और C++ में सीओएम सर्वरों को लागू करने के लिए आवश्यक बॉयलरप्लेट कोड को हटाने के लिए डिज़ाइन किए गए हैं।[14]


रजिस्ट्री उपयोग

विंडोज में, सीओएम क्लासेस, इंटरफ़ेस और टाइप लाइब्रेरी को GUID द्वारा विंडोज रजिस्ट्री में सूचीबद्ध किया गया है, HKEY_CLASSES_ROOT\CLSID के तहत कक्षाओं के लिए और HKEY_CLASSES_ROOT\Interface इंटरफ़ेस के लिए सीओएम लायब्रेरी प्रत्येक सीओएम ऑब्जेक्ट या किसी दूरस्थ सेवा के लिए नेटवर्क स्थान के लिए या तो सही स्थानीय लायब्रेरी का पता लगाने के लिए रजिस्ट्री का उपयोग करें।

पंजीकरण मुक्त कॉम

पंजीकरण-मुक्त सीओएम (RegFree सीओएम) विंडोज़ एक्सपी के साथ प्रारम्भ की गई एक तकनीक है जो कॉम्पोनेन्ट ऑब्जेक्ट मॉडल (सीओएम) सॉफ़्टवेयर कॉम्पोनेन्ट को सक्रियण मेटा डेटा और सीएलएसआईडी को संग्रहीत करने की अनुमति देती है (Class ID) विंडोज़ रजिस्ट्री का उपयोग किए बिना कॉम्पोनेन्ट के लिए। इसके बजाय, कॉम्पोनेन्ट में लागू वर्गों के मेटाडेटा और सीएलएसआईडी को एक मेनिफेस्ट (सीएलआई) (एक्सएमएल का उपयोग करके वर्णित) में घोषित किया जाता है, या तो निष्पादन योग्य संसाधन के रूप में या कॉम्पोनेन्ट के साथ स्थापित एक अलग फ़ाइल के रूप में संग्रहीत किया जाता है।[15] यह एक ही कॉम्पोनेन्ट के कई संस्करणों को अलग-अलग निर्देशिकाओं में स्थापित करने की अनुमति देता है, जो उनके स्वयं के प्रकटीकरण के साथ-साथ XCOPY परिनियोजन द्वारा वर्णित है।[16] इस तकनीक में EXE सीओएम सर्वरों के लिए सीमित समर्थन है[17] और सिस्टम-व्यापी कॉम्पोनेन्टों जैसे माइक्रोसॉफ्ट डेटा एक्सेस कॉम्पोनेन्ट, MSएक्सएमएल, डायरेक्टX या इंटरनेट एक्स्प्लोरर के लिए उपयोग नहीं किया जा सकता है।

एप्लिकेशन लोड होने के दौरान, विंडोज लोडर मेनिफेस्ट की खोज करता है।[18] यदि यह मौजूद है, तो लोडर इससे सक्रियण संदर्भ में जानकारी जोड़ता है।[16]जब सीओएम क्लास फ़ैक्टरी किसी क्लास को इंस्टेंट करने की कोशिश करती है, तो सक्रियण संदर्भ को पहले यह देखने के लिए चेक किया जाता है कि क्या सीएलएसआईडी के लिए कार्यान्वयन पाया जा सकता है। केवल अगर लुकअप विफल हो जाता है, तो विंडोज़ रजिस्ट्री स्कैन की जाती है।[16]


मैन्युअल रूप से सीओएम ऑब्जेक्ट्स को इंस्टेंट करना

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

प्रक्रिया और नेटवर्क पारदर्शिता

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

थ्रेडिंग

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

अपार्टमेंट का प्रकार विवरण
सिंगल-थ्रेडेड अपार्टमेंट[22] ( एसटीए), (थ्रेडिंग मॉडल = अपार्टमेंट) ऑब्जेक्ट के तरीकों को निष्पादित करने के लिए एक एकल धागा समर्पित है। ऐसी व्यवस्था में, अपार्टमेंट के बाहर थ्रेड्स से विधि कॉल मार्शल हैं और स्वचालित रूप से सिस्टम द्वारा कतारबद्ध हैं (एक मानक विंडोज संदेश कतार के माध्यम से)। इस प्रकार, सीओएम रन-टाइम यह सुनिश्चित करने के लिए स्वत: सिंक्रनाइज़ेशन प्रदान करता है कि किसी ऑब्जेक्ट की प्रत्येक विधि कॉल हमेशा दूसरे को लागू करने से पहले पूरा करने के लिए निष्पादित की जाती है। इसलिए डेवलपर को थ्रेड लॉकिंग या दौड़ की स्थिति के बारे में चिंता करने की ज़रूरत नहीं है।
मल्टी-थ्रेडेड अपार्टमेंट[23] ( एमटीए), (थ्रेडिंगमॉडल=फ्री) सीओएम रन-टाइम कोई सिंक्रनाइज़ेशन प्रदान नहीं करता है, और एकाधिक थ्रेड्स को सीओएम ऑब्जेक्ट को एक साथ कॉल करने की अनुमति है। इसलिए सीओएम ऑब्जेक्ट्स को दौड़ की स्थिति उत्पन्न करने से एकाधिक धागे से एक साथ पहुंच को रोकने के लिए अपना स्वयं का सिंक्रनाइज़ेशन करने की आवश्यकता होती है। किसी एसटीए में किसी थ्रेड से किसी एमटीए ऑब्जेक्ट के लिए कॉल भी मार्शल किए जाते हैं।
गतिशील रूप से निर्धारित अपार्टमेंट (थ्रेडिंगमॉडल = दोनों) दोनों अपार्टमेंट मोड में, सर्वर कॉलिंग थ्रेड के अपार्टमेंट प्रकार से मिलान करने के लिए ऑब्जेक्ट निर्माण पर एसटीए या एमटीए का स्वतः चयन करता है।[24] यह ओवरहेड मार्शलिंग से बचने के लिए उपयोगी हो सकता है जब एमटीए सर्वर को एसटीए थ्रेड द्वारा एक्सेस किया जाता है।
थ्रेड न्यूट्रल अपार्टमेंट (एनए), (थ्रेडिंगमॉडल=न्यूट्रल) बिना किसी नियत धागे के एक विशेष अपार्टमेंट। जब एक एसटीए या एमटीए थ्रेड एक एनए ऑब्जेक्ट को उसी प्रक्रिया में कॉल करता है, तो कॉलिंग थ्रेड अस्थायी रूप से अपना अपार्टमेंट छोड़ देता है और बिना किसी थ्रेड स्विचिंग के एनए में सीधे कोड निष्पादित करता है।[25] इसलिए, कोई भी कुशल इंटर-अपार्टमेंट विधि के लिए NA को एक अनुकूलन के रूप में सोच सकता है।

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







आलोचना

चूंकि सीओएम का कार्यान्वयन काफी जटिल है, प्रोग्रामर कुछ प्लंबिंग मुद्दों से विचलित हो सकते हैं।

संदेश पम्पिंग

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

रेफरेन्स काउंट

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

डीएलएल हेल

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

यह भी देखें







टिप्पणियाँ

  1. "दस्तावेज़ीकरण संग्रह". developer.apple.com.
  2. "प्लग-इन और माइक्रोसॉफ्ट के COM". Apple Inc. Retrieved October 5, 2010.
  3. Microsoft forum: Binary compatibility across Visual C++ versions
  4. "नेटवर्क डीडीई के बारे में - विंडोज़ अनुप्रयोग". Microsoft.com. May 30, 2018.
  5. "Code Execution Technique Takes Advantage of Dynamic Data Exchange". McAfee.com. October 27, 2017.
  6. Brown, Nina; Kindel, Charlie (March 11, 1998). "draft-brown-dcom-v1-spec-03 - Distributed Component Object Model Protocol -- DCOM/1.0". Ietf Datatracker. Retrieved August 29, 2019.
  7. rpetrusha. "रनटाइम कॉल करने योग्य रैपर". msdn.microsoft.com.
  8. rpetrusha. "COM कॉल करने योग्य रैपर". msdn.microsoft.com.
  9. Steinberg, Jill (March 1, 1997). "कांटेदार पैनलिस्ट के लिए प्रतिस्पर्धी घटक बनाते हैं". JavaWorld. Retrieved 2020-07-16.
  10. "win32com Documentation Index". docs.activestate.com.
  11. "पायथन और कॉम". www.boddie.org.uk.
  12. "कंपाइलर कॉम सपोर्ट". MSDN. Microsoft.
  13. Microsoft MSDN: C++ Attributes Reference
  14. MSDN Magazine: C++ Attributes: Make COM Programming a Breeze with New Feature in Visual Studio .NET
  15. "विधानसभा प्रकट". MSDN. Retrieved November 5, 2009.
  16. 16.0 16.1 16.2 Dave Templin. "क्लिकऑन और पंजीकरण-मुक्त COM के साथ ऐप परिनियोजन को सरल बनाएं". MSDN Magazine. Retrieved April 22, 2008.
  17. "किसी आउट-ऑफ़-प्रोसेस COM सर्वर का उसकी tlb फ़ाइल के बिना उपयोग कैसे करें". Retrieved April 16, 2011.
  18. "पृथक अनुप्रयोगों और साथ-साथ असेंबलियों की अवधारणा". MSDN. Retrieved February 5, 2016.
  19. Arkhipov, Mikhail (April 1, 2005). "पंजीकरण मुक्त कॉम". MSDN Blogs. Retrieved April 29, 2016.
  20. "DllGetClassObject प्रवेश बिंदु (COM)". MSDN. If a call to the CoGetClassObject function finds the class object that is to be loaded in a DLL, CoGetClassObject uses the DLL's exported DllGetClassObject function.
  21. Microsoft MSDN: Processes, Threads, and Apartments
  22. Microsoft MSDN: सिंगल-थ्रेडेड अपार्टमेंट
  23. Microsoft MSDN: मल्टीथ्रेडेड अपार्टमेंट्स
  24. Microsoft MSDN: us/library/ms809971.aspx COM थ्रेडिंग मॉडल को समझना और उपयोग करना
  25. Codeguru: /cpp/com-tech/activex/apts/article.php/c5529/Understanding-COM-Apartments-Part-I.htm COM अपार्टमेंट्स को समझना


संदर्भ


बाहरी संबंध