軟件工程軟件體系結(jié)構(gòu)_第1頁
已閱讀1頁,還剩211頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、軟件工程,1,軟件工程第六章 軟件體系結(jié)構(gòu),6.1 軟件體系結(jié)構(gòu)的概念6.2 軟件體系結(jié)構(gòu)的設(shè)計(jì)6.3 特定領(lǐng)域的體系結(jié)構(gòu)6.4 分布式軟件體系結(jié)構(gòu)6.5 設(shè)計(jì)模式,軟件工程,2,一個(gè)程序或計(jì)算機(jī)系統(tǒng)的軟件體系結(jié)構(gòu)包括一個(gè)或一組軟件構(gòu)件、軟件構(gòu)件的外部可見特性及其相互關(guān)系。軟件構(gòu)件的外部可見特性是指軟件構(gòu)件提供的服務(wù)、性能、特性、錯(cuò)誤處理、共享資源使用等。軟件體系結(jié)構(gòu)的基本單位是軟件構(gòu)件,軟件構(gòu)件是一個(gè)軟件體系結(jié)構(gòu)的核心

2、。,6.1 軟件體系結(jié)構(gòu)的概念,6.1.1 軟件體系結(jié)構(gòu)的定義,軟件工程,3,軟件構(gòu)件可以是子系統(tǒng),也可以是模塊。在它們之間沒有清晰的界限,但可以依據(jù)下列兩點(diǎn)加以區(qū)分:一個(gè)子系統(tǒng)獨(dú)立構(gòu)成系統(tǒng),不依賴其他子系統(tǒng)提供的服務(wù)。子系統(tǒng)由模塊或更小的子系統(tǒng)構(gòu)成。子系統(tǒng)之間的交互通過它們的接口。一個(gè)模塊通常是一個(gè)能提供一個(gè)或多個(gè)服務(wù)的系統(tǒng)構(gòu)件,它能夠利用其他模塊提供的服務(wù),一般不被看成一個(gè)獨(dú)立的系統(tǒng),模塊可以由更簡單的模塊組成。,軟件工程,4,

3、概念結(jié)構(gòu):從主要設(shè)計(jì)元素(構(gòu)件)及其相互關(guān)聯(lián)、設(shè)計(jì)原則和性能角度考慮的結(jié)構(gòu)。模塊結(jié)構(gòu):根據(jù)功能分解建立模塊的層次結(jié)構(gòu)包括模塊接口、模塊管理、模塊控制和一致性等問題。代碼結(jié)構(gòu):描述源程序,二進(jìn)制程序,庫文件。在開發(fā)環(huán)境下的組織包括系統(tǒng)資源配置管理,系統(tǒng)構(gòu)造和對(duì)象嵌入機(jī)制 OEM 等。執(zhí)行結(jié)構(gòu):描述系統(tǒng)的動(dòng)態(tài)結(jié)構(gòu)包括性能、調(diào)度、動(dòng)態(tài)配置和不同系統(tǒng)間的接口等。,6.1.2 軟件體系結(jié)構(gòu)的不同形式,軟件工程,5,6.1.3 在軟件構(gòu)件設(shè)計(jì)

4、中應(yīng)保持的性質(zhì),計(jì)算功能:描述構(gòu)件所實(shí)現(xiàn)的整體功能。結(jié)構(gòu)特性:描述特定構(gòu)件定義、構(gòu)件打包的方式和相互交互的方式,構(gòu)件如何組織以構(gòu)成整個(gè)系統(tǒng)。附屬功能:描述構(gòu)件的執(zhí)行效率、處理能力、環(huán)境假設(shè)、全局特性等,包括時(shí)間要求、空間要求、精確度、安全性、保密性、帶寬、吞吐率、最低硬軟件要求等。家族特性:描述相同和相關(guān)構(gòu)件之間的關(guān)系。,軟件工程,6,純計(jì)算構(gòu)件: 具有簡單輸入輸出關(guān)系,沒有運(yùn)行狀態(tài)變化如數(shù)值計(jì)算、過濾器、轉(zhuǎn)換器等。存儲(chǔ)構(gòu)件:

5、 存放共享的、永久性的、結(jié)構(gòu)化的數(shù)據(jù)。如數(shù)據(jù)庫、文件、符號(hào)表、超文本等。管理構(gòu)件: 執(zhí)行操作與運(yùn)行狀態(tài)緊密相關(guān)。如抽象數(shù)據(jù)類型、面向?qū)ο笙到y(tǒng)中的對(duì)象、服務(wù)器等??刂茦?gòu)件: 管理其它構(gòu)件運(yùn)行的時(shí)間、時(shí)機(jī)及次序。例如,調(diào)度器、同步器等。,6.1.4 軟件構(gòu)件分類,軟件工程,7,鏈接構(gòu)件: 在實(shí)體之間傳遞信息。例如,通信機(jī)制、用戶界面等。過程調(diào)用: 在某一特定執(zhí)行路徑中傳遞執(zhí)行指針。如普通過程調(diào)用、遠(yuǎn)程過程調(diào)用。數(shù)據(jù)流

6、: 相互獨(dú)立的處理通過數(shù)據(jù)流進(jìn)行交互,在得到數(shù)據(jù)的同時(shí)被賦予控制權(quán)限。如 UNIX 系統(tǒng)中的管道。,6.1.5 構(gòu)件之間的連接方式,軟件工程,8,間接激活: 處理因事件的發(fā)生而激活,在處理間沒有直接交互。例如,事件驅(qū)動(dòng)系統(tǒng)、自動(dòng)垃圾回收等。消息傳遞: 相互獨(dú)立的處理間有明確交互,通過顯式數(shù)據(jù)傳遞。傳遞可以是同步的,也可以是異步的。如TCP/IP 。共享數(shù)據(jù): 構(gòu)件通過同一數(shù)據(jù)空間進(jìn)行并發(fā)操作。如多用戶數(shù)據(jù)庫, 數(shù)據(jù)黑板。,,軟件

7、工程,9,,6.2 軟件體系結(jié)構(gòu)的設(shè)計(jì),軟件體系結(jié)構(gòu)的設(shè)計(jì)過程是為系統(tǒng)建立一個(gè)基本架構(gòu)。它包括識(shí)別系統(tǒng)的主要構(gòu)件和這些構(gòu)件之間的通信。經(jīng)典的軟件體系結(jié)構(gòu)框架是模型/視圖/控制器(MVC,Model/View/Controller)。,,軟件工程,10,在MVC結(jié)構(gòu)中,模型是軟件應(yīng)用領(lǐng)域中的各種對(duì)象,它們的操作獨(dú)立于用戶界面;視圖則管理用戶界面的輸出;而控制器處理軟件的輸入。輸入事件給出要發(fā)送給模型的消息。一旦模型改變了它的狀態(tài),就

8、立即通過關(guān)聯(lián)機(jī)制通知視圖,讓視圖刷新顯示。這個(gè)關(guān)聯(lián)機(jī)制定義了在模型與各個(gè)視圖之間的關(guān)系。類似地,控制器在輸入事件發(fā)生時(shí)將對(duì)視圖及模型進(jìn)行控制與調(diào)度。,軟件工程,11,對(duì)于MVC,可通過開發(fā)模型的一個(gè)派生類,履行與應(yīng)用相關(guān)聯(lián)的處理。如用戶界面通過定義視圖和控制器的派生類來建立,這些派生類中許多是可復(fù)用的類,像按鈕和對(duì)話框等,這樣可以直接建立新的子系統(tǒng)。 設(shè)計(jì)過程的主要活動(dòng)系統(tǒng)構(gòu)造:將系統(tǒng)分解為一系列基本的子系統(tǒng),每一子系統(tǒng)是獨(dú)立的軟件

