国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

COM,Component Object Model 簡介

這篇具有很好參考價值的文章主要介紹了COM,Component Object Model 簡介。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

COM,Component Object Model 簡介

1. COM 是什么

COM 的英文全稱是,Component Object Model,中文譯為,組件對象模型。它官方的概念是:

The Microsoft Component Object Model (COM) is a platform-independent, distributed, object-oriented system for creating binary software components that can interact. 

與其說 COM 是 System,更確切的說,應該叫做 Standard。因為它實際上是一套公共的 binary 標準,用于規(guī)定 software component 的接口的標準。也有人會把 COM 叫做 Common Object Model,但這其實是一種誤傳,起源于當初一名微軟的工作人員 Mark Ryland!

但是,在長期的使用中,大家口中念叨的 COM 漸漸生出了各種各樣的含義,已經(jīng)不僅僅是最初的含義了。這也是為什么,對于初學者來說,理解起來特別費勁。因為總會查到層出不窮,又參差不齊的含義,讓人很疑惑到底哪個含義才是標準!

  • 首先,在系統(tǒng)設計上,它是一種設計理念
  • 然后,在 Object 的世界中,它是那個世界中的規(guī)范和標準
  • 再然后,在編程語境下,它是一種可以調用的其他程序的接口
  • 再然后,在實際的電腦文件中,它多數(shù)是一個個DLL 文件
  • 最后,在內部性質上,它是一個個二進制Binary的小程序

其實在我 Research 的時候,這些概念也是最頭疼的地方。因為對 COM 概念的不了解,所以無法區(qū)分在不同視角,或者不同角度下的概念。而在 Research 的時候,往往會看到很多不同的網(wǎng)頁,給出各種 COM 的概念。而讓人頭疼的就是,這些概念都不統(tǒng)一,讓人無法理解。甚至開始懷疑,這些網(wǎng)頁真的都是說的同一個東西的概念么?這種混亂,就是因為,不同的網(wǎng)站,在解釋 COM 的時候,用的是不同的角度。而同一個東西,在不同的角度和情景之下,自然會有不同的含義。所以,往往 COM 到底是什么,要因情景而視之!但是,上面列出的幾個角度,已足以讓我們對 COM 的概念,構建出一個較為立體的理解了!

COM就是一個可以用于構造組件的模型。組件就是一個程序包(Package)或者一段功能模塊(module),或者說是一個可執(zhí)行程序(EXE)或DLL。作為一種模型,COM組件對象模型規(guī)范(The Component Object Model Specification)的正式文獻中完整地給出了定義。該文獻制訂了一個二進制標準,允許異構型組件無縫地相互協(xié)同工作。COM就是這樣的一個二進制標準,允許異構型組件無縫地相互協(xié)同工作。COM就是這樣的一個二進制標準,因為它允許一個組件在無需另一組件源代碼的情況下,重用該組件。除了作為二進制標準,COM還指定了一系列規(guī)范和要求,用以構件軟件組件。然而,它僅僅是一種規(guī)范,并不強制使用某種特定的語言、工具或操作系統(tǒng)來創(chuàng)建組件的軟件。

2. 科技歷史與 COM 的由來

要了解 COM 的歷史由來,我們首先要從科技發(fā)展的歷史開始捋順下來。先說 Object Oriented 這種概念,其實,這種概念據(jù)說是19世紀60年代就有了,是源自于 MIT。但是那個時候 PC 還沒有普及,大多數(shù)公司使用的都是十分昂貴的大型機,微軟還沒有成立,這種情況下,自然對軟件的需求也是非?;镜模蠖鄶?shù)停留在數(shù)學計算,文字處理,和軍事使用的范圍。而且那個時候,CPU 的概念都還沒出現(xiàn),自然電腦也是不可能具備足夠的運算能力的。第一個 CPU,是 Intel 在 1971 年,為完成一家日本公司的訂單而設計發(fā)明的,自此才解鎖的計算的巨大潛力,進入了現(xiàn)代計算機的篇章。而 CPU 的發(fā)展與成熟,才造就了后來的軟件行業(yè)。微軟也于 1975 年正式成立。同年,IBM 也開始生產(chǎn) Portable Computers。那時起,微型電腦開始變成潮流。Microsoft BASIC 這種最早期的編程語言,也誕生于 1975年。那時候,絕大多數(shù)的微型電腦,雖然系統(tǒng)都不同,但是幾乎都支持 BASIC 這種編程語言。正是這種編程語言,成為了日后微軟的基礎。1981年,微軟首次為 IBM 提供了操作系統(tǒng),叫做 QDOC,是微軟的第一套系統(tǒng),但卻是買來的,別人研發(fā)的系統(tǒng)。1983年,微軟研發(fā)出了 Lotus Software,是最早期的電子表格軟件,這個軟件成為了 IBM 電腦上的明星軟件,裝機必備。后來 1985年 Windows 1 誕生了,同時伴隨著 Microsoft Excel 的誕生。自此之后,軟件行業(yè)開始變得日益繁榮,微軟也開啟了自己的軟件帝國。

軟件行業(yè)變得日益繁榮,但是 Object Oriented 這種思想,還并沒有發(fā)展到一定的高度。那時候,開發(fā)個軟件或者系統(tǒng)是非常麻煩,非常復雜的。日后,想給軟件添加一個功能,或者升級一個功能時,就更麻煩,因為,沒辦法獨立的,去更新,或者改進,某一個特定的功能。若想要添加新功能,需要全盤改動后,再重新進行編譯,非常的費時費力。于是人們就開始想辦法解決,上面這個問題,然后 Object Oriented Programming(面向對象的編程)的概念就開始興起。這時,雖然面向對象編程的概念已經(jīng)興起,但是,還沒有統(tǒng)一的 Framework 或者說是標準,能讓不同軟件之間里的 Object 可以互相交流。于是,不同的軟件,就變成了一個個,孤立在大海中的小島,里面住著一堆 Objects,無法和外界交流。人們想出的解決辦法就是,開發(fā)一個系統(tǒng)或者體系,在這個體系中,寫軟件的人只需要制造出,Software Component 就行了。而,這個 Component 就像是,買回來一個,方塊形的,電子配件一樣,插在我們自己的電路板上,就可以開始發(fā)揮作用。而這些,Software Component 外表上,必須遵循系統(tǒng)中的統(tǒng)一標準,而內部,就隨便怎么編程都可以。后來,微軟在1993年,開發(fā)出了這個標準,這標準就被叫做,Component Object Model (COM)。

