新聞中心
組件技術(shù)就是利用某種編程手段,將一些人們所關(guān)心的,但又不便于讓最終用戶去直接操作的細(xì)節(jié)進(jìn)行了封裝,同時對各種業(yè)務(wù)邏輯規(guī)則進(jìn)行了實現(xiàn),用于處理用戶的內(nèi)部操作細(xì)節(jié),甚至于將安全機制和事物機制體現(xiàn)的淋漓盡止。而這個封裝體就常常的被我們稱作組件。

組件有什么作用?
這個問題似乎有些籠統(tǒng),試著想一想windwos何以實現(xiàn)如此強大的生產(chǎn)力?而在它的背后到底有什么在服務(wù)著?
一句話:組件就是windows的靈魂,脫離了組件,windows系統(tǒng)將不再如今天一樣如日沖天,windows如此,Unix也同樣是如此,作為一個操作系統(tǒng),它所完成的功能無不體現(xiàn)著組件的服務(wù),一個很輕松的Copy– Paster都要靠DDE來支持,而DDE就是一種組件服務(wù)對象,而具體到某一個細(xì)節(jié),組件有其自身的規(guī)則實現(xiàn),而規(guī)則的實現(xiàn)又體現(xiàn)了接口的實現(xiàn),但是組件對象本身也是一個組件,它也有業(yè)務(wù)邏輯規(guī)則需要處理,它也要起到所集合的組件的協(xié)調(diào)。如此一來,可以能過某一個組件對象來協(xié)調(diào)的實現(xiàn)一些、一部分的業(yè)務(wù)邏輯規(guī)則!而對于應(yīng)用者來說,這一切完全沒有必要去得知,甚至是沒有意義的。
為什么要應(yīng)用組件技術(shù)?
使用組件技術(shù)的的目的是實現(xiàn)各種規(guī)則的實現(xiàn),而且組件對象還將從更廣闊的方面來考慮,它能將一個大型的分布式系統(tǒng)進(jìn)行統(tǒng)一的規(guī)劃、合理的處理冗余、安全、平衡負(fù)載……等單純的編程手段不能實現(xiàn)的功能,這就是我們要應(yīng)用組件的一個很重要的原因。再者,組件對象不是普通的可執(zhí)行文件,更不是將各種規(guī)則定死在其內(nèi)部,它可以很平滑的實現(xiàn)自身的升級、擴展。
組件(component)技術(shù)是各種軟件重用方法中最重要的一種方法,也是分布式計算和Web服務(wù)的基礎(chǔ)。網(wǎng)絡(luò)應(yīng)用中的軟件組件,又被稱為中間件(middleware)。
組件技術(shù)的應(yīng)用現(xiàn)在已經(jīng)十分廣泛,從Windows編程中使用的各種控件和公用對話框,到ActiveX控件和DirectX的應(yīng)用;從微軟公司的COM,到Sun公司的JavaBean。其中最流行的組件技術(shù)的應(yīng)用是——客戶端的VBX(微軟/VB)和服務(wù)器端的EJB(Sun/Java)。
在網(wǎng)絡(luò)及其應(yīng)用都很發(fā)達(dá)的今天,對組件服務(wù)的需求十分強烈,因此組件技術(shù)近年來得到了飛速的發(fā)展和廣泛的應(yīng)用。
概述
面向過程的編程重用函數(shù)、面向?qū)ο蟮木幊讨赜妙?、范型編程重用的是算法的源代碼,而組件編程則重用特定功能完整的程序模塊。
每個組件會提供一些標(biāo)準(zhǔn)且簡單的應(yīng)用接口,允許使用者設(shè)置和調(diào)整參數(shù)和屬性。用戶可以將不同來源的多個組件有機地結(jié)合在一起,快速構(gòu)成一個符合實際需要(而且價格相對低廉)的復(fù)雜(大型)應(yīng)用程序。
組件區(qū)別于一般軟件的主要特點,是其重用性(公用/通用)、可定制性(設(shè)置參數(shù)和屬性)、自包容性(模塊相對獨立,功能相對完整)和互操作性(多個組件可協(xié)同工作)??梢院唵畏奖愕乩每梢暬ぞ邅韺崿F(xiàn)組件的集成,也是組件技術(shù)一個重要優(yōu)點。
組件在某些方面類似于“可執(zhí)行程序”,在另一些方面又類似于“庫”。
組件標(biāo)準(zhǔn)
組件應(yīng)用的基礎(chǔ)是標(biāo)準(zhǔn),沒有統(tǒng)一的接口描述、沒有規(guī)范的組件通信、沒有標(biāo)準(zhǔn)的對象請求和遠(yuǎn)程調(diào)用,就沒有組件應(yīng)用的可能。目前的主要標(biāo)準(zhǔn)有CORBA(國際通用)、EJB(Sun的Java)、COM和CLR(Microsoft的Windows和.NET)。
這里主要說一下COM和CLR
COM / .CLR
COM(Component Object Model組件對象模型)是微軟公司于1993年提出的一種組件技術(shù),是軟件對象組件之間相互通信的一種方式和規(guī)范,它是一種平臺無關(guān)、語言中立、位置透明、支持網(wǎng)絡(luò)的中間件技術(shù)。
COM是OLE(ObjectLinking and Embedding對象鏈接和嵌入)的發(fā)展(而OLE又是DLL [Dynamic LinkLibraries動態(tài)鏈接庫]的發(fā)展),DCOM(Distributed COM分布式COM,1996年)和COM+(DCOM+管理,1999年)則是COM的發(fā)展。ActiveX控件是COM的具體應(yīng)用(如VBX和DirectX都是基于ActiveX的)。ATL(Active Template Library活動模板庫)是開發(fā)COM的主要工具,也可以用MFC來直接開發(fā)COM,但是非常復(fù)雜。
作為組件技術(shù)的進(jìn)一步發(fā)展,微軟公司又于2002年推出了.NET框架,其中的核心技術(shù)就是用來代替COM組件功能的CLR(Common Language Runtime公共語言運行庫),可采用各種編程語言,利用托管代碼來訪問(例如C#、VB、MC++),使用的是.NET的框架類庫FCL(FrameworkClass Library)。
各種組件技術(shù)介紹
1)DLL
DLL(Dynamic Link Libraries動態(tài)鏈接庫)還不能算組件技術(shù),但它是軟件重用的鼻祖。
DLL采用動態(tài)鏈接,對公用的庫函數(shù),系統(tǒng)只有一個拷貝(位于系統(tǒng)目錄的*.DLL文件),而且只有在應(yīng)用程序真正調(diào)用時,才加載到內(nèi)存。在內(nèi)存中的庫函數(shù),也只有一個拷貝,可供所有運行的程序調(diào)用。當(dāng)再也沒有程序需要調(diào)用它時,系統(tǒng)會自動將其卸載,并釋放其所占用的內(nèi)存空間。由于應(yīng)用程序是通過系統(tǒng)來調(diào)用動態(tài)鏈接庫的,因此每個DLL都有一個類似于main的入口函數(shù)。在DLL中,供外部應(yīng)用程序調(diào)用的庫函數(shù)叫做導(dǎo)出函數(shù),而只是被DLL內(nèi)部調(diào)用的庫函數(shù)則叫做內(nèi)部函數(shù)。導(dǎo)出函數(shù)在客戶端叫做導(dǎo)入函數(shù)。
2)OLE
OLE(Object Linking and Embedding對象鏈接和嵌入)是微軟公司于1991年推出的一種簡單的組件技術(shù),它允許Windows中的程序相互之間進(jìn)行合作——一個(客戶)程序調(diào)用另一個(服務(wù)器)程序,以完成特定的功能。而且客戶/主程序的界面不變,就似將服務(wù)器程序嵌入到客戶程序中一樣。
3)COM
OLE 1.0實際上只是一種復(fù)合文檔,而OLE 2.0已經(jīng)具有標(biāo)準(zhǔn)組件的特性了,顯然它是受了CORBA的影響。所以從OLE 1.0到OLE 2.0,是微軟公司在組件技術(shù)上的一次飛躍。這時,OLE的名稱就有一些名不副實了,因此,在增加了一些功能和規(guī)范之后,微軟公司于1993年在OLE 2.0的基礎(chǔ)上又推出了COM,用來替代原有的OLE。這樣一來,OLE就不再是一種獨立的組件技術(shù),而只是COM技術(shù)在鏈接和嵌入方面的一個具體應(yīng)用。而1996年3月推出的ActiveX控件,也只是COM的一個具體應(yīng)用,它是用來替代原有的VBX控件的。
COM(Component Object Model組件對象模型)的核心是一組組件對象間交互的規(guī)范,它定義了組件對象如何與其使用者通過二進(jìn)制接口標(biāo)準(zhǔn)進(jìn)行交互,COM的接口是組件的球類型紐帶。
除了規(guī)范之外,COM還是一個稱為COM庫的實現(xiàn),它包括若干API函數(shù),用于COM程序的創(chuàng)建。
4)DCOM
DCOM(Distributed COM,分布式COM)是COM的網(wǎng)絡(luò)化。COM具有進(jìn)程透明性,組件對象和客戶代碼不必考慮調(diào)用傳遞的細(xì)節(jié),只須按照普通函數(shù)方式進(jìn)行調(diào)用即可。而DCOM將COM的進(jìn)程透明性擴展為位置透明性,形成分布式的組件對象模型。
5)COM+
COM+是COM-based services and technologies(基于COM的服務(wù)與技術(shù))的簡稱,+表示將COM組件技術(shù)和MTS(Microsoft Transaction Server微軟事務(wù)服務(wù)器)應(yīng)用程序主機技術(shù)結(jié)合在一起。它是一個面向應(yīng)用的高級COM運行環(huán)境,它在COM基礎(chǔ)上實現(xiàn)了許多面向企業(yè)應(yīng)用的分布式應(yīng)用程序所需要的服務(wù)。COM+是1999年隨Windows 2000推出的。
6).NET / CLR
.NET的核心是CLR,它可以視為是COM技術(shù)的繼承和發(fā)展,它解決了COM組件模型中存在的主要問題。
COM向CLR過渡
鑒于COM技術(shù)已經(jīng)被使用多年,有許多現(xiàn)存的資源,程序員和用戶也不可能一下子就全部完全轉(zhuǎn)換到.NET環(huán)境。因此,微軟公司也允許在CLR環(huán)境中繼續(xù)使用COM/DCOM/ COM+和DNA,這可以通過.NET框架的System.EnterpriseServices命名空間來進(jìn)行。
但是鑒于與COM相比,CLR組件所具有的無比優(yōu)越性。COM技術(shù)必然會走向滅亡,而.NET的CLR終將取而代之。
.net互操作
相對于COM技術(shù),.NET技術(shù)就是為基于組件的程序設(shè)計而生的,所以其編碼效率和語言可讀性要高出COM一個等級。但是由于1993年以后的十多年時間里,人們利用基于COM的組件程序設(shè)計技術(shù)開發(fā)了大量的高復(fù)雜度,高可用性的代碼,并且他們運行良好,效率極高,如果用.NET技術(shù)重寫這些代碼簡直就是得不償失,加之在.NET的實現(xiàn)過程中并不是所有的Windows API都被重寫,有些功能是.NET所不能完成的。面對這樣的問題, .NET互操作技術(shù)應(yīng)運而生,可見需求才是技術(shù)的原動力。
托管代碼與非托管代碼
托管代碼 (managed code)同受管制的代碼,由公共語言運行庫環(huán)境(而不是直接由操作系統(tǒng))執(zhí)行的代碼。托管代碼應(yīng)用程序可以獲得公共語言運行庫服務(wù),例如自動垃圾回收、運行庫類型檢查和安全支持等。這些服務(wù)幫助提供獨立于平臺和語言的、統(tǒng)一的托管代碼應(yīng)用程序行為。托管代碼是可以使用20多種支持Microsoft .NET Framework的高級語言編寫的代碼,它們包括:C#, J#, Microsoft Visual Basic .NET, Microsoft JScript .NET, 以及C++。所有的語言共享統(tǒng)一的類庫集合,并能被編碼成為中間語言(IL)。運行庫編譯器(runtime-aware compiler)在托管執(zhí)行環(huán)境下編譯中間語言(IL)使之成為本地可執(zhí)行的代碼,并使用數(shù)組邊界和索引檢查,異常處理,垃圾回收等手段確保類型的安全。優(yōu)點:在托管執(zhí)行環(huán)境中使用托管代碼及其編譯,可以避免許多典型的導(dǎo)致安全黑洞和不穩(wěn)定程序的編程錯誤。同樣,許多不可靠的設(shè)計也自動的被增強了安全性,例如 類型安全檢查,內(nèi)存管理和釋放無效對象。程序員可以花更多的精力關(guān)注程序的應(yīng)用邏輯設(shè)計并可以減少代碼的編寫量。這就意味著更短的開發(fā)時間和更健壯的程序。簡單點說,托管代碼是一microsoft的中間語言,他主要的作用是在.NET FRAMEWORK的CLR執(zhí)行代碼前去編譯源代碼,也就是說托管代碼充當(dāng)著翻譯的作用,源代碼在運行時分為兩個階段:1.源代碼編譯為托管代碼;(所以源代碼可以有很多種,如VB,C#,J#)2.托管代碼編譯為microsoft系統(tǒng)的.net平臺專用文件(如類庫、可執(zhí)行文件等)。非托管代碼(unmanaged code)非托管代碼必須提供自己的垃圾回收、類型檢查、安全支持等服務(wù),它與托管代碼不同,后者從公共語言運行庫中獲得這些服務(wù),而非托管代碼是在運行庫之外運行的代碼。例如COM 組件、ActiveX 接口和 Win32 API 函數(shù)都是非托管代碼的示例。非托管代碼調(diào)用的是Windows系統(tǒng)庫和MFC庫。
名稱欄目:組件與.NET互操作
鏈接URL:http://www.5511xx.com/article/coospis.html


咨詢
建站咨詢
