《軟件工程》教學(xué)課件-第7章-面向?qū)ο筌浖O(shè)計與實現(xiàn)_第1頁
《軟件工程》教學(xué)課件-第7章-面向?qū)ο筌浖O(shè)計與實現(xiàn)_第2頁
《軟件工程》教學(xué)課件-第7章-面向?qū)ο筌浖O(shè)計與實現(xiàn)_第3頁
《軟件工程》教學(xué)課件-第7章-面向?qū)ο筌浖O(shè)計與實現(xiàn)_第4頁
《軟件工程》教學(xué)課件-第7章-面向?qū)ο筌浖O(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩373頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

軟件工程軟件17面向?qū)ο筌浖O(shè)計與實現(xiàn)軟件設(shè)計與實現(xiàn)

在傳統(tǒng)的軟件工程中,軟件生存周期包括可行性研究、需求分析、概要設(shè)計和詳細(xì)設(shè)計、系統(tǒng)實現(xiàn)、測試和維護(hù)。面向?qū)ο筌浖O(shè)計也要求系統(tǒng)設(shè)計員進(jìn)行需求分析和可行性研究,并在設(shè)計之前準(zhǔn)備好一組需求規(guī)范。在進(jìn)行軟件開發(fā)時,和傳統(tǒng)的軟件工程一樣,包括軟件分析和設(shè)計階段。面向?qū)ο筌浖O(shè)計技術(shù)在分析和設(shè)計軟件時所用的概念及表示方法相同,本書都應(yīng)用UML來描述。面向?qū)ο蠓椒ú粡娬{(diào)軟件分析和設(shè)計的嚴(yán)格區(qū)分,但有不同的側(cè)重點。在面向?qū)ο蠓治鲭A段,要分析系統(tǒng)中所含的所有對象及其相互之間的關(guān)系,建立一個獨立于系統(tǒng)實現(xiàn)的面向?qū)ο蠓治瞿P?。面向?qū)ο笤O(shè)計是把分析階段得到的需求轉(zhuǎn)變成符合成本和質(zhì)量要求的、抽象的系統(tǒng)實現(xiàn)方案的過程。設(shè)計階段考慮與實現(xiàn)有關(guān)的因素,對面向?qū)ο蠓治瞿P瓦M(jìn)行調(diào)整并補充與實現(xiàn)有關(guān)的部分,形成面向?qū)ο笤O(shè)計。面向?qū)ο笤O(shè)計又分為系統(tǒng)設(shè)計和對象設(shè)計兩個階段。面向?qū)ο笤O(shè)計產(chǎn)生一組設(shè)計規(guī)范后,用面向?qū)ο蟪绦蛟O(shè)計語言來實現(xiàn)它們。面向?qū)ο筌浖O(shè)計與實現(xiàn)7面向?qū)ο筌浖O(shè)計與實現(xiàn)軟件設(shè)計與實現(xiàn)在傳統(tǒng)7面向?qū)ο筌浖O(shè)計與實現(xiàn)軟件設(shè)計與實現(xiàn)

從面向?qū)ο蠓治觯∣OA)到面向?qū)ο笤O(shè)計(OOD),是一個逐漸擴充模型的過程,分析和設(shè)計活動是一個多次反復(fù)迭代的過程。具體地就是,面向?qū)ο蠓治觥⑾到y(tǒng)設(shè)計和對象設(shè)計3個階段反復(fù)循環(huán)地進(jìn)行。由于面向?qū)ο蠓椒▽W(xué)在概念和表示方法上的一致性,保證了在各項開發(fā)活動之間的平滑過渡。在面向?qū)ο筌浖治雠c設(shè)計過程中,應(yīng)用UML建立模型時,會產(chǎn)生以下4種主要模型:用例模型、靜態(tài)模型、動態(tài)模型和實現(xiàn)模型。有時,可以從特定的角度觀察系統(tǒng),構(gòu)成系統(tǒng)的一個視圖,說明系統(tǒng)的一個特殊側(cè)面。★本章重點:面向?qū)ο蠓治?;架?gòu)設(shè)計和對象設(shè)計;面向?qū)ο鬁y試。面向?qū)ο筌浖O(shè)計與實現(xiàn)7面向?qū)ο筌浖O(shè)計與實現(xiàn)軟件設(shè)計與實現(xiàn)從面向Contents目錄面向?qū)ο蠓治?1軟件架構(gòu)設(shè)計和對象設(shè)計02面向?qū)ο笙到y(tǒng)的實現(xiàn)03面向?qū)ο笙到y(tǒng)的測試04面向?qū)ο蠓椒▽嵗?5Contents目錄面向?qū)ο蠓治?1軟件架構(gòu)設(shè)計和對象設(shè)計0401面向?qū)ο蠓治雒嫦驅(qū)ο蠓治鲞^程面向?qū)ο蠓治鲈瓌t建立對象模型建立動態(tài)模型建立功能模型01面向?qū)ο蠓治雒嫦驅(qū)ο蠓治鲞^程面向?qū)ο蠓治鲈瓌t建立對象模型57.1面向?qū)ο蠓治雒嫦驅(qū)ο蠓治龅哪康氖菍陀^世界的系統(tǒng)建立對象模型、動態(tài)模型和功能模型。在建立模型之前必須進(jìn)行調(diào)查研究,分析系統(tǒng)需求,在理解系統(tǒng)需求的基礎(chǔ)上建立模型,還要對模型進(jìn)行驗證。復(fù)雜問題的建模工作,需要反復(fù)迭代構(gòu)造模型,先構(gòu)造子集、后構(gòu)造整體模型。7.1面向?qū)ο蠓治雒嫦驅(qū)ο蠓治龅哪康氖菍陀^世界的系統(tǒng)建立7.1面向?qū)ο蠓治?.1.1面向?qū)ο蠓治鲞^程數(shù)據(jù)說明(1)發(fā)現(xiàn)對象,定義對象和類的屬性與服務(wù)。(2)分析確定各類對象之間的關(guān)系,建立實例連接。(3)劃分主題,定義系統(tǒng)結(jié)構(gòu)。(4)編寫腳本、畫順序圖,分析對象在系統(tǒng)中的不同狀態(tài)及狀態(tài)之間的轉(zhuǎn)換,建立動態(tài)模型。(5)分析系統(tǒng)中數(shù)據(jù)之間的依賴關(guān)系及數(shù)據(jù)處理功能,建立功能模型。

面向?qū)ο蠓治鼍褪鞘占驼碛脩粜枨蟛⒔栴}域精確模型的過程。分析工作主要包括理解、表達(dá)和驗證系統(tǒng)。面向?qū)ο蠓治鲭A段要分析出軟件系統(tǒng)中所含的所有對象及其相互之間的關(guān)系。面向?qū)ο蠓治鲭A段的步驟為:7.1面向?qū)ο蠓治?.1.1面向?qū)ο蠓治鲞^程數(shù)據(jù)說明(17.1面向?qū)ο蠓治?.1.1面向?qū)ο蠓治鲞^程

通過以上分析,建立系統(tǒng)的3種模型:①描述系統(tǒng)數(shù)據(jù)結(jié)構(gòu)的對象模型;②描述系統(tǒng)控制結(jié)構(gòu)的動態(tài)模型;③描述系統(tǒng)功能的功能模型。

這3種模型分別從不同的側(cè)面反映了軟件系統(tǒng)的內(nèi)容,相互影響、相互制約、有機地結(jié)合在一起,能全面地表達(dá)對目標(biāo)系統(tǒng)的需求。7.1面向?qū)ο蠓治?.1.1面向?qū)ο蠓治鲞^程7.1面向?qū)ο蠓治?.1.2面向?qū)ο蠓治鲈瓌t定義有實際意義的對象最重要的是,一定要把在應(yīng)用領(lǐng)域中有意義的、與所要解決的問題有關(guān)系的所有事物作為對象。既不能遺漏所需的對象,也不能定義與問題無關(guān)的對象。1強調(diào)實體的本質(zhì),忽略無關(guān)的屬性,模型的描述要規(guī)范、準(zhǔn)確例如,對象描述常用現(xiàn)在時態(tài)、陳述性語句,避免模糊的、有二義性的術(shù)語。在定義對象時,還應(yīng)描述對象與其他對象的關(guān)系、背景信息等。27.1面向?qū)ο蠓治?.1.2面向?qū)ο蠓治鲈瓌t定義有實際意7.1面向?qū)ο蠓治?.1.2面向?qū)ο蠓治鲈瓌t在學(xué)校圖書館圖書流通管理系統(tǒng)中,“學(xué)生”對象的屬性可包含學(xué)號、姓名、性別、年齡、借書日期、圖書編號、還書日期等。還可以定義“學(xué)生”類的屬性——所屬的“班級”。新生入學(xué)時,在讀者數(shù)據(jù)庫中,以班級為單位輸入新生的信息;當(dāng)這個班級的學(xué)生畢業(yè)時,可以從讀者庫中刪除該班的所有學(xué)生。但是這個系統(tǒng)中,沒有必要把學(xué)生的學(xué)習(xí)成績、家庭情況等作為屬性。在學(xué)生學(xué)籍管理系統(tǒng)中,班級有班主任,各門課程有對應(yīng)的任課教師、學(xué)分、學(xué)時等。班級有一定數(shù)量的學(xué)生,如果某位學(xué)生留級,就應(yīng)安排到后一年進(jìn)校、相同專業(yè)的班級中去等。某班的學(xué)生畢業(yè)了,該班就不存在了,但仍可作為學(xué)生檔案中的信息備查。

對于規(guī)則二:強調(diào)實體的本質(zhì),忽略無關(guān)的屬性,模型的描述要規(guī)范、準(zhǔn)確。舉例如下:7.1面向?qū)ο蠓治?.1.2面向?qū)ο蠓治鲈瓌t在學(xué)校圖書館7.1面向?qū)ο蠓治?.1.2面向?qū)ο蠓治鲈瓌t共享性面向?qū)ο蠹夹g(shù)的共享有不同級別。例如,在同一類中共享屬性和服務(wù),子類繼承父類的屬性和服務(wù);在同一應(yīng)用中共享類及其繼承性;通過類庫實現(xiàn)在不同應(yīng)用中的共享等。同一類的對象有相同的屬性和服務(wù)。對不能抽象為某一類的對象實例,要明確地排斥。3封裝性所有軟件構(gòu)件都有明確的范圍及清楚的外部邊界。每個軟件構(gòu)件的內(nèi)部實現(xiàn)和界面接口分離。47.1面向?qū)ο蠓治?.1.2面向?qū)ο蠓治鲈瓌t共享性3封裝7.1面向?qū)ο蠓治?.1.2面向?qū)ο蠓治鲈瓌t例如,學(xué)生進(jìn)校后,學(xué)校要把學(xué)生分為若干班級,“班級”是一種對象類,“班級”通常有編號。同一年進(jìn)校,學(xué)習(xí)相同的專業(yè),同時學(xué)習(xí)各門課程,一起參加各項活動的學(xué)生,有相同的班長、相同的班主任,班上學(xué)生按一定的順序編排學(xué)號等。同一年進(jìn)校,不同專業(yè)的學(xué)生不在同一班級。同一專業(yè),不是同一年份進(jìn)校的學(xué)生不在同一班級。有時一個專業(yè),同一屆學(xué)生人數(shù)較多,可分為幾個班級,這時不同班級的編號不相同。例如,2015年入學(xué)的計算機系(代號01)計算機應(yīng)用專業(yè)(代號02)的1班,用1501021作為班級號;2015年入學(xué)的計算機應(yīng)用專業(yè)2班,用1501022作為班級號。