我們再把 COM 形成前后的,技術發(fā)展,掰開來看下。首先,在 1987年,也就是在 Windows 2 發(fā)行的時候,Dynamic Data Exchange (DDE) 技術產(chǎn)生了,作為一種進程間通信手段(Inter-process communication)。在這個技術之前,只支持系統(tǒng)和客戶端應用程序之間的通信,這個通信,則是通過 Windows Messaging Layer 實現(xiàn)的。而 DDE 技術,則再此基礎之上,實現(xiàn)了客戶端應用程序之間的通信,這也就成為了進程間通信技術的開端。但這時的通信,還只是停留在 Text conversations 和 Windows messages 的層面上。之后 Antony Williams 分別于 1988年 和 1990年 發(fā)表了兩篇微軟內部文章,分別是 【Object Architecture: Dealing With the Unknown】和【On Inheritance: What It Means and How To Use It】。正是兩篇文章奠定了日后 COM 產(chǎn)生的理論基礎。之后,1991年,微軟在 DDE 的基礎上,開發(fā)出了第一個 object-based framework(基于對象的框架),叫做 Object Linking and Embedding (OLE),即對象的連接與嵌入。

這個技術是同 Word 軟件的發(fā)行一同發(fā)布的,專注于實現(xiàn) Compound document(復合型文件),就是將 Excel 文件,嵌入到 Word 中。同在 1991年,微軟發(fā)布了 Visual Basic 1.0 編程語言,并以 dynamic-link library (DLL) 的形式,附帶了 Visual Basic Extensions (VBX) 插件。這個插件讓使用者,可以通過 Properties and Methods 來操控 objects (對象)。1992年,隨著 Windows 3.1 的發(fā)布,OLE2 和它自己的 Object Model,也一同發(fā)布了。和 OLE1 不同,OLE2 是在 COM 概念的基礎上重新實施的。這時的 COM Application binary interface (ABI),即 COM 應用接口的標準也發(fā)生了改變。1994的時候,微軟宣布,OLE2 改名為 OLE,從此 OLE 變成了微軟組件技術(Component Technologies)的統(tǒng)稱。同年還發(fā)布了 OLE Custom Controls (OCXs) ,作為 VBX 的升級版。后來,在1995年,微軟發(fā)布了 Visual Basic 4.0,開始支持 OCXs,這時微軟也開始考如何讓 COM 組件可以實現(xiàn)跨語言支持。這就要求,COM 架構下,必須要提供一個一致的接口,以及提供一組可以調用接口內方法的能力。此后,才發(fā)展成了我們現(xiàn)今熟悉的 COM 的含義。在1996年,微軟有發(fā)現(xiàn) OCXs 可以應用在瀏覽器上,所以就把部分 OLE 改名為 Internet “ActiveX”,然后,逐漸的,所有的 OLE 都改名叫做 ActiveX 了。同年后期,微軟又拓展了 COM 的能力,使得組件對象,擁有了在網(wǎng)絡上通信的的能力。這個技術被稱為 DCOM (Distributed COM)。自此便形成了今時今日的 COM 的概念。

3. 接口(Interface)周圍的概念

個人認為,關于 COM,的一切的一切,最后都是為了這個“接口”。因為只有有了“接口”,才算是真正的實現(xiàn)了 Component Object 的理念(或者說,才算是實現(xiàn)了,把 Object 變成 Component 的想法)。因為只有有了“接口”,Component 才能被叫做組件,才能被調用。所以下面簡單描述下,幾個常見的,圍繞著“接口”的概念。

3.1 API (Application Programming Interface)

API 中文為,應用程序編程接口;很多時候,都被直接叫做 接口 (Interface)。接口操作系統(tǒng)程序庫,提供給應用程序的,接入點,讓應用程序能調用,系統(tǒng)某一方面的功能。其主要作用是,讓開發(fā)人員,可以輕松調用這些功能,而不需要了解,到底怎么做到的,和底層代碼。但是,API 并不是代碼,他只是一個接口,或者說只是一個地址。

3.2 IDL(Interface Defining Language)

IDL 中文為,接口描述語言。它是一種 Specification language(規(guī)范語言)。是用來描述,軟件 Component 的 API 的 “規(guī)范語言”。與之相比,Programming Language(編程語言)是可以直接運行,用于系統(tǒng)實現(xiàn)的,形式語言。而,“規(guī)范語言” 是通常不能直接運行的,而是用于系統(tǒng)分析和設計的,描述語言。然后,這些一段一段的用來描述 Interface 的文字,就被儲存在了 IDL 文件中(文件后綴就是 .idl)。每個這樣的文件里面都有,一個 header 和一個 body。格式很整齊。

3.3 OLE (Object Linking and Embedding)

OLE 中文為,對象鏈接與嵌入。是能讓應用程序創(chuàng)建,包含不同來源的文檔,的復合文檔技術。OLE 是建立在 COM 理念的基礎之上的。COM 是理論框架,而 OLE 是根據(jù)這個框架,實施出來的一套技術。正如之前在,PC Mag 雜質上看到的一個副標題,就很好的詮釋了這種關系型:

COM-the master plan that lets Windows apps interact through OLE.

一個比較常見的例子就是,把 Excel 表格,整個插入到 Word 文檔中。而這個 Excel Object,就是通過這個 OLE 技術,連接并嵌入(Linking and Embedding)到 Word 中的。但,正如上文所說,后來 OLE 就變成了,微軟組件技術(Component Technologies)的統(tǒng)稱。而,像這樣的一個典型的 OLE 功能(或 OLE 特性),其背后是有一大堆,Interface(接口)作為支持,才得以實現(xiàn)的。