9、成分??刂平#航⑾到y(tǒng)各部分之間的控制關(guān)系的一般模型。模塊分解:將子系統(tǒng)進(jìn)一步分解為模塊。,軟件工程,12,6.2.1 系統(tǒng)構(gòu)造 (System Structuring),體系結(jié)構(gòu)設(shè)計(jì)的第一步是將系統(tǒng)分解為一系列相互作用的子系統(tǒng)。在最抽象層次,系統(tǒng)可視為一個(gè)方框圖,圖中每個(gè)方框表示一個(gè)子系統(tǒng)。每個(gè)方框內(nèi)的方框表明子系統(tǒng)本身還可分解為子系統(tǒng)。箭頭表示一個(gè)子系統(tǒng)向另一子系統(tǒng)傳送數(shù)據(jù)或控制。下圖是一個(gè)組裝機(jī)器人的系統(tǒng)構(gòu)造。,軟件

10、工程,13,組裝機(jī)器人控制系統(tǒng)的方框圖,軟件工程,14,體系結(jié)構(gòu)方框圖表示一個(gè)系統(tǒng)結(jié)構(gòu)的概貌,軟件工程師很容易理解它。這種方框圖的缺點(diǎn)是沒有反映系統(tǒng)構(gòu)件之間關(guān)系的本質(zhì),沒有表明系統(tǒng)的外部特性。根據(jù)各子系統(tǒng)如何共享數(shù)據(jù)、如何分布、如何相互交互,可開發(fā)更加特定的模型。數(shù)據(jù)倉庫模型 客戶機(jī)/ 服務(wù)器模型抽象機(jī)模型,軟件工程,15,1) 數(shù)據(jù)倉庫模型 (repository model),所有共享數(shù)據(jù)都存放于數(shù)據(jù)庫中, 這些數(shù)據(jù)可為所

11、有子系統(tǒng)存取。每個(gè)子系統(tǒng)保有各自的數(shù)據(jù)庫,通過傳送消息,可在子系統(tǒng)之間交換數(shù)據(jù)。大量的數(shù)據(jù)圍繞一個(gè)共享數(shù)據(jù)庫或數(shù)據(jù)倉庫來組織。這種系統(tǒng)主要適用于控制系統(tǒng),信息管理系統(tǒng),CAD系統(tǒng),CASE工具集。,軟件工程,16,集成的CASE工具集的體系結(jié)構(gòu)以數(shù)據(jù)倉庫為核心,軟件工程,17,這種體系結(jié)構(gòu)包括數(shù)據(jù)庫、超文本系統(tǒng)及數(shù)據(jù)黑板系統(tǒng)等。它包含兩種成分:一是共享的結(jié)構(gòu)化數(shù)據(jù);二是所有訪問這些數(shù)據(jù)的操作。如果是因?yàn)檩斎霐?shù)據(jù)而引起對(duì)共享數(shù)據(jù)

12、的操作,那么這種控制策略下的體系結(jié)構(gòu)就叫做數(shù)據(jù)庫。如果是由共享數(shù)據(jù)的當(dāng)前狀態(tài)觸發(fā)相應(yīng)的處理,那么這種體系結(jié)構(gòu)就叫做數(shù)據(jù)黑板。為此,需要存儲(chǔ)特定知識(shí)。數(shù)據(jù)倉庫模型可共享大量數(shù)據(jù),在子系統(tǒng)之間無須進(jìn)行數(shù)據(jù)轉(zhuǎn)換。,軟件工程,18,子系統(tǒng)的數(shù)據(jù)模型必須與數(shù)據(jù)倉庫的數(shù)據(jù)模型保持一致。如果一個(gè)新子系統(tǒng)的數(shù)據(jù)模型與數(shù)據(jù)倉庫的數(shù)據(jù)模型沖突,很難將它集成到系統(tǒng)中來。不同的子系統(tǒng)對(duì)保密性、恢復(fù)和備份有不同的要求,而數(shù)據(jù)倉庫模型將迫使所有子系統(tǒng)采用相同

13、的策略。,軟件工程,19,2) 客戶機(jī)/服務(wù)器模型 (client/server model),這是一種分布式系統(tǒng)模型, 表明各種數(shù)據(jù)和處理如何分布到各個(gè)處理器上。有一組功能各自獨(dú)立的服務(wù)器,為其他子系統(tǒng)提供服務(wù),如打印服務(wù)器、文件服務(wù)器、編譯服務(wù)器等。有一組客戶機(jī), 它們調(diào)用服務(wù)器提供的服務(wù),也可能存在一些客戶機(jī),可并發(fā)執(zhí)行客戶機(jī)程序。有一個(gè)網(wǎng)絡(luò), 使得客戶機(jī)能夠訪問服務(wù)器。,軟件工程,20,fil

14、m & picture library系統(tǒng)的體系結(jié)構(gòu),軟件工程,21,在多用戶超文本系統(tǒng)中存在若干服務(wù)器,它們管理和顯示不同媒體的數(shù)據(jù)。Vidio服務(wù)器要求高傳輸率和同步,但對(duì)分辨率要求相對(duì)較低。Picture要求高分辨率。Catalogue要求能處理大量查詢并提供對(duì)超文本信息系統(tǒng)的鏈接??蛻魴C(jī)程序較為簡單,是對(duì)以上服務(wù)器的集成化的用戶界面??蛻魴C(jī) / 服務(wù)器方法可用來實(shí)現(xiàn)基于數(shù)據(jù)倉庫的系統(tǒng),由數(shù)據(jù)倉庫作為服務(wù)器提供系統(tǒng)服

15、務(wù)。,軟件工程,22,各子系統(tǒng)作為客戶訪問數(shù)據(jù)倉庫,但各子系統(tǒng)還有自己的數(shù)據(jù)管理功能。服務(wù)器與客戶間交換數(shù)據(jù)以執(zhí)行處理。對(duì)于大量的數(shù)據(jù)交換,可通過高速網(wǎng)絡(luò)來解決性能問題??蛻魴C(jī) / 服務(wù)器系統(tǒng)多用于具有多個(gè)分布式處理器的網(wǎng)絡(luò)系統(tǒng)。它易于增加一個(gè)新的服務(wù)器并將其與系統(tǒng)的其他集成在一起。系統(tǒng)中服務(wù)器的升級(jí)對(duì)用戶是透明的,且不影響系統(tǒng)的其他部分。,軟件工程,23,3) 抽象機(jī)模型 (abstract machine mo

16、del),一個(gè)體系結(jié)構(gòu)的抽象機(jī)模型也稱為層次模型。此模型可以建立各個(gè)子系統(tǒng)的接口,它把系統(tǒng)組織成一系列的層次,每一層次提供一組服務(wù),定義一個(gè)抽象機(jī)。每一個(gè)抽象機(jī)由其下一層的抽象機(jī)的代碼構(gòu)成。例如,網(wǎng)絡(luò)協(xié)議的參考模型 OSI 即為典型的層次模型,而TCP/IP 通信協(xié)議則為四層的層次模型。,軟件工程,24,TCP/IP 通信的層次模型,軟件工程,25,版本管理系統(tǒng)的例子,版本管理系統(tǒng)用于管理對(duì)象的版本。為支持配置管理,它使用一個(gè)對(duì)

