2009-10-29 6 views
11

मैं COM के लिए नया हूं, और मुझे नहीं पता कि यह क्या है या यह क्यों मौजूद है।घटक ऑब्जेक्ट मॉडल (COM) क्या है? क्या यह भाषा-निर्भर है?

क्या यह ओओपी जैसी प्रोग्रामिंग पद्धति है? प्रोग्रामिंग भाषाओं को इसका समर्थन करना है?

जब मैं इसके बारे में मेरे प्रोफेसर से पूछा (कुछ विशेष कीवर्ड या कुछ और के साथ), उन्होंने कहा:

कॉम OOP करने के लिए एक द्विआधारी स्थिर तरीका है। हमें बाइनरी लेआउट (कुछ ... कुछ ..)

मुझे नहीं पता कि इसका क्या अर्थ है। कुछ लोग कहते हैं कि इसका उपयोग कोड पुन: उपयोग के लिए किया जाता है। ओओपी पहले से ही एक अच्छी नौकरी करता है, तो फिर यह COM पहली जगह क्यों विकसित हुई?

सी ++ और COM के साथ क्या है? जहां भी मैं COM देखता हूं, यह हमेशा सार C++ उदाहरणों के साथ वर्णित है। क्या यह केवल सी ++ के लिए है?

क्या कोई मुझे एक केस या एक्समैपल दिखा सकता है ताकि मैं COM की आवश्यकता को समझ सकूं? इसे सीखने के लिए क्या आवश्यकताएं हैं, इसलिए मैं अपने स्वयं के घटक लिख सकता हूं?

+0

"अपने स्वयं के घटकों को लिखने के लिए इसे सीखने के लिए क्या आवश्यकताएं हैं?" एक महत्वपूर्ण विचार: क्या आपको इन घटकों के लिए COM का उपयोग करने की आवश्यकता है? COM आजकल मूल रूप से विरासत है: आपको उन वातावरणों की आवश्यकता है जो पहले से ही विंडोज एक्सप्लोरर की तरह COM- आधारित हैं, लेकिन ज्यादातर स्थितियों के लिए आपको .NET का उपयोग करने की अधिक संभावना होगी, DCOM के साथ मैसेजिंग (उदा। डब्लूसीएफ) द्वारा प्रतिस्थापित किया जाएगा। जब तक आपके पास एक विशिष्ट उपयोग केस नहीं है जिसके लिए COM (या आप आम तौर पर घटक आर्किटेक्चर में रूचि रखते हैं) की आवश्यकता होती है, तो शायद यह अभी सीखने के लिए एक महान तकनीक नहीं है। – itowlson

+2

मुझे लगता है कि आप इतने सारे C++ उदाहरण देखते हैं कि COM ऑब्जेक्ट का इन-मेमोरी लेआउट वर्चुअल फ़ंक्शंस के साथ सी ++ क्लास जैसा ही है। कुछ मामूली मतभेद हो सकते हैं जिन्हें मुझे याद नहीं है, लेकिन सी ++ कम से कम ज्यादातर समय COM वस्तुओं का उपयोग कर सकते हैं। – rmeador

उत्तर

7

इसके मूल पर COM डेटा-पासिंग अनुबंध प्रदान करने का एक तरीका है जो किसी भी विशिष्ट भाषा से स्वतंत्र है।

    : यह provably निर्भर भाषा नहीं है, वहाँ के रूप में कई भाषाओं जो COM का समर्थन कर रहे हैं

    व्यवहार में यह अलग उदाहरण के एक जोड़े के लिए उपयोगी है (वहाँ C++, C, .नेट, और जावा कार्यान्वयन कर रहे हैं)

  1. विभिन्न भाषाओं के बीच संचार: चूंकि COM भाषा स्वतंत्र है, इसलिए विभिन्न भाषाओं में घटकों के बीच डेटा पास करने के लिए COM का उपयोग करना संभव है। उदाहरण के लिए आप सी ++, जावा और .NET कोड के बीच बात करने के लिए COM का उपयोग कर सकते हैं।
  2. थ्रेडिंग सेमेन्टिक्स: COM आपको किसी विशेष घटक के लिए थ्रेडिंग सेमेन्टिक्स को परिभाषित करने की अनुमति देता है ताकि यह सुनिश्चित किया जा सके कि यह उचित थ्रेड संदर्भ में बनाया गया हो, चाहे इसका उपयोग कहीं भी हो।
  3. सामान्य घटककरण।
+0

>> "ऐसी कई भाषाएं हैं जो COM का समर्थन करती हैं" तो, किसी भाषा को इसका समर्थन करना चाहिए? एक भाषा की तरह ओओपी का समर्थन करना चाहिए? यदि हां, तो ऐसा क्यों है कि मैंने "ऑब्जेक्ट ओरिएंटेड लैंग्वेज जैसे कंपोनेंट ओरिएंटेड लैंग्वेज" के बारे में कभी नहीं सुना? – claws

+0

@claws, किसी भी भाषा विशिष्ट समर्थन के बिना किसी भाषा में COM परत को कार्यान्वित करना वास्तव में संभव है। अनिवार्य रूप से एक एपीआई के रूप में एक COM serializer और संदेश पासर लिखना। मैं * सोचता हूं * इस तरह जावा का कार्यान्वयन काम करता है लेकिन जब से मैंने इसका सामना किया, यह एक लंबा समय रहा है। – JaredPar

+4