對于規(guī)則三:共享性。舉例如下:7.1面向?qū)ο蠓治?.1.2面向?qū)ο蠓治鲈瓌t例如,學(xué)生進(jìn)7.1面向?qū)ο蠓治?.1.3建立對象模型對象模型是面向?qū)ο蠓治鰰r所建立的3個模型中最關(guān)鍵的一個,它表示靜態(tài)的、結(jié)構(gòu)化的系統(tǒng)的“數(shù)據(jù)”性質(zhì)。對象模型是對客觀世界實體中對象及其相互之間關(guān)系的映射,描述了系統(tǒng)的靜態(tài)結(jié)構(gòu)。建立對象模型時,首先要確定對象、類,然后分析對象的類及其相互關(guān)系。對象類與對象之間的關(guān)系可分為一般-特殊(繼承或歸納)關(guān)系、聚集(組合)關(guān)系及關(guān)聯(lián)關(guān)系。對象模型用類符號、類實例符號、類的繼承關(guān)系、聚集關(guān)系和關(guān)聯(lián)關(guān)系等表示。有些對象具有主動服務(wù)功能,稱為主動對象。當(dāng)系統(tǒng)較復(fù)雜時,可以劃分主題,畫出主題圖,以利于對問題的理解。7.1面向?qū)ο蠓治?.1.3建立對象模型對象模型是面向?qū)?.1面向?qū)ο蠓治?.1.3建立對象模型1搜集必要的資料

代碼是信息處理系統(tǒng)中使用的數(shù)字、文字等符號,用來代替自然語言,具有識別、分類和排序3項基本功能。代碼設(shè)計應(yīng)當(dāng)遵循標(biāo)準(zhǔn)化、唯一性、可擴充性、簡單性、規(guī)范化和適應(yīng)性等原則。2訪問用戶并做好詳細(xì)記錄

代碼是信息處理系統(tǒng)中使用的數(shù)字、文字等符號,用來代替自然語言,具有識別、分類和排序3項基本功能。代碼設(shè)計應(yīng)當(dāng)遵循標(biāo)準(zhǔn)化、唯一性、可擴充性、簡單性、規(guī)范化和適應(yīng)性等原則。3確定系統(tǒng)邊界

代碼是信息處理系統(tǒng)中使用的數(shù)字、文字等符號,用來代替自然語言,具有識別、分類和排序3項基本功能。代碼設(shè)計應(yīng)當(dāng)遵循標(biāo)準(zhǔn)化、唯一性、可擴充性、簡單性、規(guī)范化和適應(yīng)性等原則。

需求分析調(diào)研

要將所研究的問題轉(zhuǎn)化為對象模型,首先要對所研究的現(xiàn)實問題有充分的理解,這就需要進(jìn)行周密的調(diào)查研究。建議進(jìn)行以下工作。7.1面向?qū)ο蠓治?.1.3建立對象模型1搜集必要的資料7.1面向?qū)ο蠓治?.1.3建立對象模型1發(fā)現(xiàn)和定義系統(tǒng)中對象和類的屬性及服務(wù)

在調(diào)研中記錄下來的名稱可能是對象的名稱,也可能是對象屬性的名稱,有時還會有同義詞。要刪除同義詞,確定對象和屬性,并進(jìn)一步確定對象屬于系統(tǒng)之內(nèi)還是系統(tǒng)之外,在滿足系統(tǒng)功能的前提下,使系統(tǒng)中的信息量或數(shù)據(jù)量最少。在定義對象和類的屬性時,要分析是否有相似的、已開發(fā)的面向?qū)ο竽P?,盡可能復(fù)用同類對象的屬性定義。在建立對象模型時,只能初步確定對象和類的服務(wù),在建立對象的動態(tài)模型和功能模型后,才能確切地定義對象的服務(wù)。2訪問用戶并做好詳細(xì)記錄

定義系統(tǒng)中對象之間的關(guān)系。定義對象之間的一般-特殊(繼承或歸納)關(guān)系、聚集(組合或整體-部分)關(guān)系、關(guān)聯(lián)關(guān)系、消息傳遞、鏈接等。3確定系統(tǒng)邊界

確定系統(tǒng)的主題并畫出主題圖。

建立系統(tǒng)的對象模型在面向?qū)ο蠓治鲋校脤ο竽P兔枋鱿到y(tǒng)的組成及各組成部分之間的關(guān)系。通常按以下步驟建立對象模型。7.1面向?qū)ο蠓治?.1.3建立對象模型1發(fā)現(xiàn)和定義系統(tǒng)7.1面向?qū)ο蠓治?.1.3建立對象模型關(guān)系說明文檔概要說明文檔對象說明文檔系統(tǒng)說明文檔關(guān)系說明文檔

詳細(xì)說明對象之間關(guān)系的條件、繼承的內(nèi)容、消息傳遞的內(nèi)容等。關(guān)系說明文檔和對象說明文檔有時可合并在一起。對象說明文檔詳細(xì)描述信息模型中每個對象的名稱、屬性、屬性的值域、屬性的作用,服務(wù)、服務(wù)所需的請求,狀態(tài)及其轉(zhuǎn)換等。

概要說明文檔

以簡短的形式將對象的區(qū)域、表格、屬性及關(guān)系等綜合在一起作說明,供系統(tǒng)設(shè)計員參考。

建立系統(tǒng)說明文檔

系統(tǒng)說明文檔用以補充對象模型,更完善有效地描述問題,主要包括以下幾種。7.1面向?qū)ο蠓治?.1.3建立對象模型關(guān)系說明文檔概要7.1面向?qū)ο蠓治?.1.3建立對象模型

對象標(biāo)識也就是對象的名字,有“外部標(biāo)識”和“內(nèi)部標(biāo)識”之分。前者供對象的定義者或使用者用,后者供系統(tǒng)內(nèi)部用作唯一識別對象。對象標(biāo)識應(yīng)符合以下條件:在一定的范圍或領(lǐng)域中是唯一的;與對象實例的特征、狀態(tài)及分類無關(guān);在對象存在期間保持一致。對象標(biāo)識

屬性是用來描述對象的靜態(tài)特征的數(shù)據(jù)項。例如,在學(xué)生成績管理系統(tǒng)中,可定義“學(xué)生”對象,其屬性有學(xué)號、姓名、性別、系、專業(yè)等。學(xué)生學(xué)習(xí)的各門課程的考試成績及總評分也是“學(xué)生”對象的屬性。屬性

服務(wù)(方法)是用來描述對象的動態(tài)特征(行為)的一系列操作。例如,在圖書流通管理系統(tǒng)中,每個“讀者”的服務(wù)可以有“借書”、“還書”等。服務(wù)

對象對象是系統(tǒng)中用來描述客觀事物的一個實體,是構(gòu)成系統(tǒng)的一個基本單位,由一組屬性和對這組屬性進(jìn)行操作的一組服務(wù)構(gòu)成。7.1面向?qū)ο蠓治?.1.3建立對象模型對7.1面向?qū)ο蠓治?.1.3建立對象模型類的圖形符號是一個矩形框,由兩條橫線把矩形分為3部分,上面是類的名稱,中間是類的屬性,下面列出類提供的服務(wù)(方法),如圖7-1所示。讀者類的屬性有姓名、性別等,讀者類的服務(wù)有借書、還書等。一個對象是符合類定義的一個實體,又稱類的一個實例。

類是具有相同屬性和服務(wù)的一組對象的集合。類為屬于它的全部對象提供了統(tǒng)一的抽象描述(屬性和服務(wù))。7.1面向?qū)ο蠓治?.1.3建立對象模型類的圖形符號是一7.1面向?qū)ο蠓治?.1.3建立對象模型類與類之間的關(guān)系,可分為一般-特殊(繼承或歸納)關(guān)系、聚集(組合)關(guān)系、關(guān)聯(lián)關(guān)系等。有些對象具有主動服務(wù)功能,稱為主動對象。在分析類的相互關(guān)系時,首先要借鑒以往同類問題的分析結(jié)果,發(fā)現(xiàn)可重用的軟件成分。7.1面向?qū)ο蠓治?.1.3建立對象模型類與類之間的關(guān)系7.1面向?qū)ο蠓治鲆话?特殊關(guān)系7.1.3建立對象模型

類與若干互不相容的子類之間的關(guān)系,稱為一般-特殊關(guān)系,或稱泛化關(guān)系、繼承關(guān)系、歸納關(guān)系等。事物往往既有共同性,又有特殊性。同樣,一般類中有時也有特殊類,定義如下:

如果類B具有類A的全部屬性和全部服務(wù),而且具有自己的特性或服務(wù),則B叫做A的特殊類,A叫做B的一般化類。

類的一般-特殊關(guān)系的圖形符號,如圖7-2所示。圖的上部是一個一般化類,下面是若干互不相容的子類。它們之間用三角形和直線連接,三角形的頂點指向一般化類,底部引出的直線連接特殊類。圖7-2類的一般-特殊關(guān)系7.1面向?qū)ο蠓治鲆话?特殊關(guān)系7.1.3建立對象模7.1面向?qū)ο蠓治?.1.3建立對象模型特殊類的對象擁有其一般類的全部屬性和服務(wù),稱為特殊類對一般類的繼承。繼承就是“自動地?fù)碛小保蚨厥忸惒槐刂匦露x一般類中已定義過的屬性和服務(wù),只需要聲明它是某個類的特殊類。特殊類要定義它自己特有的屬性和服務(wù)。特殊類中可能還存在下一層的特殊類。7.1面向?qū)ο蠓治?.1.3建立對象模型特殊類的對象擁有7.1面向?qū)ο蠓治?.1.3建立對象模型繼承具有傳遞性。例如,一個特殊類B既擁有從它的一般類A中繼承下來的屬性和服務(wù),又有自己新定義的屬性和服務(wù)。當(dāng)這個特殊類B又被它更下層的特殊類C繼承時,類B從類A繼承來的和類B自己定義的屬性及服務(wù)會被它的特殊類C繼承下去。因而,類C擁有類A的屬性和服務(wù),同時擁有類B的屬性和服務(wù),還有類C特殊的屬性和服務(wù)。7.1面向?qū)ο蠓治?.1.3建立對象模型繼承具有傳遞性。7.1面向?qū)ο蠓治?.1.3建立對象模型類的繼承關(guān)系圖7-3例如,學(xué)生就是一般化類,下面分為兩個互不相容的子類本科生和研究生。本科生有不同的專業(yè),研究生有不同的研究方向。學(xué)生類的屬性可以有學(xué)號、姓名、性別、年齡等。本科生的屬性可以有專業(yè)等,研究生的屬性可以有研究方向等,如圖7-3(a)所示。在職研究生既繼承了研究生的屬性和服務(wù),同時又繼承了職工的屬性和服務(wù),稱為多繼承,如圖7-3(b)所示。在職研究生既具有學(xué)號、姓名、性別、研究方向等研究生的屬性和服務(wù),又具有職工類的屬性如工號、所屬部門等,還可以有其本身的屬性和服務(wù)。

