構件復用作為一種現實有效的軟件開發方法正受到越來越多的重視和研究。近年來,隨著DNA,中間件等三層體系結構和分布式對象的興起,為基于可復用構件的軟件體系結構賦予了更大的內涵。從而使我們在評價構件復用的意義時,不應只局限于開發周期的縮短,軟件質量的可靠提高,更要認識到構件組裝式的開發在系統維護(如版本更新,功能增刪等),分布式計算等方面所帶來的極大便利。由于維護階段占軟件開發周期總成本的67%左右,因此構件重用對整個軟件產業的重要意義就不言而喻了.從維護和分布計算的角度考慮,構件復用就是要實現"即插即用".
傳統的面向對象編程語言中,基于繼承機制的類的復用,只是源代碼級的重用,在源代碼不可得的情況下(構件產業化的發展趨勢下,這種情況很普遍),就變得毫無意義了.更為重要的是,聯編以后,類構件就只是一個邏輯上的虛幻的概念了,不會給將來可能的處理帶來任何方便.
MicroSoft自90年代初就進行了COM的開發,歷經OLE1,VBX組件,OLE2,ActiveX,COM+的不斷完善,現已成為一個相當成熟的組件模型,對構件復用提供了有力的底層支持.
一 COM對象的封裝
COM是一個二進制的標準,它詳細規定了一個COM組件所應具有的內存結構.COM對象間的交互完全基于對此內存結構的操作.因此可以在很大程度上忽略不同編程語言,應用環境之間的差別,解決了重新編譯重新發行的問題.二進制代碼級的兼容性要求操作系統的支持,但是COM描述對象連接的方法與傳統的API式共享系統服務不同.連接建立后,COM底層庫不再被需要,停止耗用系統資源,與API相比,操作系統必須一直管理組件之間的連接.
COM用接口的概念對組件的功能屬性進行完全的封裝.與組件的通信必須通過接口進行.接口不僅是一個邏輯上的概念,而且也存在著與之相對應的物理內存結構(VTABLE).一個對象可以對應多個接口,一個接口也可以由多個對象所實現,表現出靈活的多態性.同時也為版本管理提供了方便.當使用新版本的組件替換老版本時,只要該組件實現了舊版本的接口(通過包容,聚合等手段),就保證了其與原用軟件系統的兼容.同時新增功能(新的接口)又可被自然的使用.
接口完全封裝了內部功能,屬性的具體實現,使得COM對象對外表現為"黑盒"結構,完全吻合面向對象系統所要求的"強內聚性".但由于對接口的過多強調,COM組件一般不具備廣泛提倡的"弱耦合性"的特點.不過,微軟一向重視接口的不變性,試圖用接口的標準化推動服務的標準化,以接口為基礎為軟件復用建立實用的框架.其實ActiveX技術規范中的相當大一部分都是通過定義標準的接口及其相互之間的邏輯關系來確定的.
二 自動化
原文轉自:http://www.anti-gravitydesign.com