17、象管理系統(tǒng)來操作對(duì)象的信息存儲(chǔ)和服務(wù)。對(duì)象管理系統(tǒng)又使用數(shù)據(jù)庫系統(tǒng)操作基本數(shù)據(jù)存儲(chǔ)和服務(wù),如事務(wù)管理、滾回、恢復(fù)和控制存取。數(shù)據(jù)庫管理系統(tǒng)在其實(shí)現(xiàn)時(shí)又使用操作系統(tǒng)工具和文件堆。,軟件工程,26,軟件工程,27,抽象機(jī)模型支持系統(tǒng)抽象程度遞增的系統(tǒng)開發(fā),具有可變更性和可移植性。當(dāng)一個(gè)層次開發(fā)出來后,就可以為其上層提供有效的某些服務(wù)。如果接口是預(yù)定義的,則一個(gè)層次可為另一個(gè)層次所替換。若一個(gè)層次的接口發(fā)生變更,僅相鄰層次受到影響。

18、層次系統(tǒng)將機(jī)器依賴性局部化到它的內(nèi)部層次上。,軟件工程,28,基于復(fù)用的層次式體系結(jié)構(gòu),層次式結(jié)構(gòu)中,每一層向其上層提供服務(wù),并利用下層的服務(wù)。在層次系統(tǒng)中,內(nèi)部層次全部被隱藏起來,只有外部層次或某些功能可以為外部可見。層次之間交互的通信協(xié)議構(gòu)成層次間的連接;對(duì)層次之間交互的限制構(gòu)成其拓?fù)浼s束。,軟件工程,29,常見的層次結(jié)構(gòu),軟件工程,30,四層式軟件體系結(jié)構(gòu),軟件工程,31,最高層是應(yīng)用系統(tǒng)層,此層包含多個(gè)應(yīng)用系統(tǒng);應(yīng)用系統(tǒng)可

19、以通過其接口與其他系統(tǒng)操作,還可以通過低層軟件提供的服務(wù)或?qū)ο螅ㄈ绮僮飨到y(tǒng)、特定業(yè)務(wù)服務(wù))間接地與其他系統(tǒng)交互操作。次高層是“特定業(yè)務(wù)”層,此層應(yīng)當(dāng)包括專門針對(duì)不同業(yè)務(wù)類型的一系列構(gòu)件庫系統(tǒng)。這樣的構(gòu)件庫系統(tǒng)向用戶提供可復(fù)用的使用事例和對(duì)象構(gòu)件,用于開發(fā)應(yīng)用系統(tǒng)。特定業(yè)務(wù)層的軟件建立在中間件之上。,軟件工程,32,中間件層位于次高層下面,它為次高層的各個(gè)構(gòu)件庫系統(tǒng)提供實(shí)用軟件類,以及不依賴于平臺(tái)的服務(wù)。最低層是系統(tǒng)軟件層,此層包括

20、計(jì)算機(jī)和網(wǎng)絡(luò)等基礎(chǔ)設(shè)施軟件,如操作系統(tǒng)、專用的硬件接口軟件等。為了確保分層式系統(tǒng)可管理,規(guī)定在一個(gè)系統(tǒng)內(nèi),不能從低層復(fù)用高層的構(gòu)件。,軟件工程,33,6.2.2 控制模型 (Control model),系統(tǒng)構(gòu)造模型涉及到一個(gè)系統(tǒng)如何分解為子系統(tǒng)作為一個(gè)整體,必須對(duì)各子系統(tǒng)加以控制,使得它們的服務(wù)能夠在正確的時(shí)刻被導(dǎo)向到正確的地方。系統(tǒng)構(gòu)造模型沒有涉及,也不應(yīng)涉及控制信息,必須按照控制模型組織各子系統(tǒng),并滿足系統(tǒng)構(gòu)造模型的要求。在

21、體系結(jié)構(gòu)層次上的控制模型應(yīng)考慮子系統(tǒng)之間的控制流。,軟件工程,34,1) 集中控制模型 (centralised control model),在集中控制模型中,將一個(gè)子系統(tǒng)設(shè)計(jì)為系統(tǒng)控制器,其職責(zé)是管理其他子系統(tǒng)的執(zhí)行。集中控制模型分為兩類: 控制子系統(tǒng)順序執(zhí)行 控制子系統(tǒng)并發(fā)執(zhí)行作為集中控制器的子系統(tǒng)在將控制轉(zhuǎn)交給另一子系統(tǒng)后,該子系統(tǒng)完成它的功能后控制權(quán)還要?dú)w還給集中控制器子系統(tǒng)。,軟件工程,35,(

22、1)調(diào)用-返回模型 (Call-Return model),此即熟悉的自頂向下的子程序模型??刂剖加谧映绦?qū)哟蔚捻敳?,通過子程序調(diào)用,從層次結(jié)構(gòu)較高層的程序向較低層的程序傳遞控制信息。程序執(zhí)行結(jié)束將向較高層的父程序返回。這種程序模型僅應(yīng)用于順序系統(tǒng)。該模型可以在模塊層使用,以控制函數(shù)或?qū)ο蟆?軟件工程,36,控制的Call-Return模型,軟件工程,37,在調(diào)用- 返回系統(tǒng)結(jié)構(gòu)中, 每一層都只與上下相鄰的兩層通信,每一層在利用下

23、層基礎(chǔ)服務(wù)的條件下,為上層提供服務(wù)。這種結(jié)構(gòu)的優(yōu)點(diǎn)是:提供逐步抽象的編程支持,支持復(fù)用及系統(tǒng)升級(jí)缺點(diǎn)是:不是所有的系統(tǒng)都適合于建成層次結(jié)構(gòu),不能提供最佳性能。,軟件工程,38,(2) 管理器模型 (manager model),這種模型應(yīng)用于并發(fā)系統(tǒng)。模型中有一個(gè)系統(tǒng)構(gòu)件被設(shè)計(jì)為系統(tǒng)管理器,它控制開始、終止,并協(xié)調(diào)其他系統(tǒng)進(jìn)程。一個(gè)進(jìn)程可以是子系統(tǒng),也可以是模塊,它可以與其他進(jìn)程并行執(zhí)行。這種模型也可應(yīng)用于順序系統(tǒng)。管理例程根據(jù)

24、某些狀態(tài)變量的值調(diào)用特定的子系統(tǒng)。,軟件工程,39,一個(gè)實(shí)時(shí)系統(tǒng)的集中控制模型,軟件工程,40,位于中央的系統(tǒng)控制器管理一組進(jìn)程的執(zhí)行,這些進(jìn)程管理傳感器、傳動(dòng)裝置等。根據(jù)系統(tǒng)的狀態(tài)變量,系統(tǒng)控制器決定什么時(shí)候進(jìn)程應(yīng)該啟動(dòng)或停止。系統(tǒng)控制器負(fù)責(zé)監(jiān)測哪些進(jìn)程產(chǎn)生需要處理的信息,或哪些進(jìn)程收到需要處理的信息。系統(tǒng)控制器不停地循環(huán),輪流檢測傳感器和其他進(jìn)程的事件和狀態(tài)變化。基于上述功能,有時(shí)將此模型稱為事件- 循環(huán)模型。,軟件工程,4