在研究系統(tǒng)數(shù)據(jù)結(jié)構(gòu)時,單繼承關(guān)系的類形成的結(jié)構(gòu)是樹型結(jié)構(gòu);多繼承關(guān)系的類形成的結(jié)構(gòu)是網(wǎng)絡(luò)結(jié)構(gòu)。7.1面向?qū)ο蠓治?.1.3建立對象模型類的繼承關(guān)系圖7.1面向?qū)ο蠓治?.1.3建立對象模型類的繼承關(guān)系圖7-3

在研究系統(tǒng)數(shù)據(jù)結(jié)構(gòu)時,單繼承關(guān)系的類形成的結(jié)構(gòu)是樹型結(jié)構(gòu);多繼承關(guān)系的類形成的結(jié)構(gòu)是網(wǎng)絡(luò)結(jié)構(gòu)。

(a)(b)圖7-3類的繼承關(guān)系7.1面向?qū)ο蠓治?.1.3建立對象模型類的繼承關(guān)系圖7.1面向?qū)ο蠓治鼍奂P(guān)系7.1.3建立對象模型

聚集關(guān)系就是“整體-部分”關(guān)系,也稱組合關(guān)系,它反映了對象之間的構(gòu)成關(guān)系。聚集關(guān)系也稱組合為關(guān)系。聚集關(guān)系最重要的性質(zhì)是傳遞性。當(dāng)聚集關(guān)系有多個層次時,可以用一棵簡單的聚集樹來表示。

圖7-4是表示類的聚集關(guān)系的圖形符號,左部是一個整體類,右部是組成整體類的部分類,相互之間用菱形框和直線連接。菱形的頂點指向整體對象,菱形的另一端畫出的線連到部分對象。連線端點可以標(biāo)出數(shù)值(或值的范圍),表示該端對象的數(shù)量,當(dāng)值為1時可以缺省。圖7-2類的一般-特殊關(guān)系7.1面向?qū)ο蠓治鼍奂P(guān)系7.1.3建立對象模型7.1面向?qū)ο蠓治?.1.3建立對象模型整體-部分關(guān)系圖7-5例如,一輛汽車由4或6個輪子和1個車廂組成。汽車一端數(shù)量是1,可以不標(biāo)出數(shù)量;輪子一端可以標(biāo)出數(shù)量4,6;車廂一端的數(shù)量是1,可以不標(biāo)出數(shù)量,如圖7-5所示。又如,一本教材由封面、前言、目錄及若干章組成,每章由若干節(jié)和習(xí)題組成,如圖7-6所示。圖7-6教材結(jié)構(gòu)的聚集關(guān)系圖7-5整體-部分關(guān)系表示法7.1面向?qū)ο蠓治?.1.3建立對象模型整體-部分關(guān)系圖7.1面向?qū)ο蠓治鲫P(guān)聯(lián)關(guān)系7.1.3建立對象模型

類的關(guān)聯(lián)關(guān)系反映了對象之間相互依賴、相互作用的關(guān)系。通常把兩個對象類之間的二元關(guān)系再細(xì)分為一對一(1∶1)、一對多(1∶M)和多對多(M∶N)3種基本類型。類型的劃分依據(jù)參與關(guān)聯(lián)的對象的數(shù)目。用連線表示兩個對象類之間的關(guān)聯(lián)關(guān)系。例如,學(xué)生學(xué)習(xí)課程,學(xué)生與課程之間存在關(guān)聯(lián)關(guān)系,如圖7-7(a)所示的類的關(guān)聯(lián)關(guān)系。

圖7-4是表示類的聚集關(guān)系的圖形符號,左部是一個整體類,右部是組成整體類的部分類,相互之間用菱形框和直線連接。菱形的頂點指向整體對象,菱形的另一端畫出的線連到部分對象。連線端點可以標(biāo)出數(shù)值(或值的范圍),表示該端對象的數(shù)量,當(dāng)值為1時可以缺省。7.1面向?qū)ο蠓治鲫P(guān)聯(lián)關(guān)系7.1.3建立對象模型7.1面向?qū)ο蠓治?.1.3建立對象模型類的關(guān)聯(lián)關(guān)系反映了對象之間相互依賴、相互作用的關(guān)系。通常把兩個對象類之間的二元關(guān)系再細(xì)分為一對一(1∶1)、一對多(1∶M)和多對多(M∶N)3種基本類型。類型的劃分依據(jù)參與關(guān)聯(lián)的對象的數(shù)目。用連線表示兩個對象類之間的關(guān)聯(lián)關(guān)系。例如,學(xué)生學(xué)習(xí)課程,學(xué)生與課程之間存在關(guān)聯(lián)關(guān)系,如圖7-7(a)所示的類的關(guān)聯(lián)關(guān)系。圖7-7(a)關(guān)聯(lián)關(guān)系和鏈屬性7.1面向?qū)ο蠓治?.1.3建立對象模型圖7-7(a)7.1面向?qū)ο蠓治?.1.3建立對象模型(1)階。階就是參與關(guān)聯(lián)的對象的個數(shù)。階數(shù)用標(biāo)在連線端點的單個數(shù)字或數(shù)值區(qū)間表示。如圖7-7(b)所示,用m,n表示學(xué)生與課程之間是多對多的關(guān)聯(lián)關(guān)系。(2)鏈屬性。鏈屬性就是關(guān)聯(lián)鏈的性質(zhì)。例如,m位學(xué)生和所學(xué)的n門課程之間存在的關(guān)聯(lián)就存在鏈屬性“成績”和“學(xué)分”。每個學(xué)生所學(xué)的每門課程都有學(xué)習(xí)成績和學(xué)分,關(guān)聯(lián)的鏈屬性如圖7-7(b)所示,鏈屬性與關(guān)聯(lián)之間用虛線連接。圖7-7(b)關(guān)聯(lián)關(guān)系和鏈屬性7.1面向?qū)ο蠓治?.1.3建立對象模型圖7-7(b)7.1面向?qū)ο蠓治?.1.3建立對象模型(3)限定。限定用來對關(guān)聯(lián)的含義做某種約束,利用限定詞通常能有效地減少關(guān)聯(lián)的階數(shù)。例如,在某計算機的一個目錄下有很多文件,一個文件僅屬于一個目錄,在一個目錄下文件名可確定唯一的文件。圖7-8利用限定詞“文件名”,把目錄和文件的一對多關(guān)系,簡化為一對一的關(guān)系。圖7-8限定的關(guān)聯(lián)關(guān)系7.1面向?qū)ο蠓治?.1.3建立對象模型圖7-8限定7.1面向?qū)ο蠓治霭咐處熤笇?dǎo)學(xué)生畢業(yè)設(shè)計,多對多關(guān)聯(lián)的分解。例7-1m位教師指導(dǎo)n名學(xué)生進(jìn)行畢業(yè)設(shè)計,其中,每位教師指導(dǎo)若干名學(xué)生,每位學(xué)生由一位教師指導(dǎo)。教師給學(xué)生出畢業(yè)設(shè)計題目,每位學(xué)生做一個畢業(yè)設(shè)計題目,設(shè)計結(jié)束時給每位學(xué)生評定成績。這是多對多的關(guān)聯(lián),可用圖7-9(a)表示。關(guān)聯(lián)的鏈屬性是畢業(yè)設(shè)計題目和成績。本例也可將“畢業(yè)設(shè)計”定義為一個對象類。每位教師指導(dǎo)多個畢業(yè)設(shè)計課題,每個學(xué)生完成一個畢業(yè)設(shè)計課題。教師類與畢業(yè)設(shè)計類變?yōu)橄鄬唵蔚囊粚Χ啵?∶k)的關(guān)聯(lián)關(guān)系。畢業(yè)設(shè)計與學(xué)生是一對一(1∶1)的關(guān)聯(lián),因而可表示為圖7-9(b)。這樣,雖然多定義一個對象類,但卻避免了復(fù)雜的多對多的關(guān)聯(lián)。7.1面向?qū)ο蠓治霭咐處熤笇?dǎo)學(xué)生畢業(yè)設(shè)計,多對多關(guān)聯(lián)的分7.1面向?qū)ο蠓治霭咐處熤笇?dǎo)學(xué)生畢業(yè)設(shè)計,多對多關(guān)聯(lián)的分解。例7-1

(a)(b)圖7-9教師與學(xué)生的關(guān)聯(lián)關(guān)系7.1面向?qū)ο蠓治霭咐處熤笇?dǎo)學(xué)生畢業(yè)設(shè)計,多對多關(guān)聯(lián)的分7.1面向?qū)ο蠓治?.1.3建立對象模型01

主動對象的概念、作用和意義近些年逐漸受到重視。按照通常理解,對象的每個服務(wù)是在消息的驅(qū)動下執(zhí)行的操作。所有這樣的對象都是被動對象。03

主動對象的定義是:主動對象是一組屬性和一組服務(wù)的封裝體,其中至少有一個服務(wù)不需要接收消息就能主動執(zhí)行(稱為主動服務(wù))。02

在現(xiàn)實世界中,具有主動行為的事物并不罕見,如交通控制系統(tǒng)中的信號燈,軍隊中向全軍發(fā)號施令的司令部和發(fā)現(xiàn)情況要及時報告的哨兵等。04

主動對象或主動服務(wù)可以用名稱前加“@”來表示。在UML中,主動對象用加粗的邊框表示,如圖7-10(a)所示,收款員就是主動對象。主動對象:7.1面向?qū)ο蠓治?.1.3建立對象模型017.1面向?qū)ο蠓治?.1.3建立對象模型

除了含有主動服務(wù)外,主動對象中也可以有一些在消息的驅(qū)動下執(zhí)行的一般服務(wù)。

主動對象的作用是描述問題域中具有主動行為的事物,以及在系統(tǒng)設(shè)計時識別的任務(wù),它的主動服務(wù)描述相應(yīng)的任務(wù)所完成的操作。它在系統(tǒng)實現(xiàn)階段應(yīng)成為一個能并發(fā)執(zhí)行的、主動的程序單位,如進(jìn)程或線程。