3.4 GUID (Globally Unique Identifier)

GUID 中文為,全局唯一標識符,也被稱為,UUID (Universally Unique Identifier),即,通用唯一識別碼。是一個用于標識信息的,128-bit的,標識符;由一組,32位數(shù)的,16進制的,數(shù)字組成。數(shù)字串,的格式為 8-4-4-4-12 的32個字元;大概長成這樣:550e8400-e29b-41d4-a716-446655440000。GUID 具有全球唯一性,出現(xiàn)重復的概率幾乎為零。所以才叫做,全局唯一標識符。

3.5 CLSID (Class IDentifier)

CLSID 中文為,類標識符。是一個 GUID,但是,是專門用于,標識 COM class object 的。每一個 OLE Class,都會有一個與之對應的,全球獨一的 CLSID。

3.6 ProgID (PROGrammatic IDentifier)

ProgID 可以翻譯為,程序標識符,或者,編程標識符。通常情況下,每個 CLSID,都會有對應的 ProgID。例如,ProgID 是 Msxml2.DOMDocument 的字符串;而 CLSID 則長成這個樣子 {F9043C85-F6F2-101A-A3C9-08002B2F49FB}。所以 ProgID 的存在,是為了編程的時候,方便調用。

3.7 Registry (Windows)

Registry 中文為,注冊表。它是一個 hierarchical database (分層的數(shù)據(jù)庫)。用于儲存 Windows 系統(tǒng),或者應用程序的 low-level settings。但并不是,所有的應用程序都選擇把設置,存在注冊表里。Registry 是從 Windows 3.0,推出 OLE 的時候,開始有的。在那之前,應用程序都是把自己的設置信息存在一個后綴為 .ini 的文本文件中的。除了設置之外,所有的 OLE Objects 的 CLSID, 也都儲存在這個 Registry 中。感興趣的同學可以去 Regedit.exe 中,這個位置 HKEY_LOCAL_MACHINE\SOFTWARE\Classes\CLSID 看下,所有的 CLSID 都長成什么樣。而在每個 CLSID 的“文件夾”中,又都會儲存著,這個 Class 的 ProgID 的名字。

4. 調用組件的流程

閱讀到這里的同學,應該已經(jīng)對基本的概念有一些了解。那么我們就再來看下,在實際運行中,Component(組件)到底是怎么被調用的。就用在 Word 里面插入一張 Bitmap Image 來舉例;當我們在 Word 程序里,點擊插入 Object 的時候,Word 會彈出,插入對象的對話框。然后,程序會立刻開始掃描,系統(tǒng)的 Registry,看哪些 Object 是能夠插入的,然后,把它們都列在你面前,供你選擇。當你選中 Bitmap Image 這個對象后,程序會,立刻調出他的 ProgID 名字,然后,把這個名字,遞給一個叫做 CoCreateInstance 的 OLE Function。再然后,在這個 Function 的內部,就開始了一系列流程。

首先 OLE 會用立刻這個 ProgID(或者 CLSID)去找出與它對應的 Regstry 條目。然后,通過注冊表里登記的信息,便可以輕易的找到,提供這個“服務”的,應用程序,或者 Component(.exe 或者 .dll)到底住在哪里。一旦找到了,便可以立刻調用(Invoke)這個 Component,然后創(chuàng)建出,一個 Bitmap 對象的 Instance(這個Instance,似乎也叫做 Interface Pointer)。

這和我們寫代碼的時候是一樣的,在我們要使用某個模塊的功能之前,都是先通過 PorgID 創(chuàng)建一個 Instance(例如,在 VBScript 中,通常是用Set XL = CreateObject("Excel.Application")這樣的語句)。然后通過這個 Instance,和它提供的 Interface(接口),我們就可以開始調用,這個實例的各種屬性和功能了(例如 XL.Workbooks.Open("FilePath"))。

5. DCOM:分布組件對象模型

5.1 概述

在 Microsoft 推出 Windows NT4.0 之后,以往只有在大型主機或者工作站上才可能出現(xiàn)的分布式處理終于可以在PC的世界中工作了。造成 Windows NT 可以成為企業(yè)計算環(huán)境。除了NT的日漸成熟和執(zhí)行效率增加以外,最重要的就是加入了DCOM(Distributed Component Object Model)的功能。Microsoft 在NT4.0 中第一次推出了該項技術,但是接著推出了DCOM For Windows95,在其推出的 Windows 98 中更內置了DCOM。它代表著使用 PC 環(huán)境也可以處理非常龐大和復雜的計算工作。通過該技術,PC級的程序員終于可以進入分布式對象的世界了。

Microsoft 的 COM 模型能夠讓同一臺計算機中的各種對象相互溝通和使用對方提供的服務,而 DCOM 則更進一步地讓不同的應用程序和對象可以在網(wǎng)絡中不同的計算機之間溝通。這意味相可以在應用程序中或者動態(tài)鏈接程序庫中建立對象,并且提供這個對象的各種服務,然后在另外一臺不同的機器中的應用程序可以調用這個對象的方法或者是訪問它的屬性值。 DCOM 為什么如此重要呢?圖為目前軟件發(fā)展的趨勢是走向以組件為基礎的分布式計算 , 而在不同的織件中需要一個相互溝通的通信協(xié)議。這就像 PC 中的各種適配器 , 它們是援在 PCI 和 ISA 等總線之上 , 通過總線和其他計算機組件跡行溝通。組件也需要一個相互溝通的總線 , 使用一致的通信協(xié)議來溝通,而 DCOM 就是這種組件的總線。它負責各種組件之間的信息傳遞。如果沒有 DCOM,那么就達不到分布計算環(huán)境的要求。

DCOM 是構造于 COM 之上的。在 COM 中,程序通過指定一個對象的ID(Class GUID)和要訪問的接口 ID,就能夠訪問這個對象的特定接口中的方法和屬性。

com架構,軟件工程,windows,microsoft,powerpoint