25、1,2) 事件驅(qū)動(dòng)系統(tǒng) (Event-driven system),集中控制模型通過一些系統(tǒng)狀態(tài)變量值決定控制的流向;事件驅(qū)動(dòng)模型則是通過外部生成的事件來驅(qū)動(dòng)系統(tǒng)。事件與簡單輸入間的區(qū)別在于事件的時(shí)序存在于事件處理進(jìn)程控制的外部。一個(gè)子系統(tǒng)可能需要存取狀態(tài)信息來處理這些事件,但這些狀態(tài)信息并不決定控制的流向。廣播模型中斷驅(qū)動(dòng)模型,軟件工程,42,(1) 廣播模型 (Broadcast model),在這種模型中,一個(gè)事件向所有的

26、子系統(tǒng)廣播,由能夠處理此事件的子系統(tǒng)響應(yīng)它。這種模型的控制策略不嵌入在事件和消息處理器內(nèi)。子系統(tǒng)決定它需要哪些事件,而事件和消息處理器負(fù)責(zé)將事件發(fā)送給它們。在廣播模型中,子系統(tǒng)注冊(cè)有關(guān)特定事件的信息。一旦事件發(fā)生,控制將轉(zhuǎn)移到能夠處理該事件的子系統(tǒng)。,軟件工程,43,對(duì)于在網(wǎng)絡(luò)中跨越不同計(jì)算機(jī)分布的集成子系統(tǒng),廣播模型十分有效。所有事件可能會(huì)廣播給所有的子系統(tǒng),但會(huì)消耗大量的處理開銷。事件處理器通常還支持點(diǎn)對(duì)點(diǎn)通信。,軟件工程,

27、44,廣播模型的優(yōu)點(diǎn)是演進(jìn)比較容易。新的子系統(tǒng)可以通過在事件與消息處理器中注冊(cè)它可以處理的事件來實(shí)現(xiàn)集成。任何子系統(tǒng)可以在不知道其他子系統(tǒng)名字或位置的情況下激活那些子系統(tǒng)。實(shí)時(shí)系統(tǒng)一定是事件驅(qū)動(dòng)的,它要求快速處理外部生成的事件。,軟件工程,45,(2)中斷驅(qū)動(dòng)模型 (Interrupt-driven model),這種模型專用于硬實(shí)時(shí)處理系統(tǒng)。系統(tǒng)中只有有限的幾種中斷類型。每一中斷都與中斷向量中的一個(gè)存儲(chǔ)位置相關(guān)聯(lián),該位置中存儲(chǔ)了相應(yīng)

28、中斷處理器的入口地址。當(dāng)系統(tǒng)接收到一個(gè)特定類型的中斷時(shí),硬件開關(guān)立即將控制以間址方式轉(zhuǎn)移到相應(yīng)的中斷處理器,進(jìn)行相應(yīng)的中斷處理。中斷處理器對(duì)事件的響應(yīng)將是啟動(dòng)或停止其他某一進(jìn)程。,軟件工程,46,這種模型可以嵌入到其他控制模型中使用,用以對(duì)事件作出緊急反應(yīng)。,軟件工程,47,6.2.3 模塊分解 (Modular decomposition),在設(shè)計(jì)出一個(gè)結(jié)構(gòu)性體系結(jié)構(gòu)后,下一步就是將子系統(tǒng)分解為模塊。在系統(tǒng)分解和模塊分解之間

29、沒有嚴(yán)格的區(qū)別。將子系統(tǒng)分解為模塊時(shí)用到兩種模型: 對(duì)象模型 數(shù)據(jù)流模型如有可能,應(yīng)避免并發(fā)設(shè)計(jì),因?yàn)轫樞蛟O(shè)計(jì)在設(shè)計(jì)、編碼、驗(yàn)證和測試都比較容易。,軟件工程,48,1) 對(duì)象模型 (Object model),在對(duì)象模型中,將系統(tǒng)分解為一組對(duì)象。對(duì)象具有松散耦合和仔細(xì)定義的界面,對(duì)象的狀態(tài)是私有的,對(duì)象的操作是基于其狀態(tài)定義的。對(duì)象具有諸如封裝、隱蔽、繼承等良好的特性。對(duì)象必須自己維護(hù)其數(shù)據(jù)的一致性。對(duì)象是系統(tǒng)的構(gòu)件。因此對(duì)

30、象分解的焦點(diǎn)在于對(duì)象類、對(duì)象屬性及對(duì)象操作。實(shí)現(xiàn)時(shí),對(duì)象就是從這些類中產(chǎn)生。,軟件工程,49,這種體系結(jié)構(gòu)的優(yōu)點(diǎn)是:將具體的實(shí)現(xiàn)部分隱蔽在對(duì)象中,使得代碼之間的獨(dú)立性很好,有利于將復(fù)雜的系統(tǒng)分解為相互操縱的子任務(wù)。缺點(diǎn)是:對(duì)象間進(jìn)行一般的調(diào)用時(shí)必須知道對(duì)方的標(biāo)識(shí)。如果一個(gè)對(duì)象的標(biāo)識(shí)發(fā)生變化,所有顯式調(diào)用這個(gè)對(duì)象操作的地方都要修改。對(duì)象之間的同步等還缺乏現(xiàn)成的機(jī)制。,軟件工程,50,軟件工程,51,2) 數(shù)據(jù)流模型 (Data-flow

31、 model),在數(shù)據(jù)流模型中,將系統(tǒng)分解為一系列功能模塊。這種結(jié)構(gòu)包括批處理和管道及過濾器。在體系結(jié)構(gòu)中的每一個(gè)成份都有一套輸入和輸出數(shù)據(jù),都依輸入-變換-輸出的方式工作。進(jìn)行數(shù)據(jù)變換的構(gòu)件叫做過濾器。把數(shù)據(jù)從一個(gè)過濾器的輸出導(dǎo)入到另一個(gè)過濾器的輸入,就叫做管道。,軟件工程,52,在系統(tǒng)中,各個(gè)過濾器必須是相互獨(dú)立的,每一個(gè)過濾器對(duì)它的上游或下游的過濾器的情況是不知道的,也不能做任何假設(shè)。如果要求最終的輸出結(jié)果與各個(gè)過濾器的

32、執(zhí)行次序相關(guān),就是一個(gè)數(shù)據(jù)流方式的體系結(jié)構(gòu)。這種結(jié)構(gòu)的優(yōu)點(diǎn)是:數(shù)據(jù)流程設(shè)計(jì)明確,直接支持復(fù)用,系統(tǒng)容易維護(hù)和升級(jí),可以進(jìn)行某些性能分析(如流量、死鎖等),容易支持并行計(jì)算。,軟件工程,53,invoices處理系統(tǒng)的數(shù)據(jù)流模型,軟件工程,54,6.3 特定領(lǐng)域的體系結(jié)構(gòu),前面介紹的體系結(jié)構(gòu)模型都是一般的模型,可應(yīng)用于各種不同類型的應(yīng)用中。對(duì)于一個(gè)特殊的應(yīng)用領(lǐng)域,還可使用特定于它的體系結(jié)構(gòu)模型,在開發(fā)新的系統(tǒng)時(shí)可以復(fù)用其公共體系結(jié)構(gòu)

33、。這種體系結(jié)構(gòu)模型即為特定領(lǐng)域的體系結(jié)構(gòu)。存在兩種特定領(lǐng)域的體系結(jié)構(gòu)模型: 類屬模型 (Generic model) 參考模型 (Reference model),軟件工程,55,6.3.1 類屬模型,類屬模型是從許多實(shí)際系統(tǒng)中抽象出來的模型,它封裝了這些系統(tǒng)的主要特征。例如,在實(shí)時(shí)系統(tǒng)中,對(duì)于不同類型的系統(tǒng),如數(shù)據(jù)采集系統(tǒng)、監(jiān)控系統(tǒng)等,有它們各自的類屬模型。又例如,在語言的編譯器中包括有詞法分析器、語法分析器、語義分析器、