例如,在商品銷售管理系統(tǒng)中,收款員就是一個主動對象,他的主動服務(wù)是登錄、銷售等,如圖7-10(a)所示。商場銷售的上級領(lǐng)導(dǎo)也是主動對象,他可以對商場各部門發(fā)送消息,進(jìn)行各種管理。7.1面向?qū)ο蠓治?.1.3建立對象模型7.1面向?qū)ο蠓治?.1.3建立對象模型人類在認(rèn)識復(fù)雜事物時,往往從宏觀到微觀分層次地進(jìn)行;當(dāng)考慮各部分的細(xì)節(jié)時,圍繞一個主題進(jìn)行微觀的思考。在開發(fā)一個軟件系統(tǒng)時,通常會有較大數(shù)量的類。面對幾十個類,以及類之間錯綜復(fù)雜的關(guān)系,會使人難以理解、無從下手??蓪⑺械念悇澐譃橐粋€個主題,分別研究每個主題中的對象的關(guān)系及其內(nèi)部的屬性和服務(wù),使得復(fù)雜問題分解為一個個較為簡單的問題,容易理解,易于解決問題。7.1面向?qū)ο蠓治?.1.3建立對象模型人類在認(rèn)識復(fù)雜事7.1面向?qū)ο蠓治?.1.3建立對象模型(3)主題的劃分有一定的靈活性。強調(diào)的重點不同可以得到不同的主題劃分。(2)一個主題內(nèi)部的對象具有某種意義上的內(nèi)在聯(lián)系。(1)主題是由一組類構(gòu)成的集合,但其本身不是一個類。

主題是把一組具有較強聯(lián)系的類組織在一起而得到的類的集合,它有以下幾個特點:劃分主題:7.1面向?qū)ο蠓治?.1.3建立對象模型(3)主題的劃分7.1面向?qū)ο蠓治?.1.3建立對象模型自底向上:先建立對象類,然后把對象類中關(guān)系較密切的類組織為一個主題。如果主題數(shù)量仍太多,則再進(jìn)一步把聯(lián)系較強的小主題組織為大主題,直到系統(tǒng)中最上層主題數(shù)不超過7個。這種方式適合于小型系統(tǒng)或中型系統(tǒng)。1

自頂向下:先分析系統(tǒng),確定幾個大的主題,每個主題相當(dāng)于一個子系統(tǒng)。按這些子系統(tǒng)分別進(jìn)行面向?qū)ο蠓治?,建立各個子系統(tǒng)中的對象類。最后再將子系統(tǒng)合并為大的系統(tǒng)。2主題的劃分有兩種方式:7.1面向?qū)ο蠓治?.1.3建立對象模型自底向上:先建立7.1面向?qū)ο蠓治?.1.3建立對象模型01把關(guān)系較密切的對象畫在一個框內(nèi),框的每個角處標(biāo)上主題號,框內(nèi)是詳細(xì)的對象類圖,標(biāo)出每個類的屬性和服務(wù)以及類之間的詳細(xì)關(guān)系,就可得到展開方式的主題圖。03

每個框內(nèi)將主題號、主題名及該主題中所含的類全部列出,就是半展開主題圖。02如果將每個主題號及主題名分別寫在一個框內(nèi),就可得到壓縮方式的主題圖。

面向?qū)ο蠓治鰰r,可將問題域中的類圖劃分成若干個主題。主題的劃分最終結(jié)果都是:一個完整的對象類圖和一個主題圖。主題圖有以下三種表達(dá)方式:7.1面向?qū)ο蠓治?.1.3建立對象模型017.1面向?qū)ο蠓治霭咐嫵錾唐蜂N售管理系統(tǒng)的主題圖。例7-2商品銷售管理系統(tǒng)是商場管理的一個子系統(tǒng),要求有以下功能:為每種商品編號,記錄商品的名稱、單價、數(shù)量、庫存的下限等;收款員接班后要登錄、售貨,為顧客選購的商品輸入購物清單、商品計價、收費,并打印清單及應(yīng)收款;交班時結(jié)賬、交款。系統(tǒng)幫助供貨員發(fā)現(xiàn)哪些商品的數(shù)量到達(dá)庫存量的下限、即將脫銷,需要進(jìn)行缺貨登記、及時供貨;統(tǒng)計商場商品的銷售量、進(jìn)貨量及庫存量,結(jié)算資金賬冊以向上級報告;上級可以發(fā)送消息,要求查賬、報賬、增刪商品種類或變更商品價格等。(1)通過分析可建立如下對象:收款員、銷售事件、賬冊、商品目錄、商品、供貨員、上級系統(tǒng)接口等,并將它們的屬性和服務(wù)標(biāo)注在圖中。這些對象之間的所有關(guān)系也在圖中標(biāo)出,可得一個完整的類圖。7.1面向?qū)ο蠓治霭咐嫵錾唐蜂N售管理系統(tǒng)的主題圖。例77.1面向?qū)ο蠓治霭咐嫵錾唐蜂N售管理系統(tǒng)的主題圖。例7-2(2)分析該系統(tǒng)中對象之間的關(guān)系:收款員、銷售事件、賬冊之間關(guān)系比較密切;商品、商品目錄之間關(guān)系比較密切;供貨員與銷售之間沒有直接關(guān)系,供貨情況要報賬,要與上級系統(tǒng)接口通信。把關(guān)系較密切的對象畫在一個框內(nèi),框的每個角處標(biāo)上主題號,就可得到展開方式的主題圖,如圖7-10(a)所示。如果將每個主題號及主題名分別寫在一個框內(nèi),就可得到壓縮方式的主題圖,如圖7-10(b)所示。將主題號、主題名及該主題中所含的類全部列出,就是半展開主題圖,如圖7-10(c)所示。7.1面向?qū)ο蠓治霭咐嫵錾唐蜂N售管理系統(tǒng)的主題圖。例77.1面向?qū)ο蠓治霭咐嫵錾唐蜂N售管理系統(tǒng)的主題圖。例7-2(b)壓縮方式(c)半展開方式(a)展開方式7.1面向?qū)ο蠓治霭咐嫵錾唐蜂N售管理系統(tǒng)的主題圖。例77.1面向?qū)ο蠓治?.1.4建立動態(tài)模型對象模型建立后,需要考察對象和關(guān)系的動態(tài)變化情況。面向?qū)ο蠓治龃_定的對象和關(guān)系都具有生存周期。生存周期由許多階段組成,每個階段都有一系列的運行規(guī)律和規(guī)則,用來調(diào)節(jié)和管理對象的行為。對象和關(guān)系的生存周期用動態(tài)模型來描述。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型對象模型建立后,7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型狀態(tài)即對象在其生存周期中的某個特定階段所具有的行為模式。狀態(tài)是對影響對象行為的屬性值的一種抽象,它規(guī)定了對象對輸入事件的響應(yīng)方式。對象對輸入事件的響應(yīng),既可以執(zhí)行一個或一系列的動作,也可僅僅改變對象本身的狀態(tài)。1事件即引起對象狀態(tài)轉(zhuǎn)換的控制信息。事件是某個特定時刻所發(fā)生的事情,是引起對象從一種狀態(tài)轉(zhuǎn)換到另一種狀態(tài)的事情抽象。事件沒有持續(xù)時間,是瞬間完成的。2服務(wù)也稱行為,是對象在某種狀態(tài)下所發(fā)生的一系列處理操作。行為是需要消耗時間的。3