COM 模型中訪問對象接口中的方法或屬性如上圖所示,在 COM 的基札模型中,不同的應用程序和對象之間可以通過指定對象和接口 ID 來取得對方的服務 , 但這種模型是發(fā)生在同一臺計算機中。如果在 A 計算機中的應用程序或者對象希望訪問在計算機 B 中的特定對象的服務 , 應該怎么辦昵?在基本的 COM 模型中無法做到這一點,Microsoft 用 DCOM 解決了這個問題。如下圖所示 :

com架構,軟件工程,windows,microsoft,powerpoint

從上圖可以看出,在使用 DCOM 時和使用 COM 建立對象的方式是相同的,只需再加入一個機器名稱的參數(shù)。如果在 COM 中是使用 Windows API 的CoGetClassObject 建立對象的話,那么只需要再輸入機器名稱的參數(shù)即可在遠程指定的計算機中建立對象,并且取得指定接口的信息 . 簡單的說 , DCOM 是 COM 的延伸,它讓對象和接口的建立可以跨越不同的機器,并且保持和 COM 的兼容性。它構造于 RPC(Remote Procedure Call)的技術之上 , 并且使用 TCP/IP 作為網(wǎng)絡通信協(xié)議。 NT4.0 和 Win98 部直接支持 DCOM,Win95 中可以安裝 DCOM For Windows95 來支持它。Microsoft 對 DCOM 也在進行不斷的完善,例如在 NT4.0 的 Server Pack 1、Server Pack 2、Server Pack 3 以及 Server Pack 4 中 , 對 DCOM 的支持越來越好 , 其中在 Server Pack 2 中有一個 DCOM 非常重要的功能是開發(fā) N-Tier(多層)應用程序必須使用的?,F(xiàn)在 DCOM 已經(jīng)占據(jù)了非常重要的地位,Microsoft 的 SQL Server、Transaction Server. Message Queuing Seryer 等部充分利用 DCOM 來進行企業(yè)中的分布式計算。

5.2 COM/DCOM 包含的技術

COM 規(guī)范包含了幾種成功的技術包括:動態(tài)鏈接、口向對象的模型和客戶/服務器模型。

5.2.1 面向對象的模型

面向對象的編程之所以成功 , 正因為它支持封裝、繼承性和多態(tài)性。我們將簡要地回顧一下這些傳統(tǒng)概念。這樺 , 我們就可以大致了解 COM 是如何吸收斧改進它們的。

5.2.2 封裝性

封裝性(encapsulation)或者隱藏變量和可能存在的函數(shù),使調用程序只看到它所需要看到的信息,這是面向對象編程的重要原則。對議用程序隱藏了信息,對象就可以控制其內部變量并防止意外錯誤和非法的外部訪問發(fā)生。這一點十分重要,因為它在容許調用程序可靠地使用對象的同時,也使對象改變或增強其內部功能所需的維護最小化了。除了支持對狀態(tài)(state)和行為(behavior)的列集外,封裝允許我們把接口和實現(xiàn)分離開來??傮w來說,對象所發(fā)布的行為集合就稱為“接口“。外部世界與一個對象都是通過它發(fā)布的接口來相互作用的。將接口與實現(xiàn)分開意味著,這個世界無需理會那些隱藏在發(fā)布了的行為之后那些煩人的實現(xiàn)方法。這些行為在對象周園有效地構筑了一道柵欄,封裝和保護了對象內部的實現(xiàn)和數(shù)據(jù)。既然客戶只能看到發(fā)布了的行為 , 水遠看不到內部的實現(xiàn)和數(shù)據(jù),這樣就減少了對象與其客戶之間的糊合(coupling)。COM 不僅支持和吸收了封裝性 , 而且大力加強了這一概念。COM 要求區(qū)分接口與實現(xiàn)。在 COM 中 , 外部世界只知道一個對象支持的接口,而永遠無法看見這個對象的內部實現(xiàn)。憑借封裝的嚴格性,COM 贏得了它今天所擁有的卓然地位。這是因為,正確使用封裝,能夠獲得“黑盒“(black box)式的組件集成。此概念允詐在不破壞原完整系統(tǒng)的前提下 , 計組件在以后的一定時間里升級發(fā)展。

5.2.2.1 繼承性

繼承性(inheritance)可用于擴展或繼承類的狀態(tài)和行為。最初定義的類稱為“基類“(base class), 由它擴展所創(chuàng)建出來的新類秘為“派生類“(derived class)。簡單繼承提供接口和實現(xiàn)的重用性。這一概念強有力的地方在于:你不必通過不斷地復制和粘貼代碼來實現(xiàn)時可憐的代碼重用。通過繼承堆類 , 就可以得到基類建立的所有狀態(tài)和行為。更有吸引力的是實現(xiàn)繼承性 , 即重復使用先前寫好的代碼。

通常情況下,重用可以在源代碼級上完成,但是對于組件世界,重用可以在二進制級上完成。二進制級的代碼重用允許那些不同的軟件發(fā)行商不再受限于某種編程語言或工具,允許開發(fā)的異構組件間有更多的協(xié)同合作。

5.2.2.2 多態(tài)性

多態(tài)性的意思是使用同一個名稱去引用一系列不同的方法(函數(shù))。這一概念允許在運行時,基于某一個對象選擇最合適的那一種方法來實現(xiàn)。換句話說,它支持遲綁定(Iate binding),即在運行時根據(jù)對象的真實類型動態(tài)地、有選擇地去調用某個方法。

客戶/服務器模型

客戶 / 服務器模型有許多優(yōu)點,但沒有哪個優(yōu)點能像系統(tǒng)的穩(wěn)定性那樣激動人心。在客戶/服務器的世界里,一臺服務器可以同時支持很多客戶。如果其中一部客戶癱癆的話 , 它不會拖垮服務器和其他的客戶、同理,如果服務器崩潰了,只要那些客戶處理斷開連接 , 也不會受到影響。穩(wěn)定性正是 COM 要包含客戶/服務器模型的主要原因。為了討論方便 , 我們假設“客戶“(client)就是使用其余實體(任意一段代碼)的服務的某一個實體,而“服務器“ (server) 就是服務于客戶要求的一個實體。如果你接受這個簡單的假設 , 就可以很容易地推出一系列客戶/服務器的類比:

  • 一個進程(客戶)通過簡單的函數(shù)調用與一個DLL(服務器)進行通信。
  • 一個進程(客戶)通過系統(tǒng)調用與操作系統(tǒng)(服務器)通信。
  • 一個進程(客戶)使用命名管道與同一機器上的另一個進程(服務器)通信。
  • 一個進程(客戶)通過套接字(socket)與另一遠程機器上的另一進程(服務器)通信

