天天看點

【分布計算環境學習筆記】3 軟體構件結構

1.基本概念:

架構:對問題的部分解決,是讓使用者內建構件的架構。 構件(元件): 構件是軟體的基本單元, 既足夠小,以便于維護,又應足夠大,以使之具有功能,可以被打包和使用。 對象總線:是一種機制,使得構件和架構能夠調用分布式環境中的另一構件或架構的服務。

構件提供軟體單元,架構把構件拼裝在一起建立許多應用程式,對象總線把構件和架構的能力擴充到開發網絡,使數百萬獨立的軟體單元在異構環節下無縫地互動操作。

2.架構

a.引出:過程和類庫的固有缺點:被動性,它們都需要一種能提供控制流的結構實際的情況。大量的應用程式,特别是同一領域中的應用程式,分享相似的結構。這些結構并沒有經過通常的面向對象技術而得到重用。

b.定義:架構把握了某個領域内全部問題集解決方案的不變部分,開發者必須向架構添加變化部分代碼以把握其動作,使該應用程式成為所在領域内特定的應用程式。

c.類型:

水準架構: 适用于各種應用領域, 如網絡安全 垂直架構: 适用于特定應用領域, 如保險,計費

架構應用模型:架構對相似問題集提供一種統一的解決方案(把握應用程式的結構),以架構調用方法(構件不再互相調用方法),構件可以重用,架構本身也可以為同領域的其它應用程式重用。

【分布計算環境學習筆記】3 軟體構件結構

3.構件(元件)

a.定義:一個接近獨立的、可被替換的軟體單元,它實作一個已定義好的體系結構上下文中的一個明确的功能,同時遵循并提供一組接口的實體實作。元件是個功能或結構單元,是一個比類較粗粒度的表達,英文Component, 元件的出現就是為了解決某些功能和結構的劃分,使其具有可重用性。元件将一些類和接口組織起來,對外暴露一個或多個接口,供外界調用。對于複雜的元件,還可能包含配置檔案、界面、依賴的庫檔案等,元件也可以包含或者使用其它的元件,構成更大的元件。

b.特征:

自描述(内省) :構件必須能夠識别其屬性、存取方法和事件,這些資訊可以使開發環境将第三方軟體構件無縫地結合起來; 可定制:可由使用者定制構件的特性值,自行配置構件。這通常意味着需提供一個圖形方式環境,使構件的屬性能通過控制台來設定,進而使開發人員能夠對一個一般化的構件加以裁剪,使其能夠滿足某些特定環境的具體需求。 可內建:開發人員可将構件并入開發環境,與新的應用相連。可聚合簡單構件,獲得複雜構件.構件可以被程式設計語言直接控制。構件也可以和腳本語言連接配接或者與從代碼級通路構件的環境連接配接,使軟體構件可以在非可視化開發項目中使用; 連接配接機制:構件必須能産生事件或者具有讓程式員從語義上實作互相連接配接的其他機制。這意味着程式員可以很容易地向按鈕添加代碼,使點中按鈕就可以影響其他構件的動作。 可插用—是現成的可打包的軟體部件,可從經銷商處購得。 可維護 — 構件是足夠小的,因而易于維護和更新。 有功能 — 構件是足夠大的,以它所期望的方式工作。 有特點 — 構件是設計用于執行某種特定任務的,它代表了整個應用程式中的一個部件。這個部件可以是細顆粒、中顆粒或大顆粒的。 沒有與别的構件直接通信的路徑 – 不直接通信是構件可維護和可更新的必要條件。此外,它使得構件可被用于分布式環境。 自我可描述 – 構件能向系統的其餘部分描述它提供的服務。這種描述通常是通過說明性的、與實作無關的接口定義語言來提供的。 目标架構 – 構件通常是為一特殊的架構所建立的,這種構件不能在其它架構中運作。例如:Java Beans構件不能直接用于ActiveX環境。 目标對象總線 – 直接與某一對象總線接口的構件或許不能與另一對象總線一起使用。要用網關來提供不同對象總線之間的可互操作性。

c.構件接口:一組操作的集合,用于指定一個構件所提供的服務。接口規定了一個構件和别的構件互動的機制。接口用于命名一個操作的集合并指定它們的标記和協定,隻注重一個給定服務的行為,而不是它的結構。接口不對它的任何操作提供實作。

d.建構和對象的比較:

相同點:

兩者都提供了描述和構造應用的元素;對象是一個問題域中的任何可識别的實體,例如對象可表示一個員工或者一個定單。在分析和設計階段,對象純粹是概念性的,在實作階段,對象在軟體中實作。而在基于構件的開發中,構件也提供了類似的構造塊。一個開發者把一個應用看成是一組互互相動的元件的集合。當構造一個應用時,實際的構件将被構造或綜合進軟體中。最終的應用将由這些一起協調工作的構件組成。對象和構件使用類似的技術來指定。一個對象是一個對象類型的一個執行個體,對象類型指定了對象的特性。構件類型的概念和對象類型的概念極其相似  (極其相似,而不是相同。因為并不是所有的構件都有類型的概念。Java Beans中的一個Beans有類型的概念,但比如對某個遺留系統進行包裝(wrapper)後所得到的構件就沒有類型的概念)。一個特定的構件是一個構件類型的一個執行個體,并且它向外展示其指定的特性。

不同點:

構件技術是從面向對象技術中發展起來的,但它又不同于對象技術。在構件技術中,既可用面向對象的技術來實作,也可不用面向對象的技術來實作。對象技術在構件技術中不是必須的。開發者可能使用任何非面向對象語言和環境來實作構件。而且,構件可能包括遺留的系統,這些遺留的系統可能被包裝起來以跟基于構件的軟體互相操作。在面向對象技術中,繼承、封裝和多态性是OO技術的三個基本特征,但在構件技術中一般隻突出封裝的特性,即構件是獨立可傳遞的軟體單元。典型地,一個構件提供比對象更為強大的功能。對象和對象類型是用于應用開發的基本組成部分。開發者指定對象類型來包括關鍵的域和技術概念。一個應用可能包括幾百個對象類型。相反,一個應用可能隻包括幾個構件。一個構件可能包括多個對象。構件提供了一個在對象級以上的一個組成部分。構件可看成是一個組織對象的一個方法。

4.對象總線

a.定義:把構件和架構的能力擴充到開發網絡,使數百萬獨立的軟體單元在異構環節下無縫地互動操作。

b.對象總線語言:使互相通信的對象都能了解的一種公共語言。為所有對象提供了一種向總線描述自己的機制,這種機制通過一種說明性的、與實作無關的接口定義語言(IDL)提供。

c.舉例:最著名的對象總線:CORBA 、DCOM。

5.基于構件的軟體開發過程

【分布計算環境學習筆記】3 軟體構件結構
【分布計算環境學習筆記】3 軟體構件結構

6.構件模型

a.構件模型:為開發者定義軟體構件而建立的體系結構和API集,使開發者可通過軟體構件的動态組合來建立應用系統。目前主流構件模型CORBA、EJB、COM( DCOM / COM+ )

構件模型 = 構件 + 容器

構件 --  具有可重用特性的基本軟體部件 容器 --  一組提供一系列可通路的管理服務,隻要元件符合容器要求(規範),容器就可以讓元件使用相應的管理服務,構件需要實作容器要求的API才能在容器中運作。用于存放和安排構件,實作構件間的互動。(容器也可以作為另一個容器的構件使用)

b.重量級架構:

典型代表EJB,開發的系統基本需要放置在一個容器系統中進行運作,并需要實作容器要求的接口。容器在執行個體化化業務對象後,傳給業務對象上下文,而業務對象本身要通過JNDI手段來定位或者pull出其他資源或者業務對象。這些容器因為基本針對大型企業應用,是以體積龐大,占用資源,内在服務多,啟動比較慢。開發需要遵從的規則比較多,開發效率也比較低,很大一部分時間都用在了Deploy、Run這樣的過程上,調試和測試比較困難。重量級架構在大規模運作的時候會表現出非常優異的性能,劣勢主要是開發效率較低

c.輕量級架構:

典型代表:Spring

Struts和WebWork面向Web架構 Hibernate面向資料庫映射(ORM)

以依賴注入(Dependency Injection)為代表的解耦合模式,可以讓元件不去依賴容器(運作環境)的API。輕量級容器通過反向控制(Inversion of Control)讓容器具有主動權,去管理插進來的元件,隻要元件是符合标準的,就可以被輕量級容器管理。元件以POJO(Plain Old Java Object)的形式存在,隻要你有Java.exe就可以運作它,不需要容器就可以實作測試行為。基于輕量級架構進行系統開發的時候非常迅速,但是在大規模運作的時候,性能可能會比重量級架構差一些。

7.技術的重點

不在于如何進行遠端調用,RPC或者RMI技術足以支援,而真正的技術重點在于如何簡化應用的開發:由容器提供相應的各種服務,進一步地:輕量級架構技術,松耦合基于構件的應用與容器的關系,隻整合需要的服務。構件之間的關系也可以在需要的時候建立。