動態(tài)模型描述對象和關(guān)系的狀態(tài)、狀態(tài)轉(zhuǎn)換的觸發(fā)事件、對象的服務(wù)(行為)。動態(tài)模型的基本內(nèi)容017.1面向?qū)ο蠓治?.1.4建立動態(tài)模型狀態(tài)1事件2服務(wù)7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型例如,分析對象“班級”的狀態(tài)。某個“班級”的學(xué)生學(xué)習(xí)一年后,有的升級,有的留級,班級人數(shù)會有變動,“學(xué)年”對班級的狀態(tài)有控制作用,是“事件”。班級當(dāng)前處于第幾學(xué)年,就是“狀態(tài)”。學(xué)習(xí)期滿時,這個班級的絕大多數(shù)學(xué)生畢業(yè),班級就不再存在,即使有學(xué)生留級,也應(yīng)安排到另一個班級去了。每學(xué)期一個班級的學(xué)習(xí)課程、任課教師、課程表都有變化,因此“學(xué)期”也是事件。班級處于第幾學(xué)年、第幾學(xué)期是“狀態(tài)”。每學(xué)期每個學(xué)生的各門課的成績統(tǒng)計、計算成績總分、班上的學(xué)生按成績排名次等一系列處理,是“行為”。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型例如,分析對象“7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型建立動態(tài)模型首先要編寫腳本,從腳本中提取事件,然后畫出UML圖的順序圖(也稱事件跟蹤圖),最后畫出對象的狀態(tài)轉(zhuǎn)換圖。在面向?qū)ο蠓治鲭A段,要快速建立用戶界面原型,供用戶試用、評價。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型建立動態(tài)模型首先7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型編寫腳本02在建立動態(tài)模型過程中,腳本是系統(tǒng)執(zhí)行某個功能的一系列事件。腳本通常起始于一個系統(tǒng)外部的輸入事件,結(jié)束于一個系統(tǒng)外部的輸出事件,它可以包括這個期間發(fā)生的所有的系統(tǒng)內(nèi)部事件。編寫腳本,可以從尋找事件開始,確定各對象的可能事件的順序。事件包括所有用戶的交互信息、與外部設(shè)備的交互信息等。使用腳本可以發(fā)現(xiàn)正常事件,但不要遺漏條件和異常事件。編寫腳本的目的是確定事件、保證不遺漏系統(tǒng)功能中重要的交互步驟,有助于確保整個交互過程的正確性和清晰性。此時,暫不考慮算法的問題。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型編寫腳本02在建7.1面向?qū)ο蠓治霭咐帉懘螂娫?、通話過程的腳本。例7-3打電話、通話過程的一系列事件如下:打電話者拿起電話受話器;電話撥號音開始;打電話者撥一個數(shù)字;電話撥號音結(jié)束;打電話者撥其他數(shù)字……打電話者撥最后一個數(shù)字;如果電話號碼撥錯,交換機提示出錯信息;如果號碼正確,且對方空閑,則接電話者的電話開始振鈴;7.1面向?qū)ο蠓治霭咐帉懘螂娫?、通話過程的腳本。例7-7.1面向?qū)ο蠓治霭咐帉懘螂娫挕⑼ㄔ掃^程的腳本。例7-3打電話、通話過程的一系列事件如下:鈴聲在打電話者的電話上傳出;如果在30秒內(nèi),接電話者拿起話筒;接電話者的電話停止振鈴;打電話者的電話停止振鈴;通電話……接電話者掛斷電話;電話切斷;打電話者掛斷電話;如果撥號正確,對方忙,打電話者的電話上傳出忙音;如果撥號正確,接電話者在30秒內(nèi)不接聽電話,雙方電話停止振鈴。7.1面向?qū)ο蠓治霭咐帉懘螂娫挕⑼ㄔ掃^程的腳本。例7-7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型設(shè)計用戶界面03大多數(shù)交互行為都可以分為應(yīng)用邏輯和用戶界面兩部分。通常,系統(tǒng)分析員首先集中精力考慮系統(tǒng)的信息流和控制流,而不是首先考慮用戶界面。動態(tài)模型著重表示應(yīng)用系統(tǒng)的控制邏輯。但是,用戶界面的美觀、方便、易學(xué)及效率,是用戶使用系統(tǒng)時首先感受到的。用戶界面的好壞往往對用戶是否喜歡、接受一個系統(tǒng)起很重要的作用。在分析階段不能忽略用戶界面的設(shè)計,應(yīng)該快速建立用戶界面原型,供用戶試用與評價。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型設(shè)計用戶界面037.1面向?qū)ο蠓治?.1.4建立動態(tài)模型畫UML順序圖或活動圖04在UML順序圖(也稱事件跟蹤圖)中,有兩個方向:一條豎線代表應(yīng)用領(lǐng)域中的一個對象,時間從上向下遞增;對象之間的每個交互事件用一條水平的箭頭線表示,箭頭方向從事件的發(fā)送對象指向接受對象。例如,要畫例7-3中打電話、通話過程的順序圖。通過對該過程進(jìn)行分析可知,共有3個對象:打電話者、交換機和接電話者;再將事件從發(fā)送對象指向接受對象,順序圖如圖6-17所示。電話號碼撥錯、對方未及時接聽電話等情況在順序圖中不能描述,要想詳細(xì)描述這些情況,可以用活動圖來描述,如圖6-18所示。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型畫UML順序圖或7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型畫出招聘考試管理系統(tǒng)的順序圖。例7-4某市人事局舉行統(tǒng)一招聘考試。首先由人事局公布招聘專業(yè)及相應(yīng)的考試科目,各招聘單位向人事局登記本單位各專業(yè)的招聘計劃(人數(shù)),由人事局向社會公布招聘情況;考生報名、填志愿;人事局組織安排考試;錄入考試成績;向考生和招聘單位公布成績;招聘單位根據(jù)考生成績進(jìn)行錄用;發(fā)錄用通知書給考生。這里,共有3個對象:考生、人事局和招聘單位。下面畫出招聘考試管理系統(tǒng)的順序圖,如圖7-11所示。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型畫出招聘考試管理7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型圖7-11招聘考試管理系統(tǒng)的順序圖7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型圖7-11招7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型畫狀態(tài)轉(zhuǎn)換圖05當(dāng)對象的屬性值不同時,對象的行為規(guī)則會有所不同,我們稱對象處于不同的狀態(tài)。由于對象在不同狀態(tài)下呈現(xiàn)不同的行為方式,所以應(yīng)分析對象的狀態(tài),才可正確地認(rèn)識對象的行為并定義它的服務(wù)。例如,通信系統(tǒng)中的傳真機對象,就有設(shè)備關(guān)閉、忙、故障(如缺紙或卡紙)、就緒(開啟并空閑)等狀態(tài)。我們可以專門定義一個“狀態(tài)”屬性。該屬性有以上介紹的幾種屬性值,每一個屬性值就是一種狀態(tài)。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型畫狀態(tài)轉(zhuǎn)換圖057.1面向?qū)ο蠓治?.1.4建立動態(tài)模型畫狀態(tài)轉(zhuǎn)換圖05面向?qū)ο蠓椒ㄖ械臓顟B(tài)轉(zhuǎn)換圖,與傳統(tǒng)方法中數(shù)據(jù)對象的狀態(tài)轉(zhuǎn)換圖表示方法相同,見第2.3.3節(jié)。有了狀態(tài)轉(zhuǎn)換圖,就可“執(zhí)行”狀態(tài)轉(zhuǎn)換圖,以便檢驗狀態(tài)轉(zhuǎn)換的正確性和協(xié)調(diào)一致性。執(zhí)行方法是從任意一個狀態(tài)開始,當(dāng)出現(xiàn)一個事件時,引起狀態(tài)轉(zhuǎn)換,到達(dá)另一狀態(tài),在狀態(tài)入口處執(zhí)行相關(guān)的行為,在另一事件出現(xiàn)之前,這個狀態(tài)應(yīng)該不發(fā)生變化。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型畫狀態(tài)轉(zhuǎn)換圖057.1面向?qū)ο蠓治?.1.4建立動態(tài)模型分別畫出旅館管理系統(tǒng)中旅客和床位的狀態(tài)轉(zhuǎn)換圖。例7-5在旅館管理系統(tǒng)中,旅客登記以后要為其安排房間和床位,不同規(guī)格的房間住宿費單價不同。旅客住宿若干天以后,結(jié)賬、退房。此時才可將床位分配給新來的旅客。床位有“空”和“住人”兩種狀態(tài)。只有當(dāng)床位處于“空”狀態(tài)時,才可安排旅客住宿,隨后床位的狀態(tài)變?yōu)椤白∪恕?。旅客離開后,他所住的床位又變?yōu)椤翱铡睜顟B(tài)。旅客在該系統(tǒng)中有3種狀態(tài):旅客登記、住宿和注銷。從“旅客登記”到“住宿”,是由事件“登記旅客情況”和“分配床位”的發(fā)生引起的。從“住宿”狀態(tài)到“注銷”狀態(tài),是由事件“結(jié)賬”和“退房”引起的。旅客的狀態(tài)轉(zhuǎn)換圖,如圖所示。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型分別畫出旅館管理7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型分別畫出旅館管理系統(tǒng)中旅客和床位的狀態(tài)轉(zhuǎn)換圖。例7-5床位在系統(tǒng)中有兩種狀態(tài):“空”和“住人”?!翱铡钡拇参豢梢苑峙浣o旅客住宿,“住人”的床位不可以安排給旅客住宿。行為“分配床位”引起床位從狀態(tài)“空”變?yōu)椤白∪恕?。行為“旅客退房”引起床位從狀態(tài)“住人”變?yōu)椤翱铡薄4参坏臓顟B(tài)轉(zhuǎn)換圖,如圖所示。7.1面向?qū)ο蠓治?.1.4建立動態(tài)模型分別畫出旅館管理7.1面向?qū)ο蠓治?.1.5建立功能模型

功能模型用來說明如何處理數(shù)據(jù)、數(shù)據(jù)之間有何依賴關(guān)系,并表明系統(tǒng)的有關(guān)功能。數(shù)據(jù)流圖有助于表示以上關(guān)系。功能模型由一組數(shù)據(jù)流圖組成。在面向?qū)ο蠓治龇椒ㄖ?,為動態(tài)模型的每個狀態(tài)畫數(shù)據(jù)流圖,可以清楚地說明與狀態(tài)有關(guān)的處理過程。在建立系統(tǒng)對象模型和動態(tài)模型的基礎(chǔ)上,分析其處理過程,可將數(shù)據(jù)和處理結(jié)合在一起而不是分離開來。這就是面向?qū)ο蠓治龅莫毺刂?。?shù)據(jù)流圖中的處理對應(yīng)于狀態(tài)圖中的活動或動作,數(shù)據(jù)流對應(yīng)于對象圖中的對象或?qū)傩浴?/p>

7.1面向?qū)ο蠓治?.1.5建立功能模型7.1面向?qū)ο蠓治?.1.5建立功能模型確定輸入值和輸出值數(shù)據(jù)流圖中的輸入值、輸出值是系統(tǒng)與外部之間進(jìn)行交互的事件的參數(shù)。建立功能模型時,應(yīng)當(dāng)確定輸入/輸出數(shù)據(jù)的方式、格式、范圍、約束條件、操作規(guī)范等。

功能模型可用多張數(shù)據(jù)流圖、程序流程圖等來表示。數(shù)據(jù)流或處理流程:用帶箭頭的直線表示。處理:用圓角方框或橢圓表示。數(shù)據(jù)存儲:用兩條平行線或兩端被同方向的圓弧封口的平行線表示。數(shù)據(jù)源或數(shù)據(jù)終點用方框表示。在面向?qū)ο蠓椒ㄖ?,?shù)據(jù)源往往是主動對象,它通過生成或使用數(shù)據(jù)來驅(qū)動數(shù)據(jù)流。數(shù)據(jù)終點接收數(shù)據(jù)的輸出流。數(shù)據(jù)流圖中的數(shù)據(jù)存儲是被動對象,本身不產(chǎn)生任何操作,只響應(yīng)存儲和訪問數(shù)據(jù)的要求。輸入箭頭表示增加、更改或刪除所存儲的數(shù)據(jù),輸出箭頭表示從數(shù)據(jù)存儲中查找信息。畫數(shù)據(jù)流圖建立功能模型的步驟為:確定輸入值和輸出值,畫數(shù)據(jù)流圖,定義服務(wù)。7.1面向?qū)ο蠓治?.1.5建立功能模型確定輸入值和輸出7.1面向?qū)ο蠓治?.1.5建立功能模型在建立對象模型時,確定了類、屬性、關(guān)聯(lián)、結(jié)構(gòu),還沒有完全確定類的操作(服務(wù))。在建立動態(tài)模型和功能模型后,類的服務(wù)(操作)才能最后確定。類的服務(wù)(操作)與對象模型中的屬性和關(guān)聯(lián)的查詢有關(guān),與動態(tài)模型中的事件有關(guān),與功能模型的處理有關(guān)。通過分析,把這些操作添加到對象模型中去。定義服務(wù)7.1面向?qū)ο蠓治?.1.5建立功能模型在建立對象模型時7.1面向?qū)ο蠓治?.1.5建立功能模型對象模型中的服務(wù)

來自對象模型的操作(服務(wù))有讀、寫屬性值。來自處理的服務(wù)

數(shù)據(jù)流圖中的各個處理對應(yīng)對象的操作,應(yīng)該添加到對象模型的服務(wù)中去。來自狀態(tài)動作和活動的服務(wù)

狀態(tài)圖中的活動和動作可能是操作,應(yīng)該定義成對象模型的服務(wù)(操作)。來自事件的服務(wù)

事件是某個特定時刻所發(fā)生的事情,是引起對象從一種狀態(tài)轉(zhuǎn)換到另一種狀態(tài)的事情的抽象。事件可以看成是信息從一個對象到另一個對象的單向傳送,發(fā)送信息的對象可能會等待對方的答復(fù),而對方可以回答也可以不回答事件。這些狀態(tài)的轉(zhuǎn)換、對象的回答等,所對應(yīng)的就是操作。因而事件對應(yīng)于各個操作,并且同時可啟動新的操作。