在上面的這些方案中,你己經(jīng)見識了客戶/服務器的概念。但是,這里還有個問題:在每個方案中客戶和服務器之間的通信都是不同的。具體說來,你看見了四種不同的客戶與服務器協(xié)同合作的方式。為了消除這些差異,COM 指定了一條所有組件都必須遵守的通信標準。這條通信標準就是 COM 接口 ,也可以看作一個容戶與一個服務器協(xié)同合作的通用途徑 。有了 COM 接口 , 大家就可以在單一的通信方式一一也就是說,一種通用語言上達成一致。COM 從 RPC 處繼承了這一標準,支持客戶/服務器通過一個 RPC 接口通信。

6. COM/DCOM 的功能和服務

一個分布對象的體系結構要支持許多公認為必須的特征:位置透明性、動態(tài)和遠程對象的激活、安全性、接口、生存期支持和動態(tài)發(fā)現(xiàn)、二進制互操作性、連接管理、并發(fā)管理、重用、接口儲藏庫、實現(xiàn)儲藏庫、靜態(tài)調用、動態(tài)調用和事件。

6.1 位置透明性

當一位客戶用 COM 調用一個方法時,它認為此方法是在本地執(zhí)行的。但事實上,此方法可以存在于網(wǎng)絡空間中的任何地方。它可以和客戶位于合一進程中,位于同一臺機器的不同進程中,或者位于第三方機器的一個進程中,這就是位置透明性的含義。

位置透明性主要依賴列集。位置透明性的優(yōu)勢在于 , 針對某一目標編寫代碼時,不必考慮目標的物理位置,這樣,賦予程序更大的自由度和可移植性,還可以允許更好的伸縮性和容錯性。

6.2 動態(tài)和遠程對象的激活

COM SCM 支持遠程激活,可以在任何支持 COM 的機器上安裝。它的目的是應客戶的請求,動態(tài)地定位和激活分布式對象。如果對象存在于同一臺機器的 DLL 中,COM 會為使用此對象的客戶進程動態(tài)地加載 DLL。如果對象他在于同一臺機器的獨立可執(zhí)行文件中,COM 會要求其本地的 SCM 激活該可執(zhí)行文件,這樣客戶進程就可以使用此對象了。如果對象存在于一臺遠程機器中,就需要一定的協(xié)調了。在這種情況下,客戶機上的本地 SCM 會與還程 SCM 聯(lián)系,而遠程 SCM 會負責激活遠程 EXE 或 DLL。對遠程 EXE,遠程 SCM 儀僅產(chǎn)生它罷了,但對遠程 EXE,遠程 SCM 要激活一個己注冊的代理進程來動態(tài)加載此 DLL。

6.3 安全性

COM 支持啟動、訪問和調用級的安全性。啟動安全性,或者叫做激活安全性,決定誰可以啟動或激活服務器組件,從而保護了服務器。COM 也支持扮演。這一特性允許服務器在激活或執(zhí)行客戶進程的那個用戶的安全環(huán)境下運行 , 換句話說,服務器可以完成系統(tǒng)中其他部分允詐該客戶所做的事情。在扮演客戶后,對象做的所有訪問,都受到該客戶的用戶安全環(huán)境的限制。在扮演客戶完成其任務后 , 對象就會返回到自己的安全環(huán)境中。

6.4 接口

在時間和空間上 , 每個接口都是獨一無二的 , 因為它被分配了一個 IID,那是一個 128 位的 GUID。這同時也意味著版本的支持實際上是自動的,因為每個接口都包含了在全局唯一的標識符。

6.5 生存期支持和動態(tài)發(fā)現(xiàn)

對象最重要的特征之一就是其生命周期,因為對象必須被正確地創(chuàng)造和銷毀。在 COM 中,使用引用計數(shù)來支持對象的生存期管理。通常,一個對象會保留所有客戶的計數(shù)。每當一個客戶要求使用一個對象的接口時,該對象的引用計數(shù)就會增長:而當一個客戶釋放了接口,引用計數(shù)就會減少。一旦此引用計數(shù)達到零 , 該對象就會自動清除并銷毀掉自己。

6.6 二進制互操作性

二進制互操作性是軟件重用的一個重要方面。當部署一個開發(fā)函數(shù)庫時,必須裝載頭文件和庫文件。如果以前的客戶必須把庫鏈接進他們的系統(tǒng),才能讓他們的系統(tǒng)工作,那么組件技術誕生后,只需裝載二進制代碼就可以工作了,不需要頭文件,也不霽要鏈接到庫文件。二進制互操作性不僅讓軟件集成更容易,它還允許了插件組件的開發(fā)和集成。

6.7 連接管理

簡單的連接管理依賴對象的生存期管理。對象一直與客戶保持虛擬的連接,如果引用記數(shù)大于 0,對象就假想客戶一直活動。但是,如果客戶由于某種原團沒有釋放引用的對象,那么對象將永不釋放其占有的資源。COM 通過一種簡單的偏執(zhí)檢查(paranoia check)來支持連接管理。每個 COM 機器都運行了一個名為 OXID 分鮮器(resolver)的特殊協(xié)調器/管理器 (coordinator/manager)、服務器端的 OXID 分解器監(jiān)聽來自客戶 OXID 分解器的 ping??蛻舳说?OXID 分解器聚集針對某一特定機器的所有 ping,這種根集稱為一個 ping 集,由一個動態(tài)產(chǎn)生的 ping SETID (集標識符)來表示。有了聚集,客戶端的 OXID 分解器可以只給服務器的 OXID 分解器發(fā)送一條 ping 信息 , 但是代表個很多客戶到服務器的 ping,從而減輕了網(wǎng)絡負擔。為了進一步提高性能 ,COM 定期在集合中傳送變更(增量),如果服務器的 OXID 分解器連續(xù)三個周期沒有收到某一個對象的 ping,COM 就認為客戶已經(jīng)不存在,并執(zhí)行垃圾回收工作。