34、代碼生成器等,還有在編譯過程中建立的符號(hào)表、語法樹等。存在不同的體系結(jié)構(gòu)模型組織編譯器的構(gòu)件。,軟件工程,56,編譯器的數(shù)據(jù)流模型,編譯器可以使用復(fù)合模型實(shí)現(xiàn)。編譯器用數(shù)據(jù)流體系結(jié)構(gòu)實(shí)現(xiàn),處理流程按詞法分析?語法分析?語義分析?代碼生成的順序執(zhí)行,但處理共享數(shù)據(jù)時(shí),使用了當(dāng)作數(shù)據(jù)倉庫用的符號(hào)表。,軟件工程,57,數(shù)據(jù)流模型在沒有用戶交互的批處理環(huán)境下執(zhí)行編譯十分有效。但當(dāng)編譯器需要與其他語言處理工具,如編輯器、交互調(diào)試器、字體打印機(jī)等

35、集成時(shí)效果不是很好。此時(shí),編譯器可以使用基于數(shù)據(jù)倉庫的模型來組織類屬系統(tǒng)的構(gòu)件。在這種模型中,符號(hào)表、語法樹等起到中央信息倉庫的作用,各種工具或工具件的通信都經(jīng)過它。此外,有關(guān)程序的語法定義、輸出格式定義等都從工具中取出,歸入到數(shù)據(jù)倉庫中。,軟件工程,58,語言處理系統(tǒng)的數(shù)據(jù)倉庫模型,軟件工程,59,6.3.2 參考模型,一般的軟件體系結(jié)構(gòu)模型反映的是已有系統(tǒng)的體系結(jié)構(gòu),而參考模型反映了一大類系統(tǒng)的體系結(jié)構(gòu)。參考模型源于對(duì)應(yīng)用領(lǐng)

36、域的研究,它描述了一個(gè)理想化的包含了系統(tǒng)應(yīng)具有的所有特征的軟件體系結(jié)構(gòu)。典型的例子是OSI參考模型。它描述了開放系統(tǒng)互連的標(biāo)準(zhǔn)。如果一個(gè)系統(tǒng)遵從這個(gè)標(biāo)準(zhǔn),就可以與其他遵從該標(biāo)準(zhǔn)的系統(tǒng)互連。,軟件工程,60,通常,參考模型不能被正式看作是系統(tǒng)實(shí)現(xiàn)的方式,而主要使用它作為比較一個(gè)應(yīng)用領(lǐng)域中不同系統(tǒng)之間異同的工具。OSI參考模型是一個(gè)七層模型。較低層主要實(shí)現(xiàn)物理連接,中間層主要實(shí)現(xiàn)數(shù)據(jù)傳輸,較高層實(shí)現(xiàn)帶有語義的應(yīng)用信息的傳輸。 其他典型

37、的參考模型有關(guān)CASE環(huán)境的參考模型ECMA,關(guān)于軟件工廠的參考模型,某些設(shè)計(jì)模式等。,軟件工程,61,OSI參考模型的體系結(jié)構(gòu),,軟件工程,62,6.4 分布式系統(tǒng)體系結(jié)構(gòu),所有大型計(jì)算機(jī)系統(tǒng)現(xiàn)在都是分布式系統(tǒng)。分布式系統(tǒng)的信息處理分布在多個(gè)計(jì)算機(jī)上,而不是只限于單個(gè)計(jì)算機(jī)上。在分布式系統(tǒng)中,系統(tǒng)軟件運(yùn)行于用網(wǎng)絡(luò)相連的一組松散地集成在一起的處理器上。例如,銀行的ATM系統(tǒng)、預(yù)定系統(tǒng)、群件(Groupware) 系統(tǒng)等。,軟件工

38、程,63,6.4.1 分布式系統(tǒng)的主要特征,資源共享 允許硬件、軟件資源共享使用。開放性 是指系統(tǒng)通過非私有資源來擴(kuò)展自己的能力。分布式系統(tǒng)可包括來自不同廠家的硬件和軟件的兼容產(chǎn)品。并發(fā)性 在分布式系統(tǒng)中,在網(wǎng)絡(luò)的不同計(jì)算機(jī)上可同時(shí)運(yùn)行多個(gè)進(jìn)程,它們?cè)谶\(yùn)行期間可以互相通信。可伸縮性 分布式系統(tǒng)是可伸縮的,可以通過增加新的資源來滿足對(duì)系統(tǒng)的新的需求。,軟件工程,64,容錯(cuò)性 具有多臺(tái)計(jì)算機(jī)和復(fù)制信息的

39、潛能意味著分布式系統(tǒng)能夠容忍某些硬件或軟件的失效。在大多數(shù)系統(tǒng)中,當(dāng)失效發(fā)生時(shí)會(huì)導(dǎo)致某些服務(wù)能力下降,只有當(dāng)網(wǎng)絡(luò)失效時(shí)才完全喪失其服務(wù)能力。透明性 是指對(duì)用戶隱藏了系統(tǒng)的分布情況。用戶可以完全透明地訪問系統(tǒng)的資源而不必了解系統(tǒng)資源的分布。不過,在多數(shù)情況下,可以讓用戶了解一些有關(guān)系統(tǒng)組織的知識(shí),這有助于用戶更好地使用這些資源。,軟件工程,65,6.4.2 典型的分布式系統(tǒng)的體系結(jié)構(gòu),多處理器體系結(jié)構(gòu)多處理器系統(tǒng)由多個(gè)不同的進(jìn)

40、程組成,這些進(jìn)程可以在不同的處理器上運(yùn)行。例如,在實(shí)時(shí)系統(tǒng)中,采集信息、制訂決策、執(zhí)行控制等進(jìn)程可以由調(diào)度器控制在同一臺(tái)處理器上運(yùn)行,而使用多處理器則能夠改進(jìn)系統(tǒng)的性能和彈性。進(jìn)程分配到哪一臺(tái)處理器,可以是預(yù)先確定的,也可以用分配器控制進(jìn)行分配。,軟件工程,66,多處理器交通控制系統(tǒng),多進(jìn)程的軟件系統(tǒng)不一定是分布式系統(tǒng)。但如果有多個(gè)處理器可用,可考慮分布式實(shí)現(xiàn)。,軟件工程,67,客戶機(jī)/服務(wù)器體系結(jié)構(gòu)在這種體系結(jié)構(gòu)中,一個(gè)應(yīng)用程序

41、被模型化為一組由服務(wù)器提供的服務(wù)和一組使用這些服務(wù)的客戶機(jī)。客戶機(jī)需要知道服務(wù)器的存在,但通常不知道其他客戶機(jī)的存在??蛻魴C(jī)與服務(wù)器是不同的進(jìn)程。通常我們討論它們時(shí),把它們當(dāng)作邏輯進(jìn)程,就是說,不關(guān)心它們物理上放在哪一臺(tái)計(jì)算機(jī)上。,軟件工程,68,客戶機(jī)/服務(wù)器體系結(jié)構(gòu),邏輯模型,進(jìn)程與處理器之間不一定是一對(duì)一的映射。,s1,服務(wù)器進(jìn)程,客戶機(jī)進(jìn)程,c1,軟件工程,69,客戶機(jī)/服務(wù)器網(wǎng)絡(luò)中的計(jì)算機(jī),物理模型,是邏輯模型的具體實(shí)現(xiàn),