類的服務(wù)(操作)有以下幾種:7.1面向?qū)ο蠓治?.1.5建立功能模型對象模型中的服務(wù)7.1面向?qū)ο蠓治?.1.5建立功能模型如前所述,通過面向?qū)ο蠓治鰬?yīng)得到的模型包含對象模型、動態(tài)模型和功能模型。對象模型為動態(tài)模型和功能模型提供基礎(chǔ),動態(tài)模型描述了對象實例的生存周期或運行周期。行為的發(fā)生引起狀態(tài)轉(zhuǎn)換,行為對應(yīng)于數(shù)據(jù)流圖上的處理,對象是數(shù)據(jù)流圖中的存儲或數(shù)據(jù)流,處理通常是狀態(tài)模型中的事件。面向?qū)ο蟮姆治鼍褪怯脤ο竽P?、動態(tài)模型、功能模型描述對象及其相互關(guān)系。7.1面向?qū)ο蠓治?.1.5建立功能模型如前所述,通過面7.1面向?qū)ο蠓治?.1.5建立功能模型

軟件開發(fā)過程是一個多次反復(fù)修改、逐步完善的過程,面向?qū)ο蠓椒ū仁褂媒Y(jié)構(gòu)化分析和設(shè)計技術(shù)更容易實現(xiàn)反復(fù)修改及逐步完善的過程。必須把用戶需求與實現(xiàn)策略區(qū)分開來,但分析和設(shè)計之間不存在絕對的界限。必須與用戶和領(lǐng)域?qū)<颐芮袇f(xié)作配合、共同提煉和整理用戶需求。最終的模型要得到用戶和領(lǐng)域?qū)<业拇_認(rèn)。很可能需要建立起原型系統(tǒng),以便與用戶更有效地進(jìn)行交流。有時可用增加冗余的關(guān)聯(lián)以提高訪問效率,或調(diào)整查詢次序,或保留派生的屬性等方法來優(yōu)化設(shè)計。究竟如何設(shè)計才算是優(yōu)化,要取得用戶和系統(tǒng)應(yīng)用領(lǐng)域?qū)<业恼J(rèn)可。7.1面向?qū)ο蠓治?.1.5建立功能模型02軟件架構(gòu)設(shè)計和對象設(shè)計軟件架構(gòu)設(shè)計軟件架構(gòu)風(fēng)格移動互聯(lián)系統(tǒng)的軟件架構(gòu)對象設(shè)計面向?qū)ο笤O(shè)計的準(zhǔn)則和啟發(fā)式規(guī)則02軟件架構(gòu)設(shè)計和對象設(shè)計軟件架構(gòu)設(shè)計軟件架構(gòu)風(fēng)格移動互聯(lián)系637.2軟件架構(gòu)設(shè)計和對象設(shè)計

“軟件架構(gòu)”(SoftwareArchitecture)這個概念早在20世紀(jì)60年代就由著名的荷蘭科學(xué)家EdsgerWybe.Dijkstra(1930~2002)提出,這位著名科學(xué)家提出了“數(shù)據(jù)結(jié)構(gòu)”課程中的計算最短路徑的Dijkstra算法,以及“操作系統(tǒng)”課程中的銀行家算法,對計算機技術(shù)的發(fā)展作出了重要貢獻(xiàn)。不過“軟件架構(gòu)”這個概念直到20世紀(jì)90年代隨著軟件工程技術(shù)的發(fā)展才漸漸為人所知。軟件架構(gòu)又稱軟件體系結(jié)構(gòu),它的形成同時借鑒了計算機體系結(jié)構(gòu)和網(wǎng)絡(luò)體系結(jié)構(gòu)中很多寶貴的思想和方法。軟件架構(gòu)研究的主要內(nèi)容涉及軟件架構(gòu)的核心模型、軟件架構(gòu)風(fēng)格、軟件架構(gòu)評價等。解決好軟件的重用、質(zhì)量和維護(hù)問題,是研究軟件架構(gòu)的根本目的。軟件架構(gòu)為軟件系統(tǒng)提供了一個結(jié)構(gòu)、行為和屬性的高級抽象,由構(gòu)成系統(tǒng)的元素的描述、這些元素的相互作用、指導(dǎo)元素集成的模式以及這些模式的約束組成。軟件架構(gòu)不僅指定了系統(tǒng)的組織結(jié)構(gòu)和拓?fù)浣Y(jié)構(gòu),并且顯示了系統(tǒng)需求和構(gòu)成系統(tǒng)的元素之間的對應(yīng)關(guān)系,提供了一些設(shè)計決策的基本原理。7.2軟件架構(gòu)設(shè)計和對象設(shè)計

“軟件架構(gòu)”(Softwar7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計軟件架構(gòu)是指在一定的設(shè)計原則基礎(chǔ)上,從不同角度對組成系統(tǒng)的各部分進(jìn)行搭配和安排,形成系統(tǒng)的多個結(jié)構(gòu)而組成架構(gòu)。軟件架構(gòu)描述的對象是直接構(gòu)成系統(tǒng)的組件,各個組件之間的連接則明確和相對細(xì)致地描述組件之間的通訊。在實現(xiàn)階段,這些組件被細(xì)化為實際的組件,比如具體某個類或者對象。在面向?qū)ο箢I(lǐng)域中,組件之間的連接通常用接口來實現(xiàn)。下面介紹軟件架構(gòu)的核心模型和軟件架構(gòu)設(shè)計的目標(biāo)。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計軟件架7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計1構(gòu)件

構(gòu)件是具有某種功能的可重用的軟件單元,表示了系統(tǒng)主要的計算元素和數(shù)據(jù)存儲。軟件構(gòu)件有原子構(gòu)件和復(fù)合構(gòu)件兩種。原子構(gòu)件是不可再分的構(gòu)件,底層由實現(xiàn)該構(gòu)件的類組成,這種構(gòu)件的劃分提供了軟件架構(gòu)的分層表示能力,有助于簡化軟件架構(gòu)的設(shè)計。復(fù)合構(gòu)件由原子構(gòu)件和其他復(fù)合構(gòu)件連接而成。2連接件

連接件表示了構(gòu)件之間的交互,簡單的連接件如管道(Pipe)、過程調(diào)用(Procedure)、事件廣播(EventBroadcast)等,復(fù)雜的交互如客戶機/服務(wù)器(Client/Server)通信協(xié)議、數(shù)據(jù)庫和應(yīng)用之間的SQL連接等。3配置

配置表示了構(gòu)件和連接件的拓?fù)溥壿嫼图s束。軟件架構(gòu)的核心模型017.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計1構(gòu)件7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計4端口

構(gòu)件是一個封裝的實體,只能通過其接口與外部環(huán)境交互。構(gòu)件的接口由一組端口組成,每個端口表示了構(gòu)件和外部環(huán)境的交互點。通過不同的端口類型,一個構(gòu)件可以提供多重接口。一個端口可以非常簡單,如過程調(diào)用,也可以表示更為復(fù)雜的界面(包含一些約束),如必須以某種順序調(diào)用的一組過程調(diào)用。5角色

連接件作為建模軟件架構(gòu)的主要實體,同樣也有接口。連接件的接口由一組角色組成,每個角色定義了該連接件表示的交互的參與者。二元連接有兩個角色,例如遠(yuǎn)程過程調(diào)用(RemoteProcedureCall,RPC)的角色為caller和callee。有的連接件有多于兩個的角色,如事件廣播有一個事件發(fā)布角色和任意多個事件接收角色。軟件架構(gòu)的核心模型017.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計4端口7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計1可靠性(Reliable)

軟件系統(tǒng)對于用戶的商業(yè)經(jīng)營和管理來說極為重要,因此軟件系統(tǒng)必須非??煽俊?安全性(Security)

軟件系統(tǒng)所承擔(dān)的交易的商業(yè)價值極高,系統(tǒng)的安全性非常重要。3可伸縮性(Scalable)

軟件必須能夠在用戶的使用率、用戶的數(shù)目增加很快的情況下,保持合理的性能。只有這樣,才能適應(yīng)用戶市場擴展的需要。4可定制化(Customizable)

同樣的一套軟件,可以根據(jù)客戶群的不同和市場需求的變化進(jìn)行調(diào)整。軟件架構(gòu)設(shè)計的目標(biāo)027.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計1可靠7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計5可擴展性(Extensible)

在新技術(shù)出現(xiàn)的時候,一個軟件系統(tǒng)應(yīng)當(dāng)允許導(dǎo)入新技術(shù),從而對現(xiàn)有系統(tǒng)進(jìn)行功能和性能的擴展。6可維護(hù)性(Maintainable)

軟件系統(tǒng)的維護(hù)包括兩方面,一是排除現(xiàn)有的錯誤,二是將新的軟件需求反映到現(xiàn)有系統(tǒng)中去。一個易于維護(hù)的系統(tǒng)可以有效地降低技術(shù)支持的花費。7客戶體驗(CustomerExperience)

軟件系統(tǒng)必須易于使用,方便上手。8市場時機(TimetoMarket)

軟件用戶要面臨同業(yè)競爭,軟件提供商也要面臨同業(yè)競爭,以最快的速度爭奪市場先機非常重要。軟件架構(gòu)設(shè)計的目標(biāo)027.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計5可擴7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計由于軟件架構(gòu)和建筑物的結(jié)構(gòu)類似,因此在建造一旦系統(tǒng)開始進(jìn)行詳細(xì)設(shè)計甚至建造,這些決定就很難更改甚至無法更改。顯然,這樣的決定必定是有關(guān)系統(tǒng)設(shè)計成敗的最重要決定,必須經(jīng)過非常慎重的研究和考察。一個軟件架構(gòu)師需要有廣泛的軟件理論知識和相應(yīng)的經(jīng)驗,來實施和管理軟件產(chǎn)品的高級設(shè)計。軟件架構(gòu)師要定義和設(shè)計軟件的模塊化、模塊之間的交互、用戶界面風(fēng)格、對外接口方法、創(chuàng)新的設(shè)計特性以及高層事物的對象操作、邏輯和流程。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.1軟件架構(gòu)設(shè)計由于軟7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格正如西方建筑擁有哥特式教堂、巴洛克式風(fēng)格等,而北京故宮擁有東方漢式宮殿建筑風(fēng)格一樣,軟件系統(tǒng)也有自己不同的架構(gòu)風(fēng)格。軟件架構(gòu)風(fēng)格是描述某一特定應(yīng)用領(lǐng)域中系統(tǒng)組織方式的慣用模式。軟件架構(gòu)風(fēng)格反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語義特性,并指導(dǎo)如何將各個模塊和子系統(tǒng)有效地組織成一個完整的系統(tǒng)。對軟件架構(gòu)風(fēng)格的研究和實踐,可以促進(jìn)對設(shè)計的重用,一些經(jīng)過實踐證實的解決方案也可以可靠地用于解決新的問題。例如,如果有人把系統(tǒng)描述為“客戶機/服務(wù)器”(Client/Server)模式,那么他不必給出設(shè)計細(xì)節(jié),我們立刻會明白系統(tǒng)是如何組織和工作的。目前比較公認(rèn)的典型軟件架構(gòu)風(fēng)格有以下幾類:數(shù)據(jù)流風(fēng)格、調(diào)用/返回風(fēng)格、獨立構(gòu)件風(fēng)格、虛擬機風(fēng)格和倉庫風(fēng)格等。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格正如西7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格批處理序列批處理風(fēng)格的每一步處理都是獨立的,并且每一步是順序執(zhí)行的,只有當(dāng)前一步處理完,后一步處理才能開始,數(shù)據(jù)傳送在步與步之間作為一個整體。其實批處理序列風(fēng)格普遍用于在程序開發(fā)中順序執(zhí)行指令。