6.8 并發(fā)管理

COM 將不同并發(fā)語義(concurrency semantics)的對象分離開來,歸入獨立的執(zhí)行環(huán)境,稱為套閉(apartment)。對象在它自己的套間里生成、存在和死亡 ,
如果要在另一個套間中使用這個對象,必須對它列集。列集意味著引入套閉要處理一個對象的代理,而不是原始對象,此代理對象在引入的套間中存在,并和它的客戶代碼共享相同的并發(fā)語義。COM 提供了許多的不同的線程和并發(fā)模型來支持異構組件的軟件開發(fā)。

6.9 重用

COM 支持包容(containment)和聚集 (aggregation)。包容可用于將被重用的對象隱藏在正在開發(fā)的對象之后,然后,發(fā)布一系列通道(passthrough)或代理方法來讓客戶使用這些隱藏對象的服務。當客戶調用通道方法時,需要將這些調用委派到正在重用的包容對象里。聚集可以把重用對象的接口直接暴露給客戶。為了聚集,對象必須將他的 Iunknown 指針傳遞給被重用的對象 , 以便生存期管理可以正常工作。

6.10 接口儲藏庫

為了使重用和集成更簡單 , 一個分布式對象的環(huán)境必須提供一種讓客戶發(fā)現(xiàn)對象及其支持的接口的方式。在 COM 中 , 一個對象的類型信息在接口的儲藏庫中詳細的存儲,稱為類型庫(type library)。類型庫存儲與其對象及其所支持的服務有關的全部信息。通常 , 一個類型庫是一個獨立的二進制文件 , 以 .tlb 作文件的擴展名。

6.11 實現(xiàn)儲藏庫

如果已經(jīng)得到了一個組件的信息,仍然需要找出該組件的位置。在分布式環(huán)境中,一個實現(xiàn)儲藏庫存儲了對象實現(xiàn)的位置。COM 通過注冊表來支持這一概念。COM SCM 使用記錄在注冊表的某一特定的實現(xiàn)的位置來動態(tài)地激活對象。

在客戶端,SCM 查找注冊表來決定遠程組件在什么位置。然后 , 和服務器計算機上的遠程 SCM 聯(lián)系,該遠程 SCM 查找它自己的本地注冊表來獲得組件的位置信息 , 從而激活組件。

在 Windows 2000 中,利用活動目錄(active directory)為實現(xiàn)儲藏庫提供了更好的支持。

6.11.1 靜態(tài)調用和動態(tài)調用

靜態(tài)調用就是指簡單的函數(shù)調用,要求在編譯的時候就知道方法及其簽名,這樣編譯器就可以在調用的方法的方式上施加限制。在 COM 中靜態(tài)調用有:

  • vtbl 綁定:通過 vtbl 調用接口方法。這種調用間接地指向了實際方法,可以跟隨指向 vptr 的接口指針找到 vtbl,而 vtbl 包含了指向實際方法的指針,這種技術又叫極早綁定(very early binding)

  • ID 綁定:通過使用類垣庫和一個名為 Idispatch 的特殊接口。此類型庫中包含了一個名為 dispid 的數(shù)字,它可以代替接口中的一個實際方法 , 這種方法又叫早綁定(early binding)。

  • 雙接口:COM 同時允許 Idispatch 和 vtbl 調用

    三種技術。

    動態(tài)調用被稱為是自動化(Automation),并由 Idispatch 支持。使用這種方法,首先給出一個方法或屬性的名稱代唯與之關聯(lián)的 dispid,查找之后就可以使用 dispid 來調用。

6.11.2 事件

事件是分布式環(huán)境一個十分重要的特征:當某一特定事件發(fā)生時,對象有能力通知對方。這種事件通知可以幫助其他對象決定他們需要采取什么行動。 COM 通過一個叫做連接點的的慨念來支持事件,這就需財有兩個合作者:源點 (source)和匯點(sink)。對捕獲某一事件感興趣的客戶(匯點)必須將自己的意向告訴它們的對象 ( 源點 )。

附錄

這篇文章中涉及到了不少的歷史,把近200年的科技發(fā)展歷史 Technology Timeline 寫在博客里。把微軟技術發(fā)展的 Timeline,和科技發(fā)展的 Timeline 揉合在了一起,這樣能幫助我們感覺到,技術是在伴隨著科技的發(fā)展而發(fā)展。也可以看到,COM 這種技術理念的產(chǎn)生,是在PC漸漸普及起來,操作系統(tǒng)漸漸成熟,軟件需求逐漸提高之后才有的。所以很多事情的發(fā)展,往往都是自然而然的,因為有了需求,才會有相應的發(fā)展。COM 的產(chǎn)生,從這個角度說,也是一種必然。因為 COM 實際上,就是一種規(guī)范,就像行業(yè)規(guī)范一樣,行業(yè)太小自然不用規(guī)范,而規(guī)模大了,需求大了,自然會產(chǎn)生規(guī)范,所以 COM 的產(chǎn)生是一種必然結果。而技術的發(fā)展,既在推進著科技的發(fā)展,也受制于現(xiàn)有科技的邊緣。文章來源地址http://www.zghlxwxcb.cn/news/detail-621001.html