42、SC2,服務(wù)器計(jì)算機(jī),客戶機(jī)計(jì)算機(jī),CC1,軟件工程,70,客戶機(jī)/服務(wù)器的三層結(jié)構(gòu),表示層處理與用戶的交互和顯示提交給用戶的信息。應(yīng)用處理層實(shí)現(xiàn)應(yīng)用的邏輯。數(shù)據(jù)管理層定義和操作數(shù)據(jù)庫。在集中式系統(tǒng)中,三層的界限不必分得這樣清楚。在分布式系統(tǒng)中必須清楚地給出它們之間的界限,以便將每一層分布到不同的機(jī)器上。,表示層,數(shù)據(jù)管理層,應(yīng)用處理層,,,軟件工程,71,客戶機(jī)/服務(wù)器的二層結(jié)構(gòu),二層客戶機(jī)/服務(wù)器體系結(jié)構(gòu)有兩種形態(tài):瘦客戶

43、機(jī)模型 所有應(yīng)用處理與數(shù)據(jù)管理都在服務(wù)器上,客戶機(jī)只負(fù)責(zé)表示功能。胖客戶機(jī)模型 服務(wù)器只負(fù)責(zé)數(shù)據(jù)管理,客戶機(jī)負(fù)責(zé)應(yīng)用邏輯與系統(tǒng)用戶的交互。,應(yīng)用處理數(shù)據(jù)管理,數(shù)據(jù)管理,表示,表示應(yīng)用處理,瘦客戶機(jī)模型,胖客戶機(jī)模型,軟件工程,72,電子商務(wù)系統(tǒng)常用的三層體系結(jié)構(gòu),數(shù)據(jù)層 數(shù)據(jù)存儲(chǔ)應(yīng)用邏輯層 業(yè)務(wù)處理、業(yè)務(wù)流轉(zhuǎn)、系統(tǒng)管理、日志管理、消息管理、權(quán)限管理、碼表維護(hù)、其他等;表示層 用戶接口;,,軟件

44、工程,73,6.4.3 分布式對(duì)象體系結(jié)構(gòu),分布式系統(tǒng)設(shè)計(jì)的更通用的方法是去掉客戶機(jī)與服務(wù)器的差別,用分布式對(duì)象系統(tǒng)進(jìn)行設(shè)計(jì)。在分布式對(duì)象體系結(jié)構(gòu)中,對(duì)象是基本系統(tǒng)構(gòu)件。對(duì)象提供一組服務(wù),并提供對(duì)外這些服務(wù)的接口。對(duì)象之間不存在客戶機(jī)與服務(wù)器的界限。接受服務(wù)者即扮演客戶機(jī)的角色,提供服務(wù)者就是服務(wù)器。,軟件工程,74,對(duì)象可能分布在網(wǎng)絡(luò)的多臺(tái)計(jì)算機(jī)上,它們通過中間件相互通信。這個(gè)中間件被看作軟件總線, 它提供服務(wù)實(shí)現(xiàn)對(duì)象通信和增刪

45、。,軟件工程,75,這個(gè)中間件叫做對(duì)象請(qǐng)求代理,它的作用是在對(duì)象之間提供一個(gè)無縫的接口。原則上,系統(tǒng)中的對(duì)象可以通過不同的程序語言來實(shí)現(xiàn),可以運(yùn)行于不同的平臺(tái)上,而它們的名字在系統(tǒng)中可以不為其他對(duì)象所知。中間件就像“膠水”一樣實(shí)現(xiàn)無縫的對(duì)象通信。有兩種主要的支持分布式對(duì)象計(jì)算的標(biāo)準(zhǔn)。CORBA(通用對(duì)象請(qǐng)求代理體系結(jié)構(gòu))DCOM(分布式構(gòu)件對(duì)象模型),,軟件工程,76,6.5 設(shè)計(jì)模式,所謂模式一詞來源于城市和建筑領(lǐng)域。美國加州

46、大學(xué)環(huán)境結(jié)構(gòu)中心研究所所長 Christopher Alexander 經(jīng)過 22 年對(duì)舒適住宅和周邊環(huán)境進(jìn)行大量調(diào)查和資料收集工作,發(fā)現(xiàn)人們對(duì)舒適住宅和城市環(huán)境存在著共同的認(rèn)同規(guī)律。他把它們歸結(jié)為 253 個(gè)模式,對(duì)每個(gè)模式都從Context(模式可適用的環(huán)境條件)、Theme或Problem(在特定條件要解決的目標(biāo)和問題)、,6.5.1 什么是模式?,軟件工程,77,Solution(對(duì)目標(biāo)問題求解過程中各種物理關(guān)系的記述)等三

47、個(gè)側(cè)面進(jìn)行描述。因此,所謂“模式”是指遵從某種規(guī)則或規(guī)律反復(fù)出現(xiàn)的思維方式或表現(xiàn)。Christopher Alexander說過:“每一個(gè)模式描述了一個(gè)在我們周圍不斷重復(fù)發(fā)生的問題以及該問題的解決方案的核心。這樣,你就能多次使用該方案而不必做重復(fù)勞動(dòng)?!币话銇碇v,模式是針對(duì)某一特定前提的解法。它記述著我們身邊頻繁發(fā)生的某類問題及其基本解,軟件工程,78,法,我們可以反復(fù)使用這些解法。對(duì)同類問題可以使用同一解法,而不必總是一切從頭做

48、起。將模式最早引入軟件工程領(lǐng)域的是1991~1992年以“四人幫 (Gang of Four)”自稱的四位軟件工程專家,他們?cè)?1994 年歸納發(fā)表了 23 種設(shè)計(jì)模式,旨在用模式來統(tǒng)一溝通面向?qū)ο蠓椒ㄔ诜治觥⒃O(shè)計(jì)和實(shí)現(xiàn)之間的鴻溝。1995 年 Gamma 等人出版的《設(shè)計(jì)模式:可復(fù)用,6.5.2 設(shè)計(jì)模式的概念,軟件工程,79,面向?qū)ο筌浖幕A(chǔ)》對(duì)設(shè)計(jì)模式進(jìn)行了基本分類,并討論了一些新的需要研究的模式,引發(fā)了模式研究的熱潮。

49、設(shè)計(jì)模式的原則用面向?qū)ο蠓椒ㄖ械念惡蛯?duì)象做個(gè)比較。類的設(shè)計(jì)包括了兩部分:屬性和方法。對(duì)于類的每一個(gè)對(duì)象,方法都一樣,但屬性值各不相同。通過類和對(duì)象的劃分,把運(yùn)行時(shí)不會(huì)變化的和會(huì)變化的部分分開,并且通過給可以變化的部分賦值,使對(duì)象可以工作在更多的環(huán)境中。,軟件工程,80,類的另一個(gè)特點(diǎn)是封裝,即把類的功能的聲明與實(shí)現(xiàn)分開。設(shè)計(jì)模式也是這樣,通過把聲明和實(shí)現(xiàn)分離,提供了類似的靈活性:一個(gè)靈活的設(shè)計(jì)應(yīng)可以作為模板來解決一組類似的問題,

