软件体系结构复习
軟件體系結構復習
1、概述
1.1 軟件危機
1.軟件危機的表現:1、軟件成本日益增加。2、開發進度難以控制。3、軟件質量差。4、軟件維護困難。
2.軟件危機的原因:1、用戶需求不明確。2、缺乏正確的理論指導。3、軟件規模越來越大。4、軟件復雜度越來越高。
3.克服軟件危機:
- 人們面臨的不光是技術問題,更重要的是管理問題。管理不善必然導致失敗 。
- 要提高軟件開發效率,提高軟件產品質量,必須采用工程化的開發方法與工業化的生產技術。
- 在技術上,應該采用基于重用的軟件生產技術;在管理上,應該采用多維的工程管理模式。
4.軟件工程的誕生,包括過程、方法和工具。
- 軟件工程方法為軟件開發提供如何做的技術。
- 軟件工具是人們開發軟件活動智力和體力擴展和延伸
- 軟件工程過程是將軟件工程的方法和工具綜合起來以達到合理、及時進行開發
1.2 軟件與軟件重用
1.構件的概念
- 構件是指語義完整、語法正確和有可重用價值的單位軟件。
- 是軟件重用過程中可以明確辨識的系統。
- 結構上,它是語義描述、通訊接口和實現代碼的復合體。
2.軟件重用:在兩次或者多次不同的軟件開發過程中重復使用相同或者相近軟件元素的過程。
3.軟件元素:包括程序代碼、測試用例、設計文檔、設計過程、需求分析文檔甚至領域知識。
4.軟件模型的三個流派:
- OMG對象管理集團的CORBA
- Sun的EJB
- Microsoft的DCOM
5.基于構件的軟件開發中,構建的多種途徑獲取:
6.構件分類和組織:目前已有的構件分類方法歸為關鍵字分類法、刻面分類法和超文本組織方法。
7.構件組裝:
構件組裝是將庫中的構件經過適當修改后相互連接或者將它們與當前開發項目中的軟件元素相連接,最終構成新的目標軟件。
- 基于功能的組裝技術
- 基于數據的組裝技術
- 面向對象的組裝技術
8.軟件重用實例:
(1)系統構件層,指系統開發平臺本身所提供的類庫包括Java JDK類庫等。
(2)通用類構件層,是我們產品復用的核心。(權限管理、存取控制、日志管理、數據備份/恢復等等)、頁面風格函數以及JSP的CSS、JS等、字符串處理、數據庫連接、日期處理等等與業務邏輯無關的類函數。
(3)業務構件層,指為了滿足各個不同業務的需要而設計的軟件包,并在業務軟件包中設置明確的接口,方便業務之間的交互,并可以實現系列產品之間的大粒度構件復用。
(4)表現層。主要采用JSP、Serverlet頁面來展現業務流程界面。
9.組織結構的重用:
產品開發的過程中建立了重用的組織框構,由三組成員組成:構建開發組、構建應用組和構件協調組。
2、軟件體系結構建模
軟件體系結構模型分類:結構模型、框架模型、動態模型、過程模型和功能模型。
2.1 4+1視圖模型
邏輯視圖
邏輯視圖的表示方法為Booch標記法:
- 這里的類圖用于顯示一個類的集合和它們的邏輯關系,即關聯、使用、組合、繼承等等。
- 對于數據驅動程度高的應用程序也可以使用其他形式的邏輯視圖,比如E-R圖。
比如上述圖片就是某一個通信系統的體系結構邏輯視圖。
開發視圖
開發視圖的表示同樣如此:Booch方法的變形。
如上所表示的開發視圖中,最好使用分層風格,定義到4~6個子系統層。
進程視圖
其表示內容如下:
物理視圖
物理視圖主要考慮如何把軟件映射到硬件上,最終如何安裝或部署到物理機器。它通常要考慮到系統性能、規模、可靠性等。解決系統拓撲結構、系統安裝、通訊等問題。
其表示方法如下:
場景
場景可以看成系統活動的抽象,將4個視圖有機結合聯系起來。
總結
- 邏輯視圖和開發視圖描述系統的靜態結構。
- 而進程視圖和物理視圖描述系統的動態結構。
- 對于不同的軟件系統來說,側重的角度也有所不同。例如,對于管理信息系統來說,比較側重于從邏輯視圖和開發視圖來描述系統,而對于實時控制系統來說,則比較注重于從進程視圖和物理視圖來描述系統。
2.2 軟件體系結構的核心模型
體系結構的核心模型組成:構件、連接件、配置、端口和角色。
構件、連接件和配置是最基本的元素。
3、軟件體系結構風格
軟件體系結構風格是描述某一特定應用領域中系統組織方式的慣用模式。
體系結構風格定義了一個系統家族,即一個體系結構定義一個詞匯表和一組約束。詞匯表中包含一些構件和連接件類型,而這組約束指出系統是如何將這些構件和連接件組合起來的。
體系結構風格反映了領域中眾多系統所共有的結構和語義特性,并指導如何將各個模塊和子系統有效地組織成一個完整的系統。
3.1 經典軟件體系結構風格
管道與過濾器
每個構件有一個輸入輸出。根據其特點,這里的構件稱之為過濾器,這種風格的連接件就像是數據流傳輸的管道,將一個過濾器的輸出傳到另一個過濾器的輸入。
此時過濾器必須是一個獨立的實體。
優缺點:
面向對象風格
基于事件的系統
構件不直接調用一個過程,而是觸發或廣播一個或多個事件。
系統中的其它構件中的過程在一個或多個事件中注冊,當一個事件被觸發,系統自動調用在這個事件中注冊的所有過程,這樣,一個事件的觸發就導致了另一模塊中的過程的調用。
分層系統
系統被組織成若干個層次,每個層次都由一系列構件組成。層次之間存在接口,通過接口形成call/return關系。
倉庫管理及知識庫
黑板系統
黑板系統分成三部分組成:知識源、黑板數據結構、控制。
3.2 C/S風格
客戶服務器風格主要任務在于:
- 提供用戶與數據庫交互的界面
- 向數據庫服務器提交用戶請求并且接收來自數據庫服務器的信息
- 利用客戶應用程序對存在于客戶端的數據執行應用邏輯要求
3.3 三層C/S結構
- 第一層:用戶界面的表示層
- 第二層:業務邏輯的功能層
- 第三層:數據庫的數據層
相比如二層結構,優點在于:
- 服務器安全性提高
- 客戶端成功減肥
- 易于維護
- 易于開發,每層可用不同的語言
其劣勢在于:
- 三層通信效率會制約各層的硬件能力而影響到整個系統性能要求。
- 設計者要考慮三層通信方法、通信頻率和數據量。
3.4 瀏覽/服務器風格
瀏覽/服務器風格就是上述三層應用結構的一種實現,其具體結構為:瀏覽器、web服務器、數據庫服務器。
其優點在于:
- 安裝、維護、修改全在服務器端
- 工作量減少
- 降低成本
- 開放性強,都可以來訪問
- 平臺無關性,可以任意擴展
- 信息發布和信息交流更加靈活
缺點也同樣暴露:
- 缺乏對動態頁面的支持能力,沒有集成有效的數據庫處理功能。
- 系統擴展能力差,安全性難以控制。
- 在數據查詢等響應速度上,要遠遠地低于C/S體系結構。
- 數據提交一般以頁面為單位,數據的動態交互性不強,不利于在線事務處理(OLTP)應用。
3.5 異構結構的實例分析
C/S和B/S混合軟件體系結構的模型:
內外有別模型
4、軟件體系結構描述
4.1 軟件體系結構的描述方法
本質上軟件體系結構的描述方法可以分成文字表達工具、數字表達工具、圖形表達工具。其中在產業界用的最多的就是圖形表達工具,學術界更偏向于數字表達工具。
圖形表達工具
用由矩形框和有向線段組合而成的圖形表達工具。其中,矩形框代表抽象構件,有向線段代表輔助各構件進行通訊、控制或關聯的連接件。
特點:
- 語義豐富、直觀形象、簡單易用
- 語義極不精確
- 沒有形式化基礎
可用于:
- 商業展示
- 設計草圖
4.2 體系結構描述語言
ADL:形式化語言,在底層語義模型支持下,為軟件系統的概念體系結構建模提供了具體語法和概念框架。
其三個基本元素如下:構件、連接件、體系結構配置
ADL與其他語言的比較:
- 構造能力:ADL能夠使用較小的獨立體系結構元素來建造大型軟件系統;
- 抽象能力:ADL使得軟件體系結構中的構件和連接件描述可以只關注它們的抽象特性,而不管其具體的實現細節;
- 重用能力:ADL使得組成軟件系統的構件、連接件甚至是軟件體系結構都成為軟件系統開發和設計的可重用部件;
- 組合能力:ADL使得其描述的每一系統元素都有其自己的局部結構,這種描述局部結構的特點使得ADL支持軟件系統的動態變化組合;
- 異構能力:ADL允許多個不同的體系結構描述關聯存在;
- 分析和推理能力:ADL允許對其描述的體系結構進行多種不同的性能和功能上的多種推理分析
這些語言被排除在ADL外:高層設計符號語言、MIL、編程語言、面向對象的建模符號、形式化說明語言。ADL與需求語言區別在于后者描述的是問題空間,前者則是扎根于解空間中。ADL專注于構件的表示上。
5、統一建模語言
略過
6、可擴展標記語言
6.1 XML概述
XML是一套定義語義標記的規則,這些標記將文檔分成許多部件并且對這些部件加以標識。
XML是元標記語言,用于定義其他與特定領域有關的、語義的、結構化的標記語言的句法語言。
XML的作用:
- 使得搜索更加有意義
- 開發靈活的Web應用軟件
- 實現不同數據的集成
- 使用于多種應用環境
- 客戶端數據處理與計算
- 數據顯示多樣化
- 局部數據更新
- 與現有Web發布機制相兼容
- 可升級性
- 壓縮性能高
XML的應用:
- 應用于客戶需要與不同的數據源進行交互時
- 應用于將大量運算負荷分布在客戶端
- 應用于將同一數據以不同的面貌展現給不同的用戶
- 應用于網絡代理對所取得的信息進行編輯、增減以適應個人用戶的需要
6.2 解析XML
XML文檔
一個實用的XML文檔必須滿足:組織良好和有效
結構格式:
(1)文檔以XML定義**<?xml version="1.0"?>**開始。
(2)有一個包含所有其它內容的根元素,如上面例子中的和標記符。
(3)所有元素必須合理地嵌套,不允許交叉嵌套。
DTD:對XML文檔數據語法結構的描述
XML語言的優勢:
- XML模式使用XML語法
- XML模式支持數據類型
- XML模式是可擴展的
- XML模式有更強的表達能力
XSL
XSL是專門用于XML文檔的樣式語言,可以把XSL當成一種能夠把XML轉變成HTML的語言。
XSL是一種能夠篩選和排序XML文檔中數據的語言。
XSL是一種能夠根據XML的數據數值格式化XML數據的語言。
XSL文檔本身就是結構完整的XML文檔。
6.3 XML編程接口
4種接口:JDOM、DOM、SAX、JAXP
接口的選擇
1、要用Java編寫應用程序嗎?
JAXP使用DOM、JDOM、SAX,如果使用JAVA編寫的代碼,應該使用JAXP將代碼與各種解析器實現的細節分離。
2、應用程序將如何部署?
如果應用程序將要作為Java applet部署,就希望要下載的代碼數量最小。SAX解析器比DOM解析器小,而使用JDOM時除了SAX或者DOM解析器外還要編寫少量代碼。
3、一旦解析了XML文檔,還需要多次訪問那些數據嗎?
如果需要回過頭來訪問XML,文件的已解析版本,DOM是正確的選擇。DOM可以自動保存所有的數據。
4、只需要XML源文件的少量內容嗎?
只需要在XML源文件的少量內容,那么SAX是正確的選擇。SAX不會為源程序中的每個東西創建對象。而使用SAX,要檢查每個事件以了解它是否與需要有關,然后相應地處理它。
5、正在一臺內存很少的機器上工作嗎?
如果是,不管可能考慮導的其他因素是什么,SAX都是最佳選擇。
7、動態軟件體系結構
略過
8、基于服務的體系結構
8.1 Web Service概述
理解Web:
- Web是Internet提供的一種服務。
- Web是一個巨大的信息寶庫。
- Web上的信息彼此關聯。
- Web上的信息保存在Web站點中。
- Web簡單易用。
Web服務簡介:
一個應用程序,它能向外界暴露出一個能夠通過Web進行調用的API。
這就是說,能夠用編程的方法通過Web來調用這個應用程序。我們把調用這個Web service 的應用程序叫做客戶。
Web服務作為一種新興的web應用模式**,是一種嶄新的分布式計算模型,是web上數據和信息**集成的有效機制。
Web服務就像web上的構件編程,開發人員通過調用web應用編程接口,將web服務集成進他們的應用程序,就像調用本地服務一樣。
WEB服務使的開發人員能夠在任何平臺上使用任何編程語言,創建全球互聯的電子商務應用程序。
Web服務的特點:
- 使用標準協議規范
- 使用協約的規范性
- 高度集成能力
- 完好的封裝性
- 松散耦合
Web服務的優勢:
- 跨越不同軟硬件平臺的分布式應用程序之間的互操作性
- 通過使用 Web 協議的防火墻,輕松、廣泛地訪問應用程序
- 跨平臺、跨語言的數據模型 (XML) 方便了異構分布式應用程序的開發
8.2 SOA概述
W3C定義:SOA是一種應用程序體系結構,在這個體系結構中,所有功能都定義為獨立的服務,這些服務帶有定義明確的可調用接口,能夠以定義好的順序調用這些服務來形成業務流程。
SOA特征:
- 松散耦合
- 粗粒度服務
- 標準化接口
8.3 SOA關鍵技術
8.4 SOA實現方法
Web Service,即Web服務中一共有三種工作角色:服務提供者、服務請求者、服務注冊中心。
其中,這種Web服務模型中的操作分為發布、查找和綁定,這些操作可以單次或者反復出現。
- 發布:服務提供者要發布服務的描述以方便服務請求者找到這個服務。
- 查找:查找服務中,服務請求者可以直接檢索服務描述或者在服務注冊中心查詢所要的服務類型。對于服務請求方在生命周期會有兩次涉及查找:1、在設計階段會查找服務的接口描述。2、在運行階段去調用而查找服務的位置描述。
- 綁定:服務請求者使用服務描述中的綁定細節來定位、聯系并調用服務,從而在運行時與服務進行交互。綁定可以分成動態和靜態綁定。動態綁定中,服務請求者通過注冊中心查找服務描述,動態的與服務交互;靜態綁定中,服務請求者已經與服務提供者達成默契,此時就通過本地文件或者其他方式直接與服務進行綁定。
8.5 服務描述語言
WSDL概述
WSDL是對服務進行描述的語言,有一套基于XML語法定義。
8.6 統一描述、發現和繼承協議
UDDL是一種用于描述、發現、集成Web服務的技術,是Web服務協議棧的一個重要部分。
8.7 消息封裝協議
SOAP以XML形式提供一個簡單、清涼的用于在分散或者分布環境中交換結構化和類型信息的機制。
包括以下四個部分:
- SOAP封裝結構:定義一個框架來表示消息中有什么內容,誰來處理這些內容。這些內容時可選的或者是必需的。
- SOAP編碼規則:用以交換應用程序定義的數據類型的實例的一系列機制。
- SOAP RPC表示:定義一個用來表示遠程過程調用和應答的協議。
- SOAP綁定:定義一個使用底層傳輸協議來完成在節點間交換SOAP信封的約定。
總結