Year Technology Inventor Type
1823 Silicon (Si) Baron Jons Jackob Berzelius CPU
1833 Analytical Engine Charles Babbage Computer
1872 Analog Computers William Thomson Computer
1903 Electrical Logic Circuits (Gates) Nikola Tesla CPU
1904 Diodes Vacuum Tube John Ambrose Fleming CPU
1928 Punched Cards IBM Storage
1928 Magnetic Tape Fritz Pfleumer Storage
1932 Drum memory Gustav Tauschek Storage
1936 Turing Machine (Mechanical Computation) Alan Turing Computer
1938 Electromechanical Analog Computer United States Navy Computer
1939 Vacuum Tube Data Processing System Tommy Flowers Computer
1942 Atanasoff–Berry Computer (ABC) John Vincent Atanasoff; Clifford E. Berry Computer
1943 Colossus Computer (First Crude Computer) Tommy Flowers; British Codebreakers Computer
1946 ENIAC Computer Mao Qili; Ai Kete Computer
1946 Delay Line Memory System J. Presper Ecker Storage
1947 Williams Tube Freddie Williams; Tom Kilburn Storage
1947 Transistor John Bardeen; Walter Brattain CPU
1947 Magnetic-Core Memory An Wang; Way-Dong Woo Storage
1948 Manchester Baby (Stored-Program Computer) Frederic C. Williams; Tom Kilburn; Geoff Tootill Computer
1953 Video Tape Recorder Norikazu Sawazaki Tech
1954 Solar Battery Calvin Souther Fuller; Daryl Chapin; Gerald Pearson Tech
1956 Hard Disk Drive (HDD) IBM Storage
1957 First Personal Computer (PC) IBM Computer
1958 Integrated Circuit (ICs) Jack Kilby; Robert Noyce CPU
1959 MOSFET (MOS Transistor) Mohamed Atalla; Dawon Kahng CPU
1960 Transistors Mass-Production Facility IBM CPU
1962 Atlas Computer (Supercomputers) Ferranti International plc Computer
1963 Integrated Bipolar Static Random-Access Memory (SRAM) Robert H. Norman Storage
1964 MOS Semiconductor Memory John Schmidt Storage
1965 Dynamic Random-Access Memory (DRAM) Toshiba Storage
1960s Object-Oriented Programming MIT Tech
1965 Moore’s Law Gordon Moore CPU
1968 Silicon-Gate MOS Integrated Circuit (MOS IC) Federico Faggin Storage
1968 Intel Corporation (Founded) Gordon Moore CPU
1969 ADM (Advanced Micro Devices) (Founded) Jerry Sanders CPU
1969 ARPANET UCLA; SRI; UCSB; The University of Utah Tech
1970 Pocket Calculator Texas Instruments Tech
1970 DRAM IC Chip Intel Storage
1971 Floppy Disk IBM Storage
1971 Email Ray Tomlinson Tech
1971 Single-Chip Microprocessor (Intel 4004) Intel CPU
1972 Microsoft Partnership Microsoft Microsoft
1972 Video Game Console Ralph H. Baer (Team) Tech
1973 First Commercial Graphical User Interface Xerox Alto Tech
1973 Capacitive Touchscreen CERN Tech
1973 Internet Protocol Suite (TCP/IP) Vinton Cerf; Robert E. Kahn Tech
1975 Microsoft Found Microsoft Microsoft
1975 IBM 5100 Portable Computer (Portable Computer) IBM Computer
1975 Microcomputer Revolution Altair 8800 Tech
1975 Microsoft BASIC Microsoft Microsoft
1980 Flash memory Fujio Masuoka Storage
1981 QDOC Microsoft Microsoft
1982 CD-ROM Sony; Philips Storage
1983 Lotus Software Microsoft Microsoft
1983 Multi-Tool Word Microsoft Microsoft
1983 Stereolithography Chuck Hull Tech
1984 Macintosh Apple Computer
1984 Cell Phone Motorola Tech
1984 lithium-ion battery John B. Goodenough; Rachid Yazami; Akira Yoshino Tech
1985 Microsoft Excel Microsoft Microsoft
1985 Windows 1.0 Microsoft Microsoft
1987 Windows 2.0 Microsoft Microsoft
1987 Dynamic Data Exchange (DDE) Microsoft Microsoft
1988 Antony William, Paper 1 (COM) Microsoft Microsoft
1990 Windows 3.0 Microsoft Microsoft
1990 Microsoft PowerPoint Microsoft Microsoft
1990 World Wide Web Tim Berners-Lee Tech
1990 Antony William, Paper 2 (COM) Microsoft Microsoft
1991 Visual Basic 1.0 Microsoft Microsoft
1991 Object Linking and Embedding (OLE) Microsoft Microsoft
1991 Dynamic-Link Library (DLL) Microsoft Microsoft
1992 Visual Basic 1.0 for DOS Microsoft Microsoft
1992 Visual Basic 2.0 Microsoft Microsoft
1992 Synchronous Dynamic Random-Access Memory (SDRAM) Samsung Electronics Storage
1992 OLE Version 3.1 Microsoft Microsoft
1992 Windows 3.1; OLE 2 Microsoft Microsoft
1992 COM Application binary interface (ABI) Microsoft Microsoft
1993 Visual Basic 3.0 Microsoft Microsoft
1993 VBA (Visual Basic for Applications) Microsoft Microsoft
1993 Web Browser Mosaic Tech
1994 PlayStation Sony Tech
1994 OLE custom controls (OCXs) Microsoft Microsoft
1994 OLE2 change to OLE Microsoft Microsoft
1995 Visual Basic 4.0 Microsoft Microsoft
1995 DVD Philips; Sony; Toshiba; Panasonic Storage
1996 OLE change to ActiveX Microsoft Microsoft
1996 VBA 4.0 Microsoft Microsoft
1996 DCOM Microsoft Microsoft
1997 Microsoft Partnership with Apple Microsoft Microsoft
1997 Visual Basic 5.0 Microsoft Microsoft
1998 Visual Basic 6.0 Microsoft Microsoft
1998 DDR SDRAM (Double Data Rate SDRAM) Samsung Electronics Storage
1998 GDDR (Graphics DDR) Samsung Electronics Storage
1998 MP3 player SaeHan Information Systems Tech
1998 Windows 98 Microsoft Microsoft
2000 Windows ME Microsoft Microsoft
2001 Windows XP Microsoft Microsoft
2002 .NET Framework Microsoft Microsoft
2007 Windows Vista Microsoft Microsoft
2007 iPhone Apple Tech
2008 Visual Basic 6.0 (support ended) Microsoft Microsoft
2008 Google Chrome Google Tech
2009 Windows 7 Microsoft Microsoft
2010 Ipad Apple Tech
2011 3D transistors Intel Tech
2012 Raspberry Pi Tech Volunteers Tech
2015 Windows 10 Microsoft Microsoft
2015 AlphaGo (AI) Google Tech
2019 Quantum computing IBM Computer