50、為此需要把隨環(huán)境、狀態(tài)變化的部分和不變化的部分盡可能分離。此外,為便于使用和復(fù)用,聲明和實(shí)現(xiàn)也最好分開。這是類的設(shè)計(jì)給出的啟示。設(shè)計(jì)模式基本也是遵從這樣的方式實(shí)現(xiàn)的。,軟件工程,81,正是因?yàn)樵O(shè)計(jì)模式與類的機(jī)制很相似,所以,設(shè)計(jì)模式很適合使用面向?qū)ο蟮姆绞郊右栽O(shè)計(jì)與實(shí)現(xiàn)。設(shè)計(jì)模式的運(yùn)用運(yùn)用設(shè)計(jì)模式包括:選擇、使用和總結(jié)。它們是相互相對(duì)獨(dú)立的三個(gè)過程。選擇在運(yùn)用設(shè)計(jì)模式之前,需要了解所有設(shè)計(jì)模式解決什么樣的問題。因?yàn)槊恳环N設(shè)計(jì)模

51、式是針對(duì)特定的問題,或根據(jù)特定的情況設(shè)計(jì),軟件工程,82,的,它們是針對(duì)軟件設(shè)計(jì)時(shí)面對(duì)的典型問題的成功設(shè)計(jì)方案。設(shè)計(jì)模式依照它們所能解決的問題進(jìn)行了分類,這種分類提供了模式的檢索和選擇的基礎(chǔ)。選擇設(shè)計(jì)模式時(shí)需要注意的兩個(gè)方面:掃描各種設(shè)計(jì)模式的“意圖”欄,根據(jù)這些模式的分類,仔細(xì)地分析自己的問題應(yīng)當(dāng)對(duì)應(yīng)到那幾種模式。研究這些模式之間的細(xì)微差別。有了幾個(gè),軟件工程,83,固定的目標(biāo)后就可以進(jìn)行詳細(xì)的比較,最終選擇使用的模式。使用

52、在選擇了設(shè)計(jì)模式之后,考慮如何使用:瀏覽所選模式,特別注意“適用性”和“效果”兩欄,確認(rèn)它能解決你的問題。仔細(xì)研讀“結(jié)構(gòu)”、“參與者”、“協(xié)作”等三欄,確認(rèn)你已理解其中的類、對(duì)象,以及它們之間的關(guān)系。閱讀“代碼示例”,看看這個(gè)模式的代碼的,軟件工程,84,具體例子。程序代碼能夠幫助你學(xué)會(huì)如何運(yùn)作設(shè)計(jì)模式。給模式的參與者一個(gè)名字,使它們?cè)趹?yīng)用的環(huán)境中有意義。原設(shè)計(jì)模式中參與者的名字過于抽象,不適合用作應(yīng)用程序中的名字,因此,建議

53、將其納入為名字的一部分,使模式的角色在程序中更突出。例如,在文字排版算法中用到 Strategy 模式,可以選擇 SimpleLayoutStrategy 作為類名,還可以選擇 TeXLayoutStrategy。,軟件工程,85,定義類,聲明這些類的接口和它們的繼承關(guān)系,定義有關(guān)數(shù)據(jù)和對(duì)象引用的實(shí)例變量。并且找出設(shè)計(jì)模式會(huì)影響到哪些既有的類,做出相應(yīng)的修改。根據(jù)設(shè)計(jì)模式所指明的操作名稱來定義你的應(yīng)用程序中的操作的名字。最好參考應(yīng)用

54、程序的性質(zhì)、每個(gè)操作的職責(zé)和交互來命名,還須注意保持與命名規(guī)則的一致。例如,可以用“Create-”這個(gè)固定的前置詞來稱呼 Factory method。實(shí)現(xiàn)設(shè)計(jì)模式中各個(gè)操作的職責(zé)和交互。,軟件工程,86,在使用設(shè)計(jì)模式時(shí),注意不能隨意使用。當(dāng)你通過引入間接層次獲得靈活性和可變性的同時(shí)會(huì)使程序更復(fù)雜,速度更慢,還會(huì)給維護(hù)一個(gè)個(gè)更復(fù)雜的系統(tǒng)帶來困難。因此,只有當(dāng)確實(shí)需要獲得系統(tǒng)的靈活性時(shí),才有必要使用。模式中的“效果”一欄,可以幫助

55、你評(píng)估使用模式的得失。總結(jié)總結(jié)對(duì)模式使用的效益,包括使用模式的適合程度和效果。,軟件工程,87,使用設(shè)計(jì)模式時(shí)可能對(duì)模式做一些小變動(dòng),總結(jié)這種變動(dòng)的原因和效果。設(shè)計(jì)者通過總結(jié)所有考慮到的情況、問題以及解決的方法,為日后有效使用模式取得經(jīng)驗(yàn),同時(shí)可以從中發(fā)現(xiàn)系統(tǒng)中可能潛在的問題,發(fā)現(xiàn)應(yīng)用于特定領(lǐng)域的設(shè)計(jì)模式。設(shè)計(jì)模式的四個(gè)基本要素模式名 用于描述模式的名字,說明模式的問題、解決方案和效果。問題 解決說明在何種場合使

56、用模式。要描述使用模式的先決條件和特定設(shè)計(jì)問題。,軟件工程,88,解決方案 描述設(shè)計(jì)的成分、它們之間的相互關(guān)系、各自的職責(zé)和合作方式。效果 描述模式使用的效果,包括對(duì)時(shí)間和空間的衡量,以及對(duì)系統(tǒng)靈活性、可擴(kuò)充性、可移植性的影響。設(shè)計(jì)模式的模板模式名和分類 模式名描述了模式的本質(zhì)。意圖 說明設(shè)計(jì)模式做什么?基本原理和意圖是什么?它要解決什么特定設(shè)計(jì)問題?別名 模式的其他名稱。,軟件工程,89,動(dòng)機(jī)

57、 說明設(shè)計(jì)問題以及如何用模式中的類、對(duì)象來解決該問題的特定情景。適用性 什么情況下可使用該設(shè)計(jì)模式?該模式可用來改進(jìn)哪些不良設(shè)計(jì)?結(jié)構(gòu) 采用UML描述模式中的類,并使用順序圖說明對(duì)象間的請(qǐng)求序列和協(xié)作關(guān)系。 參與者 設(shè)計(jì)模式中的類和 / 或?qū)ο笠约八鼈兏髯缘穆氊?zé)。效果 模式怎樣支持它的目標(biāo)?使用模式的效果和所需做的權(quán)衡取舍?系統(tǒng)結(jié)構(gòu)的哪些方面可以獨(dú)立改變?,軟件工程,90,實(shí)現(xiàn) 實(shí)現(xiàn)模式時(shí)需要知

58、道的一些提示、技術(shù)要點(diǎn)及應(yīng)避免的缺陷,以及是否存在某些特定于實(shí)現(xiàn)語言的問題。代碼示例 說明怎樣用 C++ 或 SmallTalk 實(shí)現(xiàn)該模式的代碼片段。已知應(yīng)用 實(shí)際系統(tǒng)中發(fā)現(xiàn)的模式的例子,每個(gè)模式應(yīng)至少包括兩個(gè)不同領(lǐng)域的實(shí)例。相關(guān)模式 與這個(gè)模式緊密相關(guān)的模式有哪些?其間重要的不同之處是什么?這個(gè)模式應(yīng)與哪些其他模式一起使用?,軟件工程,91,設(shè)計(jì)模式的特性靈活性 設(shè)計(jì)模式應(yīng)是精巧的解決方法。一般化

