Ⅰ com編程模式
一、Singleton,單例模式:保證一個類只有一個實例,並提供一個訪問它的全局訪問點
二、Abstract Factory,抽象工廠:提供一個創建一系列相關或相互依賴對象的介面,而無須指定它們的具體類。
三、Factory Method,工廠方法:定義一個用於創建對象的介面,讓子類決定實例化哪一個類,Factory Method使一個類的實例化延遲到了子類。
四、Builder,建造模式:將一個復雜對象的構建與他的表示相分離,使得同樣的構建過程可以創建不同的表示。
五、Prototype,原型模式:用原型實例指定創建對象的種類,並且通過拷貝這些原型來創建新的對象。
行為型有:
六、Iterator,迭代器模式:提供一個方法順序訪問一個聚合對象的各個元素,而又不需要暴露該對象的內部表示。
七、Observer,觀察者模式:定義對象間一對多的依賴關系,當一個對象的狀態發生改變時,所有依賴於它的對象都得到通知自動更新。
八、Template Method,模板方法:定義一個操作中的演算法的骨架,而將一些步驟延遲到子類中,TemplateMethod使得子類可以不改變一個演算法的結構即可以重定義該演算法得某些特定步驟。
九、Command,命令模式:將一個請求封裝為一個對象,從而使你可以用不同的請求對客戶進行參數化,對請求排隊和記錄請求日誌,以及支持可撤銷的操作。
十、State,狀態模式:允許對象在其內部狀態改變時改變他的行為。對象看起來似乎改變了他的類。
十一、Strategy,策略模式:定義一系列的演算法,把他們一個個封裝起來,並使他們可以互相替換,本模式使得演算法可以獨立於使用它們的客戶。
十二、China of Responsibility,職責鏈模式:使多個對象都有機會處理請求,從而避免請求的送發者和接收者之間的耦合關系
十三、Mediator,中介者模式:用一個中介對象封裝一些列的對象交互。
十四、Visitor,訪問者模式:表示一個作用於某對象結構中的各元素的操作,它使你可以在不改變各元素類的前提下定義作用於這個元素的新操作。
十五、Interpreter,解釋器模式:給定一個語言,定義他的文法的一個表示,並定義一個解釋器,這個解釋器使用該表示來解釋語言中的句子。
十六、Memento,備忘錄模式:在不破壞對象的前提下,捕獲一個對象的內部狀態,並在該對象之外保存這個狀態。
結構型有:
十七、Composite,組合模式:將對象組合成樹形結構以表示部分整體的關系,Composite使得用戶對單個對象和組合對象的使用具有一致性。
十八、Facade,外觀模式:為子系統中的一組介面提供一致的界面,fa?ade提供了一高層介面,這個介面使得子系統更容易使用。
十九、Proxy,代理模式:為其他對象提供一種代理以控制對這個對象的訪問
二十、Adapter,適配器模式:將一類的介面轉換成客戶希望的另外一個介面,Adapter模式使得原本由於介面不兼容而不能一起工作那些類可以一起工作。
二十一、Decrator,裝飾模式:動態地給一個對象增加一些額外的職責,就增加的功能來說,Decorator模式相比生成子類更加靈活。
二十二、Bridge,橋模式:將抽象部分與它的實現部分相分離,使他們可以獨立的變化。
二十三、Flyweight,享元模式
Ⅱ 學COM編程有什麼用
COM是高級代碼復用技術,OLE,ActvieX,DShow等等平台都是COM的。
有興趣學COM,請來銳英源。
全面能力學習:抽象思維、語言基礎、設計思路、技術疑難、軟體工程、文檔(英語)理解和文檔設計
綜合教材學習:結合工作經驗、開源、英語、視頻教學、在線教學、階段式興趣和實踐,因人施教,海量源碼。
Ⅲ 用com編程和用mfc編程有什麼區別。
MFC 簡單來說就是對 API 以及各種對象(窗口、Socket、等等)的封裝,組織成為一個合理的基於 Visual C++ 的框架結構。
而 COM 是與語言無關的(雖然只適用於 Windows 平台),C/C++/VB/匯編等都可以使用 COM 對象。
MFC 的圖像類其實就是使用 COM 介面。
Ⅳ 什麼是 COM編程技術
指組件對象模型,把程序某些部分設計成組件,組件由對象組成,對象則提供介面,介面完成類似的功能。程序把各個組件利用起來組成應用系統。就象機器零件一樣,生產零件、最後總裝。
Ⅳ com編程的COM編程入門
第一部分——什麼是COM,如何使用COM。
本文的目的是為剛剛接觸COM的程序員提供編程指南,並幫助他們理解COM的基本概念。內容包括COM規范簡介,重要的COM術語以及如何重用現有的COM組件。本文不包括如何編寫自己的COM對象和介面。
本文由淺入深描述COM的內在運行機制,教你如何使用第三方提供的COM對象(以Windows 外殼組件Shell為例)。讀完本文後,你就能掌握如何使用Windows操作系統中內建的組件和第三方提供的COM對象。
本文假設你精通C++語言。在例子代碼中使用了一點MFC和ATL,如果你不熟悉MFC和ATL也沒關系,本文會對這些代碼進行完全透徹的解釋。本文包括以下幾個部分:
簡單地說,COM是一種跨應用和語言共享二進制代碼的方法。與C++不同,它提倡源代碼重用。ATL便是一個很好的例證。源碼級重用雖然好,但只能用於C++。它還帶來了名字沖突的可能性,更不用說不斷拷貝重用代碼而導致工程膨脹和臃腫。
Windows使用DLLs在二進制級共享代碼。這也是Windows程序運行的關鍵——重用kernel32.dll, user32.dll等。但DLLs是針對C介面而寫的,它們只能被C或理解C調用規范的語言使用。由編程語言來負責實現共享代碼,而不是由DLLs本身。這樣的話DLLs的使用受到限制。
MFC引入了另外一種MFC擴展DLLs二進制共享機制。但它的使用仍受限制——只能在MFC程序中使用。
COM通過定義二進制標准解決了這些問題,即COM明確指出二進制模塊(DLLs和EXEs)必須被編譯成與指定的結構匹配。這個標准也確切規定了在內存中如何組織COM對象。COM定義的二進制標准還必須獨立於任何編程語言(如C++中的命名修飾)。一旦滿足了這些條件,就可以輕松地從任何編程語言中存取這些模塊。由編譯器負責所產生的二進制代碼與標准兼容。這樣使後來的人就能更容易地使用這些二進制代碼。
在內存中,COM對象的這種標准形式在C++虛函數中偶爾用到,所以這就是為什麼許多COM代碼使用C++的原因。但是記住,編寫模塊所用的語言是無關的,因為結果二進制代碼為所有語言可用。
此外,COM不是Win32特有的。從理論上講,它可以被移植到Unix或其它操作系統。但是我好像還從來沒有在Windows以外的地方聽說過COM。
Ⅵ COM編程是什麼
COM即組件對象模型,是Component Object Model 取前三個字母的縮寫,這三個字母在當今Windows的世界中隨處可見。隨時涌現出來的大把大把的新技術都以COM為基礎。各種文檔中也充斥著諸如COM對象、介面、伺服器之類的術語。因此,對於一個程序員來說,不僅要掌握使用COM的方法,而且還要徹底熟悉COM的所有一切。
簡單地說,COM是一種跨應用和語言共享二進制代碼的方法。與C++不同,它提倡源代碼重用。ATL便是一個很好的例證。源碼級重用雖然好,但只能用於C++。它還帶來了名字沖突的可能性,更不用說不斷拷貝重用代碼而導致工程膨脹和臃腫。
Windows使用DLLs在二進制級共享代碼。這也是Windows程序運行的關鍵——重用kernel32.dll, user32.dll等。但DLLs是針對C介面而寫的,它們只能被C或理解C調用規范的語言使用。由編程語言來負責實現共享代碼,而不是由DLLs本身。這樣的話DLLs的使用受到限制。
MFC引入了另外一種MFC擴展DLLs二進制共享機制。但它的使用仍受限制——只能在MFC程序中使用。
COM通過定義二進制標准解決了這些問題,即COM明確指出二進制模塊(DLLs和EXEs)必須被編譯成與指定的結構匹配。這個標准也確切規定了在內存中如何組織COM對象。COM定義的二進制標准還必須獨立於任何編程語言(如C++中的命名修飾)。一旦滿足了這些條件,就可以輕松地從任何編程語言中存取這些模塊。由編譯器負責所產生的二進制代碼與標准兼容。這樣使後來的人就能更容易地使用這些二進制代碼。
在內存中,COM對象的這種標准形式在C++虛函數中偶爾用到,所以這就是為什麼許多COM代碼使用C++的原因。但是記住,編寫模塊所用的語言是無關的,因為結果二進制代碼為所有語言可用。
此外,COM不是Win32特有的。從理論上講,它可以被移植到Unix或其它操作系統。
Ⅶ c#編程,添加引用時,COM和.NET有什麼區別代表什麼意思
COM是windows的com組件,沒有.NET的時候有段時間都是基於com的編程,在windows系統中還在使用。.NET其實是微軟在2002年推出的替代COM的編程平台。因為據一些老程序員說COM編程太惡心了,微軟估計也覺得讓大家繼續使用太難受了,就發明了.NET。
Ⅷ 請問com編程 .net編程有什麼區別啊
所有的優秀程序員都會盡自己的最大努力去使自己所寫的程序具有更好的可重用性,因為它可以讓你快速地寫出更加健壯和可升級性的程序。
有兩種使代碼重用的選擇:
1.白盒:最簡單的一種,就是把你的程序片拷貝到另一個文件中。
2.黑盒:它包括把編譯過的程序片連接起來。因此客戶端可以調用的編譯過的黑盒類庫就叫作組件。
.Net中也同樣為開發者提供了類似於COM的建立和展開組件的方法。開發人員很容易地被這兩種以組件為基礎的開發模型所迷惑,所以,讓我們來看一看這些不同的開發方法,以使我們消除疑惑。
COM的產生
在以前程序設計過程中,程序員把它們的函數庫放在一個叫做目標(Object)文件的單獨文件中,在這些文件中,包含了編譯過的代碼。當程序員要使用一個特別的目標文件的時候,他們把客戶程序編譯成機器代碼,然後依靠動態鏈接的手段把客戶程序聯接到目標文件上,最後變成一個單一的可執行文件。這種作法的唯一的好處在於它節省了編譯函數庫的時間。但是它有許多的缺點,比如由於在每個單獨的可執行文件中都有一個程序庫包括在裡面,浪費了許多存儲空間;對應用程序的維護也是非常困難的,如果在函數庫中發現了一個bug,整個可執行文件都要被重新編譯和分發。
還有不只一個的嚴重的限制在里頭,一個客戶應用程序必須要和用同一種語言編制的函數庫在一起才能使用。比如說,一個用QuickBasic寫的客戶應用程序就不能引用一個用C++寫的函數庫。
因此,微軟公司出品了COM,COM僅僅只是一個規范。不管組件用什麼語言寫成,只要符合這個COM規范,就能被用任何一種語言寫成的客戶程序調用。此外,程序員不必再擔心要去建立一個單一的可執行文件,因為組件是以GUID(Global Unique Identifier全球唯一標識符)來標識的。GUID是一個128位的號碼,和一些相關的信息一起被放在系統的注冊表中,用來唯一標識組件。客戶應用程序只在運行期間才動態地建立一個組件的實例,並使用這個組件的功能,因此,只需要一個函數庫的拷貝。它的缺點就是大家常常提到?quot;DLL地獄"。這個問題在一個DLL要被一個新版本的DLL所取代時引發。開發者不得不通過關閉所有的客戶應用程序的方法(如果不行,還要關閉WWW服務)來達到清除所用對這個組件的引用的目的。有時所有的方法都還起不了作用,那你只好重新啟動伺服器後才能替換掉老的DLL。
COM+
為了讓企業級的應用程序能使用上COM,它必需要有以下的特定的能力。
· 驗證能力
· 對象池(Object Pooling)
· 事務處理
· 支持分布式架構
為了使開發者不必去為他們的組件添加這些能力,微軟公司出品了DCOM(Distributed COM分布式COM)和MTS(Microsoft Transaction Server微軟事務伺服器)。使用這兩種技術,開發者就可以把精力用在他們的商業邏輯上,而不必放在後台的他們的組件上。
DCOM是一個用於分布式的組件之間的通訊的RPC(Remote Procere Call)協議。客戶端向一個本地機的代理類發送請求,然後由代理類將這個請求隱含地給安裝在遠程機器上的"根"類,然後執行結果原路送回給代理類,最後代理類把它們回送給客戶端。因此,客戶程序的位置完全與組件的位置無關。DCOM的缺點在於,由於DCOM使用的是一個獨立的硬體埠,而不是HTTP協議的80埠,所以在組件間通訊的過程中,必須保證這個埠是開著的。這是一個嚴重的安全問題。所以DCOM不能夠輕易地穿越防火牆。
為了使用MTS,程序員在它們的組件里放置特別的MTS鉤子,編譯後把他們放在MTS包中。把有關系的組件放在一個單一的包中有它自己的好處。當客戶請求一個包中的一個組件的一個實例的時候,MTS確保為這個包建立一個新的專門的線程,一個新的組件實例被建立在這個線程上並被應用事務服務。至於對象池服務和安全服務是否要被建立,那就要看開發者的請求了。
MTS允許相關的作業單元被當作一個事務來對待,這意味著如果所有的作業單元被成功地完成,整個事務就被當作成功地完成,反之如果有一個單元未成功完成,整個事務將被重新輪回。
在客戶請求對象和釋放對象後,MTS仍保存著這個對象,所以當另一個客戶請求同一個組件的時候,MTS就將保存著的對象交給它。通過這種方式,MTS減少了在伺服器源實例化的次數。
MTS允許開發者用安全措施來組裝他們的組件,以使其具有識別請求它的服務的客戶的能力。這能夠確保未經授權的客戶不能夠使用組件的功能。
MTS以COM+的名義被完整地整合到了微軟公司的Windows 2000操作系統中,但是COM+不僅僅只有MTS,它還包括一些其它的服務。MSMQ(Microsoft Message Queue Server),一個與MTS一同發布的服務,也被以COM+的名義整合到了Windows 2000中。MSMQ允許伺服器端和客戶端進行同步的通訊。事件服務(Event Service)也被加了進來,它使伺服器能夠與客戶端同步地交流事件的發生。負載平衡服務(Load Balancing)自動地實例化機器上的具有最多資源的伺服器上的請求對象。
.NET
.Net提供了一種全新的建立和展開組件的方法。它就是大名鼎鼎的Assemblies。使用COM,開發者必需要在伺服器上注冊組件,這也就是說,系統注冊表中的組件的信息必須被更新。這樣做的目的是保證組件的中心位置,以使COM+能夠找到合適的組件。使用.Net的Assemblies,裝配(Assembly)文件把所有需要的元數據(meta data)都壓入一個叫Manifests(名單)的一個特殊的段中。在.Net中,要使assembly對用戶有效,只要簡單地把他們放在一個目錄中就行了。當客戶程序請求一個特別的組件的實例的時候,.Net運行期(runtime)在同一個目錄搜尋assembly,在找到後,分析其中的manifest,以取得這個組件所提供的類的信息。由於組件的信息是放在manifest里的,所以開發者就沒有必要把組件注冊到伺服器上,因此,就可以允許幾個相同的組件安全地共存在一個相同的機器上了。
建立一個.Net assembly並不像建立一個VB6組件,唯一讓開發者操心的就是商業邏輯,所有的後台代碼全部由.Net運行期產生,而且由於.NET運行期具有碎片收集器的功能,組件不必擔心它的引用數目(在COM中是靠Iunknown的幫助)。簡單地說,在.NET中建立一個assembly比建立一個VB6 COM要簡單地多。
純的.NET assemblies不能夠在COM+服務下注冊,因為它們是和COM不同的二進制標准。面對.NET,assemblies的前景相對於COM來說是"高級的COM"。但是由於當前架構於COM+上的應用程序的可靠性,COM還會持續一段時間。這也許就是微軟公司向開發者同時提供開發.NET assemblies和COM的工具的原因吧。
類型庫引入器(Type Library Importer (TLBIMP.exe))工具可以把COM組件封裝成.NET,以使以前的東西可以在.NET應用程序中繼續使用。
類型庫導出器(Type Library Exporter (TLBEXP.exe))工具將.NET組件封裝成COM,這個工具也是很有用的,如果你要用你的.NET assemblies去替換原有的COM組件,就得用到它了。由COM+提供的服務不能被忽略,所以把.NET assemblies封裝成COM組件就變得相當重要了。作為一種選擇,開發者可以從.NET基礎類庫中選擇更多的功能。
Ⅸ COM編程和API編程有什麼區別
COM是Windows非常非常重要的部分.
OLE DB是COM, ADO是COM,
OFFICE是COM;
Windows Media Player是COM
WMI是COM
IE 是COM
數不勝數
有了COM知識, 你既能用這些個東西, 也能寫類似的東西給別人用.
Ⅹ BCB和COM編程的關系是什麼
BCB 是Borland的集成開發環境,本身也支持編寫com程序。
由於borland本身自己實現了com的介面,如果要更改裡面自動生成的代碼可能需要深點的功力才可以,它在生成中已經聲明了,如果文件有更改,則將文件自動創建一遍就可以了。com其實用什麼語言做都可以。