到了這里,關于COM,Component Object Model 簡介的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 系統(tǒng)架構14 - 軟件工程(2)

    系統(tǒng)架構14 - 軟件工程(2)

    是指用戶對系統(tǒng)在功能、行為、性能、設計約束等方面的期望 。 是指用戶解決問題或達到目標所需的條件或能力,是系統(tǒng)或系統(tǒng)部件要滿足合同、標準、規(guī)范或其他正式規(guī)定文檔所需具有的條件或能力,以及反映這些條件或能力的文檔說明。 需求開發(fā) -需求獲取、需求分析

    2024年01月23日
    瀏覽(17)
  • AUTOSAR COM(整體架構和模塊交互)

    -返回總目錄- 一、COM層主要功能和架構(參考MICROSAR COM Technical Reference CFG5 Version 9.00.01)《TechnicalReference_Com.pdf》 1.1 COM模塊的主要功能: 為上層提供信號接口(無符號/有符號) I-PDUs 中信號的打包和解包 處理傳輸模式 I-PDUs 間傳輸最小間隔 I-PDU組的通信控制 接收的deadline監(jiān)控

    2024年02月10日
    瀏覽(41)
  • 軟件工程模型-架構師之路(四)

    軟件工程模型-架構師之路(四)

    軟件工程模型 敏捷開發(fā) : 個體和交互 勝過 過程和工具、可以工作的軟件 勝過 面面俱到的文件、客戶合作勝過合同談判、響應變化 勝過 循序計劃。(適應需求變化,積極響應) 敏捷開發(fā)與其他結構化方法區(qū)別特點:面向人的、適應性。 敏捷開發(fā)也是 迭代增量開發(fā)。 ?

    2024年02月12日
    瀏覽(18)
  • 系統(tǒng)架構設計專業(yè)技能 · 軟件工程(一)【系統(tǒng)架構設計師】

    系統(tǒng)架構設計專業(yè)技能 · 軟件工程(一)【系統(tǒng)架構設計師】

    系統(tǒng)架構設計高級技能 · 軟件架構概念、架構風格、ABSD、架構復用、DSSA(一)【系統(tǒng)架構設計師】 系統(tǒng)架構設計高級技能 · 系統(tǒng)質量屬性與架構評估(二)【系統(tǒng)架構設計師】 系統(tǒng)架構設計高級技能 · 軟件可靠性分析與設計(三)【系統(tǒng)架構設計師】 軟件開發(fā)生命周期

    2024年02月13日
    瀏覽(99)
  • STM32學習筆記(一):簡介、軟件安裝及新建工程

    STM32學習筆記(一):簡介、軟件安裝及新建工程

    本文內容參考自以下內容: B站UP主江科大自化協(xié):STM32入門教程,鏈接:https://www.bilibili.com/video/BV1th411z7sn?spm_id_from=333.337.search-card.all.click 《零死角玩轉stm32—f103指南者》、《普中STM32F1xx開發(fā)攻略v1.0》 鏈接:https://pan.baidu.com/s/1DfVTBpOT_JXgvK_AVQCouA?pwd=1024 提取碼:1024 1. STM32的基

    2024年01月23日
    瀏覽(28)
  • 系統(tǒng)架構設計師-軟件工程(1)

    系統(tǒng)架構設計師-軟件工程(1)

    目錄 一、軟件過程模型?????? ? ? ? ? 1、瀑布模型 ? ? ? ? 2、V模型【瀑布變種】 ? ? ? ? 3、原型模型 ? ? ? ? 4、螺旋模型【原型+瀑布】 ? ? ? ? 5、構件組裝模型/基于構件的開發(fā)方法 ? ? ? ? 6、快速應用開發(fā)RAD【瀑布+構件組裝】???????????????? ? ? ? ?

    2024年02月11日
    瀏覽(96)
  • 系統(tǒng)架構設計師-軟件工程(4)

    系統(tǒng)架構設計師-軟件工程(4)

    目錄 一、軟件測試 ????????1、軟件測試類型(動態(tài)測試 / 靜態(tài)測試) ? ? ? ? ? ? ? ? 1.1 動態(tài)測試【計算機運行】? ????????????????1.2 靜態(tài)測試【人工監(jiān)測和計算機輔助分析】 ????????2、軟件測試階段 ????????3、軟件系統(tǒng)測試 二、遺留系統(tǒng)演化策略

    2024年02月13日
    瀏覽(90)
  • 系統(tǒng)架構設計師-軟件工程(2)

    系統(tǒng)架構設計師-軟件工程(2)

    目錄 一、需求工程? ? ? ? ? 1、需求工程階段劃分 ? ? ? ? 2、需求獲取 ? ? ? ? 3、需求分析? ? ? ? ? 4、需求定義(形成需求規(guī)格SRS) ????????5、需求確認與驗證 ? ? ? ? 6、需求跟蹤????????????????? ? ? ? ? 7、需求變更管理過程 ? ? ? ? 1、需求工程階

    2024年02月12日
    瀏覽(25)
  • 軟考高級架構師筆記-8軟件工程

    軟考高級架構師筆記-8軟件工程

    前文回顧:

    2024年02月11日
    瀏覽(21)
  • [架構之路-263]:目標系統(tǒng) - 設計方法 - 軟件工程 - 軟件設計 - 概要設計 - 綜述、如何做概要設計、概要設計的內容

    目錄 一、概要設計綜述 1.1 什么是概要設計 1.2 概要設計的目標 1.3 軟件概要設計與軟件架構設計的比較 1.4 軟件概要設計、軟件架構、軟件詳細設計比較 二、如何做好概要設計 2.1 概要設計的入手點 2.2 概要設計的步驟 2.3?進行概要設計的注意事項 三、軟件概要設計的內容

    2024年03月10日
    瀏覽(28)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包