COM बिल्कुल भाषा समर्थन की आवश्यकता नहीं है। शुरुआत से सादे ओल 'सी में कोई भी COM ऑब्जेक्ट बनाने और उपयोग करने के लिए संभव नहीं है, कोई भाषा समर्थन नहीं, केवल मैक्रोज़ का एक गुच्छा।COM के मूल सी ++ कार्यान्वयन भी मैक्रो-आधारित थे, बिना भाषा परिवर्तन के; आज भी मुझे लगता है कि COM का कोर अभी भी भाषा परिवर्तनों के बजाय मैक्रोज़ के माध्यम से लागू किया गया है (वहाँ _com_ptr_t जैसे सहायक प्रकार हैं, लेकिन ये सहायक हैं, कोर नहीं)। – itowlson

3

थोड़ी देर सोच के बाद, मैं आप विचार समझ के लिए होगा यह डाल करने के लिए सबसे अच्छा तरीका लगता है:

कॉम प्रणाली में Windows API का विस्तार और अन्य कस्टम पुस्तकालयों को प्रकाशित करने के लिए एक रास्ता है, इसलिए कि आप अपने नए एप्लिकेशन को उसी एप्लिकेशन में खोज और काम कर सकते हैं, बिना किसी एप्लिकेशन के आपके एप्लिकेशन को पुन: संकलित करने की आवश्यकता।

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

यह तंत्र भाषा-स्वतंत्र माना जाता है, इसलिए किसी भी भाषा में लिखे गए किसी भी आवेदन को उन इंटरफेस को कॉल करने और उन पुस्तकालयों के संचालन का आह्वान करने में सक्षम होना चाहिए। अभ्यास में, हालांकि, कुछ भाषाएं कुछ COM प्रकारों का समर्थन नहीं करती हैं, इसलिए उन्हें सीमित COM क्षमताओं मिलती हैं।

टिप्पणी में अपने प्रश्न का उत्तर देना:

कॉम कुछ भी स्थापित करने की आवश्यकता का उपयोग करें।WinAPI फ़ंक्शंस के रूप में सबकुछ पहले से मौजूद है, जिसे आप बस अपने एप्लिकेशन में कॉल कर सकते हैं। COM ऑब्जेक्ट को तुरंत चालू करने के लिए DllGetClassObject और CoGetClassObject का उपयोग किया जाता है। CoRegisterClassObject का उपयोग सिस्टम में आपके पुस्तकालयों में निहित COM ऑब्जेक्ट्स को पंजीकृत करने के लिए किया जाता है।

COM वस्तुओं के साथ समान निर्माण और बातचीत को सक्षम करने के लिए, उनकी रचना वर्ग कारखानों को सौंपा गया है, ये सहायक प्रकार की सहायक वस्तुएं हैं। आप CoGetClassObject को कॉल करते हैं और आपको उस ऑब्जेक्ट के क्लास फैक्ट्री से बात करने के लिए कहते हैं जो आपको चाहिए। उस कक्षा पुस्तकालय में इंटरफ़ेस को देखते हुए, आप इसे आवश्यक ऑब्जेक्ट को तुरंत चालू करने के लिए कहते हैं। फिर आप ऑब्जेक्ट्स को इंटरफेस के माध्यम से प्रकट कर सकते हैं। Component Object Model

+0

मुझे लगता है .. COM एमएस विंडोज के लिए है। जावाबीन, कॉरबा अन्य ऑपरेटिंग सिस्टम पर COM के लिए विकल्प हैं। सही? क्या मुझे अन्य ओएसई पर COM विकल्प का उपयोग करने के लिए किसी भी सॉफ्टवेयर को स्थापित करने की आवश्यकता है? बिल्कुल MSWindows का घटक है जो इन घटकों के प्रबंधन किया जाएगा? – claws

+0

कॉम वास्तव में पार मंच वातावरण में इस्तेमाल किया जा सकता, यह सिर्फ उसके प्रकार सभी ग्राहकों जो हमेशा ऐसा नहीं होता द्वारा समझा जा करने की जरूरत है। –

1

Component Object Model एक मानक माइक्रोसॉफ्ट द्वारा परिभाषित किया गया है, एक भाषा-स्वतंत्र द्विआधारी वस्तु इंटरफेस के लिए, यानी यह वस्तुओं और कॉल तरीकों के आसपास पारित करने के लिए सक्षम बनाता है विभिन्न OO भाषाओं है:

विकिपीडिया पर इस संक्षिप्त सिंहावलोकन पर एक नज़र डालें उन पर।

+1

भाषा ओओ नहीं होने की आवश्यकता है। यह संभव है, वास्तव में वास्तव में अजीब, सीओ घटकों के साथ संवाद करने के लिए सी जैसे गैर-ओओ भाषाओं का उपयोग करने के लिए। – JaredPar

5

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

उद्देश्य "द्विआधारी पुन: उपयोग" की अनुमति देना था जिसका अर्थ है कि एक कोड घटक को कई क्लाइंट कोड घटकों द्वारा पुन: उपयोग किया जा सकता है, कि मूल कोड घटक के बारे में कुछ भी नहीं पता था, और जो अस्तित्व में भी नहीं था जब घटक मूल रूप से संकलित किया गया था । के मूल आर्किटेक्ट कॉम, डॉन बॉक्स में से एक से उद्धृत करने के लिए:

[...] कॉम के डिजाइन प्रतिमान था कि घटक ठेके प्रकार परिभाषाएं के रूप में व्यक्त कर रहे हैं। यह विश्व कॉम से एक कदम आगे था, जिसमें अनुबंधों को केवल सरल कार्यात्मक प्रविष्टि बिंदुओं के रूप में व्यक्त किया गया था। इस संबंध में, COM एक प्रमुख अग्रिम था क्योंकि यह कोड की गतिशील लोडिंग और टाइप सिस्टम को एक साथ लगातार तरीके से लाया गया था ।

संबंधित मुद्दे