每個構(gòu)件都有一組輸入和輸出,構(gòu)件讀輸入的數(shù)據(jù)流,經(jīng)過內(nèi)部處理,然后產(chǎn)生輸出數(shù)據(jù)流。這個過程通常通過對輸入流的變換及增量計算來完成,包括通過計算和增加信息豐富數(shù)據(jù),通過濃縮和刪除精煉數(shù)據(jù),通過改變記錄方式轉(zhuǎn)化數(shù)據(jù),遞增地轉(zhuǎn)化數(shù)據(jù)等。在輸入被完全消費之前,輸出便產(chǎn)生了。這里的構(gòu)件被稱為過濾器,這種風(fēng)格的連接件就像是數(shù)據(jù)流傳輸?shù)墓艿溃瑢⒁粋€過濾器的輸出傳到另一個過濾器的輸入。應(yīng)用實例是UNIX系統(tǒng)下的Shell編程。管道/過濾器數(shù)據(jù)流風(fēng)格7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格批處理7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格在結(jié)構(gòu)化編程中常用主程序調(diào)用子程序,而面向?qū)ο缶幊淌乾F(xiàn)在程序設(shè)計比較流行的方式,這兩種風(fēng)格在學(xué)習(xí)程序設(shè)計時很常用,而且現(xiàn)在很難找到一個程序只包含有一種架構(gòu)風(fēng)格,基本上都是混合風(fēng)格。1層次系統(tǒng)組織成一個層次結(jié)構(gòu)。這種風(fēng)格的特點是每層為上一層提供服務(wù),使用下一層的服務(wù),且只能見到與自己鄰接的層。大的問題分解為若干漸進(jìn)的小問題,逐步解決,隱藏了很多復(fù)雜度。修改一層,最多影響兩層,而通常只能影響上層。上層必須知道下層的身份,不能調(diào)整層次之間的順序。2主程序/子程序風(fēng)格和面向?qū)ο箫L(fēng)格層次結(jié)構(gòu)風(fēng)格調(diào)用/返回風(fēng)格7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格在結(jié)構(gòu)7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格進(jìn)程通信架構(gòu)風(fēng)格的構(gòu)件是獨立的過程,連接件是消息傳遞。這種風(fēng)格的特點是構(gòu)件通常是命名過程,消息傳遞的方式可以是點到點、異步和同步方式,以及遠(yuǎn)程過程調(diào)用等。1事件系統(tǒng)就是事件驅(qū)動架構(gòu)風(fēng)格。在學(xué)習(xí)面向?qū)ο缶幊虝r,設(shè)計用戶界面一般都是事件驅(qū)動。構(gòu)件不直接調(diào)用一個過程,而是觸發(fā)或廣播一個或多個事件。系統(tǒng)中其他構(gòu)件中的過程在一個或多個事件中注冊,當(dāng)一個事件被觸發(fā),系統(tǒng)就會自動調(diào)用在這個事件中注冊的所有過程。由此,一個事件的觸發(fā)就導(dǎo)致了另一個模塊中過程的調(diào)用。2進(jìn)程通信事件系統(tǒng)獨立構(gòu)件風(fēng)格7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格進(jìn)程通7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格解釋器一個解釋器通常包括完成解釋工作的解釋引擎,一個包含將被解釋的代碼的存儲區(qū),一個記錄解釋引擎當(dāng)前工作狀態(tài)的數(shù)據(jù)結(jié)構(gòu),以及一個記錄源代碼被解釋執(zhí)行的進(jìn)度的數(shù)據(jù)結(jié)構(gòu)。具有解釋器風(fēng)格的軟件中含有一個虛擬機,可以仿真硬件的執(zhí)行過程和一些關(guān)鍵應(yīng)用,比如Java虛擬機。1基于規(guī)則的系統(tǒng)基于規(guī)則的系統(tǒng)包括規(guī)則集、規(guī)則解釋器、規(guī)則/數(shù)據(jù)選擇器及工作內(nèi)存。2虛擬機風(fēng)格7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格解釋器7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格

倉庫風(fēng)格即以數(shù)據(jù)為中心的系統(tǒng)風(fēng)格,例如數(shù)據(jù)庫系統(tǒng)、超文本系統(tǒng)、黑板系統(tǒng)。

由于“數(shù)據(jù)庫原理”課程專門介紹數(shù)據(jù)庫系統(tǒng),而早期的靜態(tài)網(wǎng)頁是比較典型的超文本系統(tǒng)。因此以下著重介紹黑板系統(tǒng)。

如果中央數(shù)據(jù)結(jié)構(gòu)的當(dāng)前狀態(tài)觸發(fā)進(jìn)程執(zhí)行的選擇,則倉庫是一黑板系統(tǒng)。黑板架構(gòu)包括知識源、黑板數(shù)據(jù)結(jié)構(gòu)和控制3個部分。

黑板通常應(yīng)用在對于解決問題沒有確定性算法要求的系統(tǒng)中,例如信號處理、語音和模式識別、問題規(guī)劃及編譯器優(yōu)化等軟件系統(tǒng)的設(shè)計中,像人工智能、信號處理、電子商務(wù)等依靠數(shù)據(jù)庫的專家系統(tǒng)。倉庫風(fēng)格7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格1知識源

知識源包括若干獨立計算的不同單元,提供解決問題的知識,知識源之間不直接進(jìn)行通信,知識源響應(yīng)黑板上的變化,也只修改黑板。2黑板數(shù)據(jù)結(jié)構(gòu)

黑板數(shù)據(jù)是按照與應(yīng)用程序相關(guān)的層次來組織的解決問題的數(shù)據(jù),知識源通過不斷地改變黑板數(shù)據(jù)來解決問題。黑板是知識源互相作用的唯一媒介。3控制

控制完全由黑板的狀態(tài)驅(qū)動,黑板狀態(tài)的變化決定所使用的特定知識。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格1知識7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格表7-1常見軟件架構(gòu)分類表分類典型風(fēng)格通訊類(Communication)面向服務(wù)架構(gòu)(Service-OrientedArchitecture,SOA);消息總線(MessageBus)部署類(Deployment)客戶機/服務(wù)器(Client/Server,C/S);P2P(PeertoPeer);網(wǎng)格計算(GridComputing);云計算(CloudComputing)領(lǐng)域類(Domain-Specific)面向搜索架構(gòu);Web2.0交互類(Interaction)模型-視圖-控制器(Model-Viewer-Controller,MVC)結(jié)構(gòu)類(Structure)插件(Plugin);無共享架構(gòu)(ShareNothingArchitecture)

此外,還有一些常見的軟件架構(gòu)風(fēng)格,見表7-1。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格表7-7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格客戶機/服務(wù)器軟件架構(gòu)是20世紀(jì)90年代成熟起來的技術(shù),它將應(yīng)用一分為二,服務(wù)器(后臺)負(fù)責(zé)數(shù)據(jù)管理,客戶機(前臺)完成與用戶的交互任務(wù)。但是傳統(tǒng)的二層C/S結(jié)構(gòu)存在一些局限:①二層C/S結(jié)構(gòu)是單一服務(wù)器且以局域網(wǎng)為中心,所以難以擴展至大型企業(yè)廣域網(wǎng)或Internet;②客戶機的負(fù)荷太重,且難以管理大量的客戶機;③系統(tǒng)的性能容易變壞,數(shù)據(jù)安全性不好。由此,三層C/S結(jié)構(gòu)應(yīng)運而生??蛻魴C/服務(wù)器(C/S)風(fēng)格二層客戶機/服務(wù)器風(fēng)格7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格客戶機7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格用戶1……用戶nInternetIntranet數(shù)據(jù)庫服務(wù)器1數(shù)據(jù)庫服務(wù)器2應(yīng)用服務(wù)器用戶2客戶機/服務(wù)器(C/S)風(fēng)格三層客戶機/服務(wù)器風(fēng)格三層C/S結(jié)構(gòu)增加了應(yīng)用服務(wù)器面向客戶的應(yīng)用要求,從而避免了客戶直接訪問數(shù)據(jù)庫,保障了數(shù)據(jù)的安全性。三層C/S結(jié)構(gòu)示意圖,如圖7-13所示。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格用戶17.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格輸入數(shù)據(jù)表示層業(yè)務(wù)處理程序業(yè)務(wù)處理請求和業(yè)務(wù)處理所需的全部輸入數(shù)據(jù)全部處理結(jié)束數(shù)據(jù)存儲層數(shù)據(jù)存取程序數(shù)據(jù)登錄/更新/讀取的請求數(shù)據(jù)登錄/更新/讀取的結(jié)果應(yīng)用邏輯層(功能層)請求按鈕輸出數(shù)據(jù)業(yè)務(wù)處理開始數(shù)據(jù)存取請求業(yè)務(wù)處理結(jié)束業(yè)務(wù)處理開始數(shù)據(jù)存取請求業(yè)務(wù)處理結(jié)束SQL請求開始DBMS執(zhí)行SQLSQL請求結(jié)束客戶機/服務(wù)器(C/S)風(fēng)格三層客戶機/服務(wù)器風(fēng)格在三層C/S結(jié)構(gòu)中,將系統(tǒng)分成表示層、應(yīng)用邏輯層(功能層)和數(shù)據(jù)存儲層3個部分,如圖7-14所示。其中,表示層是系統(tǒng)的用戶接口部分,它擔(dān)負(fù)著用戶與系統(tǒng)之間的對話功能;應(yīng)用邏輯層相當(dāng)于應(yīng)用的本體,它是將具體的業(yè)務(wù)處理邏輯編入程序中;數(shù)據(jù)存儲層就是數(shù)據(jù)庫管理系統(tǒng),負(fù)責(zé)管理對數(shù)據(jù)庫數(shù)據(jù)的讀寫。數(shù)據(jù)庫管理系統(tǒng)必須能迅速執(zhí)行大量數(shù)據(jù)的更新和檢索。因此,一般從功能層傳送到數(shù)據(jù)層的要求大都使用SQL語言。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格輸入數(shù)7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格三層C/S結(jié)構(gòu)的優(yōu)點①允許合理地劃分三層結(jié)構(gòu)的功能,使之在邏輯上保持相對獨立性,能提高系統(tǒng)和軟件的可維護(hù)性和可擴展性;②允許更靈活有效地選用相應(yīng)的平臺和硬件系統(tǒng),使之在處理負(fù)荷能力和處理特性上分別適應(yīng)于結(jié)構(gòu)清晰的三層,并且這些平臺和各個組成部分可以具有良好的可升級性和開放性;③應(yīng)用的各層可以并行開發(fā),可以選擇各自最適合的開發(fā)語言;④利用功能層有效地隔離開表示層與數(shù)據(jù)存儲層,未授權(quán)的用戶難以繞過功能層而利用數(shù)據(jù)庫工具或黑客手段去非法訪問數(shù)據(jù)存儲層,為嚴(yán)格的安全管理奠定了堅實的基礎(chǔ)。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格三層C7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格數(shù)據(jù)庫服務(wù)器數(shù)據(jù)庫客戶端瀏覽器客戶端瀏覽器Web服務(wù)器客戶機/服務(wù)器(C/S)風(fēng)格瀏覽器/服務(wù)器風(fēng)格瀏覽器/服務(wù)器(Browser/Server,B/S)風(fēng)格就是上述三層應(yīng)用結(jié)構(gòu)的一種實現(xiàn)方式,其具體結(jié)構(gòu)為:瀏覽器/Web服務(wù)器/數(shù)據(jù)庫服務(wù)器,如圖7-15所示。B/S架構(gòu)主要是利用不斷成熟的WWW瀏覽器技術(shù),結(jié)合瀏覽器的多種腳本語言,用通用瀏覽器來實現(xiàn)原來需要復(fù)雜的專用軟件才能實現(xiàn)的強大功能,并節(jié)約了開發(fā)成本。從某種程度上來說,B/S結(jié)構(gòu)是一種全新的軟件體系架構(gòu)。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格數(shù)據(jù)庫7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格B/S架構(gòu)的優(yōu)點①基于B/S架構(gòu)的軟件,系統(tǒng)安裝、修改和維護(hù)全在服務(wù)器端解決;②用戶在使用系統(tǒng)時,僅需要一個瀏覽器就可運行全部的模塊,真正實現(xiàn)了“零客戶端”的功能,很容易在運行時自動升級;