59、 設(shè)計(jì)模式不依賴于某一種特定的系統(tǒng)類型、程序設(shè)計(jì)語言或應(yīng)用領(lǐng)域。已驗(yàn)證 設(shè)計(jì)模式已在某些面向?qū)ο笙到y(tǒng)中實(shí)踐并已通過測試。簡單性 設(shè)計(jì)模式通常較小,只有幾個(gè)類??蓮?fù)用 可在設(shè)計(jì)層次(不是編碼層次)應(yīng)用于所有的系統(tǒng)。面向?qū)ο?設(shè)計(jì)模式以面向?qū)ο笮问匠霈F(xiàn)。,軟件工程,92,設(shè)計(jì)模式的類型依據(jù)設(shè)計(jì)模式工作目的不同,模式可分為創(chuàng)建型模式 (Creational pattern) 與對(duì)象的創(chuàng)建有關(guān);結(jié)

60、構(gòu)型模式 (Structural pattern) 處理類和對(duì)象的組合,將一組對(duì)象組合成一個(gè)大的結(jié)構(gòu),例如復(fù)雜的用戶界面;行為型模式 (Behavioral pattern) 描述類或?qū)ο蟮慕换ズ吐氊?zé)分配,定義對(duì)象間的通信和復(fù)雜程序中的流控。,軟件工程,93,依據(jù)設(shè)計(jì)模式是用于類還是用于對(duì)象,模式還可分為類模式和對(duì)象模式。類模式處理類與子類之間的關(guān)系。這些關(guān)系通過繼承建立,是靜態(tài)的。對(duì)象模式處理對(duì)象之間的關(guān)系。這些關(guān)

61、系在運(yùn)行時(shí)是可以變化的,具有動(dòng)態(tài)性。創(chuàng)建型類模式將對(duì)象的部分創(chuàng)建工作延遲到子類。創(chuàng)建型對(duì)象模式則將它延遲到另一個(gè)對(duì)象中。結(jié)構(gòu)型類模式使用繼承機(jī)制組合類,結(jié)構(gòu)型對(duì)象模式則描述對(duì)象的組裝方式。,軟件工程,94,行為型類模式使用繼承機(jī)制描述算法和控制流,行為型對(duì)象模式則描述一組對(duì)象如何協(xié)作完成單個(gè)對(duì)象無法完成的任務(wù)。,軟件工程,95,軟件工程,96,創(chuàng)建型模式,結(jié)構(gòu)型模式,行為型模式,軟件工程,97,創(chuàng)建型模式,結(jié)構(gòu)型模式,行為型模式,軟

62、件工程,98,6.5.3 創(chuàng)建型模式,創(chuàng)建型模式描述怎樣創(chuàng)建一個(gè)對(duì)象。它隱藏對(duì)象創(chuàng)建的具體細(xì)節(jié),使用程序可不依賴具體的對(duì)象。因此當(dāng)增加一個(gè)新對(duì)象時(shí)幾乎不需要修改代碼。創(chuàng)建型類模式將對(duì)象的部分創(chuàng)建工作延遲到子類,創(chuàng)建型對(duì)象模式將它延遲到另一對(duì)象中。這時(shí),重點(diǎn)從定義固定的行為集合轉(zhuǎn)向定義一個(gè)較小的基本行為集合,由這些行為可以組成許多更復(fù)雜的行為集合。,軟件工程,99,模式的特點(diǎn) 封裝了系統(tǒng)中使用的類的具體信息; 隱藏了這些類的實(shí)例如

63、何創(chuàng)建、如何放在一起的(機(jī)制)。系統(tǒng)關(guān)于這些對(duì)象所知道的只有由抽象類定義的接口。創(chuàng)建型類模式有 Factory Method(工廠方法)。創(chuàng)建型對(duì)象模式包括 Abstract Factory(抽象工廠)、Builder(生成器)、Prototype(原型)、Singleton(單件)四種模式。,軟件工程,100,1. Abstract factory (抽象工廠),1)意圖 以同一個(gè)接口建立一整族相關(guān)或相互依賴的對(duì)象,而不

64、用指明各對(duì)象真正所屬的具體類。2)動(dòng)機(jī) 例如,在創(chuàng)建可支持多種GUI標(biāo)準(zhǔn)(如Motif和Persentation Manager)的工具包時(shí),因?yàn)椴煌腉UI標(biāo)準(zhǔn)會(huì)定義出不同外觀及行為的“用戶界面組件”(widget),如滾動(dòng)條、按鈕、視窗等。為了能夠囊括各種GUI標(biāo)準(zhǔn),應(yīng)用程序不能把組件寫死,不能限制到特定GUI風(fēng)格的組件類,否則日后很難換成其他GUI風(fēng)格的組件。,軟件工程,101,解決方法是:先定義一個(gè)抽象類WidgetF

65、actory(用斜體字區(qū)分抽象類),這個(gè)類聲明了創(chuàng)建各種基本組件的接口,再逐一替各種基本組件定義相對(duì)應(yīng)的抽象類,如 ScrollBar、Window等,讓它的具體子類來真正實(shí)現(xiàn)特定的GUI標(biāo)準(zhǔn)。在WidgetFactory的接口中,可以通過一些操作傳遞回各種抽象組件類旗下具體創(chuàng)建的對(duì)象個(gè)體,用戶程序可以據(jù)此得到組件個(gè)體,但它不知道到底涉及了哪些具體類。這樣使得用戶程序與底層GUI系統(tǒng)之間保持了一種安全距離。,軟件工程,102,各GUI

66、標(biāo)準(zhǔn)都有自己的WidgetFactory具體子類,它的操作可以創(chuàng)建出相應(yīng)的GUI組件。例如,MotifWidgetFactory的CreateScrollBar() 操作可以創(chuàng)建并傳遞回一個(gè)Motif風(fēng)格的滾動(dòng)條,PMWidgetFactory的CreateScrollBar() 則可以創(chuàng)建并傳遞回一個(gè)Presentation Manager風(fēng)格的滾動(dòng)條。用戶程序只需通過WidgetFactory接口,不必知道幕后到底是哪些個(gè)類參加工

67、作,就是說,用戶程序只針對(duì)抽象類的接口編寫,而非特定的具體類。,軟件工程,103,軟件工程,104,class WidgetFactory { //抽象工廠: 窗口構(gòu)件接口public: virtual CreateScrollBar( ) = 0; //創(chuàng)建滾動(dòng)條 virtual CreateWindow( ) = 0; //創(chuàng)建窗口};class MotifWidge

68、tFactory : public WidgetFactory {public: MotifWidgetFactory() { …實(shí)現(xiàn)略…}; CreateScrollBar( ) { …實(shí)現(xiàn)略…}; CreateWindow( ) { …實(shí)現(xiàn)略…};};class PMWidgetFactory : public WidgetFactory {public: PMWidgetFacto

69、ry() { …實(shí)現(xiàn)略…};,軟件工程,105,CreateScrollBar( ) { …實(shí)現(xiàn)略…}; CreateWindow( ) { …實(shí)現(xiàn)略…};};class ScrollBar { //滾動(dòng)條抽象類public: ScrollBar() {}; virtual void CreateSc

70、rollBarInstance ( ScrollBar& * ) = 0; virtual void displayScrollBar() = 0; };class MotifScrollBar : public ScrollBar { //Motif滾動(dòng)條具體子類public: MotifScrollBar() {…實(shí)現(xiàn)略…}; void CreateScrollBarI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論