③B/S架構(gòu)還提供了異種機、異種網(wǎng)、異種應(yīng)用服務(wù)的聯(lián)機、聯(lián)網(wǎng)、統(tǒng)一服務(wù)的最現(xiàn)實的開放性基礎(chǔ)。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格B/S7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格B/S架構(gòu)的缺點①B/S架構(gòu)缺乏對動態(tài)頁面的支持能力,沒有集成有效的數(shù)據(jù)庫處理功能;②B/S架構(gòu)的系統(tǒng)擴展能力差,安全性難以控制;③采用B/S架構(gòu)的應(yīng)用系統(tǒng),在數(shù)據(jù)查詢等響應(yīng)速度上,要遠(yuǎn)遠(yuǎn)低于C/S架構(gòu);④B/S架構(gòu)的數(shù)據(jù)提交一般以頁面為單位,數(shù)據(jù)的動態(tài)交互性不強,不利于在線事務(wù)處理應(yīng)用。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格B/S7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格因此,在實踐應(yīng)用中,我們更多地根據(jù)具體所開發(fā)的軟件系統(tǒng)需求,綜合地考慮采用適合的軟件架構(gòu)。C/S架構(gòu)與B/S架構(gòu)還將長期共存,而B/S與C/S混合軟件架構(gòu)就是一種典型的異構(gòu)架構(gòu)。以MaryShaw和DavidGarlan為代表的學(xué)者們總結(jié)出的軟件架構(gòu)風(fēng)格在軟件工程中常被用到,隨著軟件工程技術(shù)的發(fā)展,新的架構(gòu)風(fēng)格也在不斷地涌現(xiàn)。例如,面向Agent的軟件架構(gòu)、正交架構(gòu)等等。選擇和設(shè)計一種軟件架構(gòu),將來開發(fā)出的軟件系統(tǒng)就具有它特別的結(jié)構(gòu)風(fēng)格,正如每座建筑散發(fā)出獨特的光芒一樣。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.2軟件架構(gòu)風(fēng)格因此,7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件架構(gòu)

移動互聯(lián)系統(tǒng)是指將互聯(lián)網(wǎng)的技術(shù)、平臺、商業(yè)模式及應(yīng)用與移動通信技術(shù)結(jié)合并實踐的活動的總稱,它包括移動終端、移動網(wǎng)絡(luò)和應(yīng)用服務(wù)3個要素。移動終端(或者叫移動通信終端)是指可以在移動中使用的計算機設(shè)備,廣義上包括手機、筆記本電腦、平板電腦、POS機甚至車載電腦等設(shè)備,但是大部分情況下是指具有多種應(yīng)用功能的智能手機和平板電腦。移動網(wǎng)絡(luò)現(xiàn)在常用WiFi和4G網(wǎng)絡(luò),應(yīng)用服務(wù)則非常多,在智能手機上用戶自己下載使用的應(yīng)用程序(Application,APP)都是為用戶提供服務(wù)的第三方軟件。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件架構(gòu)移動互聯(lián)系統(tǒng)軟件以大家常用的智能手機為例,在手機上安裝的主流操作系統(tǒng)有:蘋果系統(tǒng)版本iOS(使用Objective-C開發(fā)語言),安卓Android(開發(fā)語言Java),微軟WindowsPhone(開發(fā)語言C#)等。由于移動互聯(lián)系統(tǒng)所開發(fā)的軟件都將應(yīng)用在移動互聯(lián)網(wǎng)上,因此與有線互聯(lián)系統(tǒng)相比,在設(shè)計軟件架構(gòu)時,需要考慮一些特別的因素:并發(fā)性、流量、安全、速度優(yōu)化、兼容性、與有線互聯(lián)網(wǎng)統(tǒng)一、統(tǒng)計分析、測試環(huán)境模擬、用戶真實訪問速度的監(jiān)控、需求變更頻繁等。7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件架構(gòu)并發(fā)性相對于有線互聯(lián)系統(tǒng),移動互聯(lián)系統(tǒng)的網(wǎng)速還處于窄帶時期,大部分的網(wǎng)絡(luò)訪問都屬于慢速連接。一個請求占用的網(wǎng)絡(luò)連接的時間比有線互聯(lián)網(wǎng)一個請求占用的網(wǎng)絡(luò)連接的時間要長。在同等的服務(wù)器條件下,并發(fā)連接數(shù)比有線互聯(lián)網(wǎng)模式的要高。雖然Web服務(wù)器的并發(fā)連接數(shù)問題非常容易通過增加機器來進(jìn)行擴展,但是這個問題應(yīng)當(dāng)引起注意。1流量相對于有線互聯(lián)網(wǎng)的包月付費模式,移動互聯(lián)網(wǎng)用戶基本都是有限的按流量的包月模式,流量費用昂貴。用戶會首選耗用流量低的系統(tǒng)使用,這正是UC瀏覽器成功的原因。所以在設(shè)計軟件系統(tǒng)架構(gòu)的時候,如果客戶端瀏覽器支持gzip壓縮工具,那么盡量用gzip壓縮內(nèi)容。如果是APP的客戶端程序,最好使用壓縮傳輸內(nèi)容。Web網(wǎng)頁內(nèi)容盡量簡潔,統(tǒng)一資源定位符(UniformResourceLocator,URL)連接盡量壓縮。27.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件架構(gòu)安全有線互聯(lián)網(wǎng)的在線支付目前已非常成熟,在支付的時候可以跳轉(zhuǎn)到銀行的網(wǎng)站或者客戶端進(jìn)行支付,讓用戶覺得很安全。而移動互聯(lián)網(wǎng)則通常是服務(wù)端通過應(yīng)用程序接口(ApplicationProgrammingInterface,API)進(jìn)行支付,用戶會覺得不安全。因為這樣,某些網(wǎng)站有可能盜用用戶的錢。解決方法是銀行通過短信認(rèn)證,缺點是萬一手機丟失,可能會造成被人惡意支付(遇到此類問題,要及時掛失手機號)。在為移動互聯(lián)軟件設(shè)計系統(tǒng)架構(gòu)時,要整體考慮軟件的安全性。3速度優(yōu)化由于移動網(wǎng)絡(luò)的速度慢,速度優(yōu)化就更加需要得到重視。比如APP與服務(wù)器端的交互是否使用自定義的協(xié)議進(jìn)行提速,網(wǎng)絡(luò)操作失敗如何處理等等。目前的4G網(wǎng)速已大大提高,移動互聯(lián)軟件架構(gòu)需要在網(wǎng)絡(luò)建設(shè)的基礎(chǔ)上優(yōu)化速度。47.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件架構(gòu)兼容性移動互聯(lián)網(wǎng)的終端類型、屏幕分辨率、瀏覽器類型千變?nèi)f化。就算同一個手機的同一個瀏覽器也有適應(yīng)屏幕模式和縮放模式。如此多的種類給軟件頁面的兼容開發(fā)帶來了很大的難度。公司的移動終端測試機器往往多達(dá)幾十種,雖然有廠商提供這種測試服務(wù),但是對于開發(fā)人員來講,難度可不低。而有線互聯(lián)網(wǎng)的網(wǎng)站只需要調(diào)試IE,F(xiàn)irefox,Chrome等幾個瀏覽器即可。5與有線互聯(lián)網(wǎng)統(tǒng)一大部分網(wǎng)站都是以有線互聯(lián)網(wǎng)為主,同時推出移動互聯(lián)網(wǎng)版本的。但是往往移動版本的功能會有所縮減,導(dǎo)致某些功能缺失。所以,從產(chǎn)品的角度看也應(yīng)該把功能進(jìn)行統(tǒng)一。因此,移動互聯(lián)軟件架構(gòu)涉及到有線互聯(lián)網(wǎng)、移動網(wǎng)站、APP客戶端的功能統(tǒng)一。67.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件7.2軟件架構(gòu)設(shè)計和對象設(shè)計7.2.3移動互聯(lián)系統(tǒng)的軟件架構(gòu)統(tǒng)計分析APP客戶端軟件的用戶行為分析統(tǒng)計,可以定期往服務(wù)器發(fā)送??蛻舳讼劝延脩舻牟僮餍袨槭占饋?,進(jìn)行分析后,再把結(jié)果定期壓縮打包,發(fā)送給服務(wù)器。移動網(wǎng)站可以通過服務(wù)器端記錄日志,JS(JavaScript)探針(WAP2.0的智能手機可能支持)等綜合的方式進(jìn)行統(tǒng)計。7測試環(huán)境模擬如果軟件開發(fā)人員開發(fā)出一款A(yù)PP客戶端軟件,在公司測試時非常完美。但是當(dāng)開發(fā)人員在火車上、地鐵上拿出手機使用時,發(fā)現(xiàn)在網(wǎng)絡(luò)不穩(wěn)定的時候,系統(tǒng)頻繁崩潰??梢?,移動互聯(lián)軟件系統(tǒng)需要在真實場景下進(jìn)行模擬測試,這也是所有軟件測試都需要面臨的情況

溫馨提示

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

評論

0/150

提交評論