《軟件工程基礎(chǔ)》全套PPT課件
《軟件工程基礎(chǔ)》全套PPT課件,軟件工程基礎(chǔ),軟件工程,基礎(chǔ),全套,PPT,課件
10.1 軟件過(guò)程框架軟件過(guò)程框架的內(nèi)容軟件過(guò)程框架的內(nèi)容 軟件過(guò)程框架定義了若干框架活動(dòng),為完整的軟軟件過(guò)程框架定義了若干框架活動(dòng),為完整的軟件開(kāi)發(fā)過(guò)程建立了基礎(chǔ)。件開(kāi)發(fā)過(guò)程建立了基礎(chǔ)。過(guò)程框架還全面包括了可用于整個(gè)軟件過(guò)程的活過(guò)程框架還全面包括了可用于整個(gè)軟件過(guò)程的活動(dòng),稱(chēng)為動(dòng),稱(chēng)為“普適性活動(dòng)普適性活動(dòng)(Umbrella ActivitiesUmbrella Activities)”。10.1 軟件過(guò)程框架軟件過(guò)程框架的內(nèi)容軟件過(guò)程框架的內(nèi)容 10.1 軟件過(guò)程框架軟件過(guò)程框架的內(nèi)容軟件過(guò)程框架的內(nèi)容 過(guò)程框架:定義了若干框架活動(dòng),這些活動(dòng)適用于所有軟過(guò)程框架:定義了若干框架活動(dòng),這些活動(dòng)適用于所有軟件項(xiàng)目。件項(xiàng)目。普適性活動(dòng):如軟件質(zhì)量保證,軟件配置管理和測(cè)量,它普適性活動(dòng):如軟件質(zhì)量保證,軟件配置管理和測(cè)量,它們貫穿于整個(gè)過(guò)程模型之中。們貫穿于整個(gè)過(guò)程模型之中。框架活動(dòng):框架中每一個(gè)活動(dòng)都由一組軟件工程動(dòng)作組成,框架活動(dòng):框架中每一個(gè)活動(dòng)都由一組軟件工程動(dòng)作組成,每一個(gè)動(dòng)作又包含一個(gè)任務(wù)集合。每一個(gè)動(dòng)作又包含一個(gè)任務(wù)集合。任務(wù)集合:每一個(gè)集合都由軟件工程工作任務(wù)、項(xiàng)目里程任務(wù)集合:每一個(gè)集合都由軟件工程工作任務(wù)、項(xiàng)目里程碑、軟件工程產(chǎn)品以及質(zhì)量保證點(diǎn)組成,使得框架活動(dòng)適碑、軟件工程產(chǎn)品以及質(zhì)量保證點(diǎn)組成,使得框架活動(dòng)適應(yīng)于不同軟件項(xiàng)目的特征和項(xiàng)目組的需求。應(yīng)于不同軟件項(xiàng)目的特征和項(xiàng)目組的需求。10.1 軟件過(guò)程框架通用過(guò)程框架通用過(guò)程框架通用過(guò)程框架可適用于絕大多數(shù)的軟件項(xiàng)目,該通用過(guò)程框架可適用于絕大多數(shù)的軟件項(xiàng)目,該框架由框架由溝通溝通、策劃策劃、建模建模、構(gòu)造構(gòu)造和和部署部署5 5個(gè)通用框個(gè)通用框架活動(dòng)組成。架活動(dòng)組成。(1)(1)溝通溝通。這項(xiàng)框架活動(dòng)包含系統(tǒng)分析員與客戶(hù)之間大量的。這項(xiàng)框架活動(dòng)包含系統(tǒng)分析員與客戶(hù)之間大量的交流和協(xié)作,還包括需求獲取以及其他相關(guān)活動(dòng)。交流和協(xié)作,還包括需求獲取以及其他相關(guān)活動(dòng)。(2)(2)策劃策劃。策劃活動(dòng)協(xié)助軟件開(kāi)發(fā)團(tuán)隊(duì)定義全局目標(biāo),并為。策劃活動(dòng)協(xié)助軟件開(kāi)發(fā)團(tuán)隊(duì)定義全局目標(biāo),并為后續(xù)的軟件工程工作制定計(jì)劃。策劃活動(dòng)包括一系列管理后續(xù)的軟件工程工作制定計(jì)劃。策劃活動(dòng)包括一系列管理和技術(shù)實(shí)踐,如描述需要執(zhí)行的技術(shù)任務(wù)、可能的風(fēng)險(xiǎn)、和技術(shù)實(shí)踐,如描述需要執(zhí)行的技術(shù)任務(wù)、可能的風(fēng)險(xiǎn)、資源需求、工作產(chǎn)品和工作進(jìn)度計(jì)劃。資源需求、工作產(chǎn)品和工作進(jìn)度計(jì)劃。10.1 軟件過(guò)程框架通用過(guò)程框架通用過(guò)程框架(3)(3)建模建模。建模的目的是為了更好地理解需要構(gòu)建。建模的目的是為了更好地理解需要構(gòu)建的實(shí)體。的實(shí)體。在軟件工程中,要?jiǎng)?chuàng)建兩類(lèi)模型:在軟件工程中,要?jiǎng)?chuàng)建兩類(lèi)模型:分析模型分析模型和和設(shè)設(shè)計(jì)模型計(jì)模型。分析模型通過(guò)描述軟件的信息域、功能域及行為分析模型通過(guò)描述軟件的信息域、功能域及行為域來(lái)表達(dá)客戶(hù)的需求;域來(lái)表達(dá)客戶(hù)的需求;設(shè)計(jì)模型描述軟件架構(gòu)、用戶(hù)界面及構(gòu)件細(xì)節(jié),設(shè)計(jì)模型描述軟件架構(gòu)、用戶(hù)界面及構(gòu)件細(xì)節(jié),從而幫助開(kāi)發(fā)者高效地開(kāi)發(fā)軟件。從而幫助開(kāi)發(fā)者高效地開(kāi)發(fā)軟件。10.1 軟件過(guò)程框架通用過(guò)程框架通用過(guò)程框架(4)(4)構(gòu)造構(gòu)造。構(gòu)造活動(dòng)包括一系列編碼和測(cè)試任務(wù),。構(gòu)造活動(dòng)包括一系列編碼和測(cè)試任務(wù),從而為向客戶(hù)和最終用戶(hù)交付可運(yùn)行軟件做好準(zhǔn)從而為向客戶(hù)和最終用戶(hù)交付可運(yùn)行軟件做好準(zhǔn)備。備。(5)(5)部署部署。部署活動(dòng)是將軟件(全部或者完成的部。部署活動(dòng)是將軟件(全部或者完成的部分)交付給用戶(hù),用戶(hù)對(duì)其進(jìn)行評(píng)測(cè)并給出反饋分)交付給用戶(hù),用戶(hù)對(duì)其進(jìn)行評(píng)測(cè)并給出反饋意見(jiàn)。意見(jiàn)。部署活動(dòng)包括三個(gè)動(dòng)作:交付、支持和反饋。部署活動(dòng)包括三個(gè)動(dòng)作:交付、支持和反饋。10.1 軟件過(guò)程框架典型的普適性活動(dòng)典型的普適性活動(dòng)(1)(1)軟件項(xiàng)目跟蹤和控制軟件項(xiàng)目跟蹤和控制:由項(xiàng)目組根據(jù)計(jì)劃來(lái)評(píng):由項(xiàng)目組根據(jù)計(jì)劃來(lái)評(píng)估項(xiàng)目進(jìn)度,并且采取必要的措施保證項(xiàng)目按進(jìn)估項(xiàng)目進(jìn)度,并且采取必要的措施保證項(xiàng)目按進(jìn)度計(jì)劃進(jìn)行。度計(jì)劃進(jìn)行。(2)(2)風(fēng)險(xiǎn)管理風(fēng)險(xiǎn)管理:評(píng)估可能對(duì)項(xiàng)目成果或者產(chǎn)品質(zhì)量:評(píng)估可能對(duì)項(xiàng)目成果或者產(chǎn)品質(zhì)量產(chǎn)生影響的風(fēng)險(xiǎn)。產(chǎn)生影響的風(fēng)險(xiǎn)。(3)(3)軟件質(zhì)量保證軟件質(zhì)量保證:確定和執(zhí)行用以保證軟件質(zhì)量:確定和執(zhí)行用以保證軟件質(zhì)量的活動(dòng)。的活動(dòng)。(4)(4)正式技術(shù)評(píng)審正式技術(shù)評(píng)審:評(píng)估軟件工程產(chǎn)品,盡量在錯(cuò):評(píng)估軟件工程產(chǎn)品,盡量在錯(cuò)誤傳播到下一個(gè)動(dòng)作或活動(dòng)之前,發(fā)現(xiàn)并清除錯(cuò)誤傳播到下一個(gè)動(dòng)作或活動(dòng)之前,發(fā)現(xiàn)并清除錯(cuò)誤。誤。10.1 軟件過(guò)程框架典型的普適性活動(dòng)典型的普適性活動(dòng)(5)(5)測(cè)量測(cè)量:定義和收集過(guò)程、項(xiàng)目和產(chǎn)品的度量,以:定義和收集過(guò)程、項(xiàng)目和產(chǎn)品的度量,以幫助團(tuán)隊(duì)在發(fā)布軟件的時(shí)候滿(mǎn)足客戶(hù)要求。同幫助團(tuán)隊(duì)在發(fā)布軟件的時(shí)候滿(mǎn)足客戶(hù)要求。同時(shí),測(cè)量還可與其他框架協(xié)同使用。時(shí),測(cè)量還可與其他框架協(xié)同使用。(6)(6)軟件配置管理軟件配置管理:管理整個(gè)軟件過(guò)程中變更所帶來(lái):管理整個(gè)軟件過(guò)程中變更所帶來(lái)的影響。的影響。(7)(7)可復(fù)用管理:定義產(chǎn)品復(fù)用的標(biāo)準(zhǔn)(包括軟件構(gòu)可復(fù)用管理:定義產(chǎn)品復(fù)用的標(biāo)準(zhǔn)(包括軟件構(gòu)件),并且建立構(gòu)件復(fù)用機(jī)制。件),并且建立構(gòu)件復(fù)用機(jī)制。(8)(8)工作產(chǎn)品的準(zhǔn)備和生產(chǎn)工作產(chǎn)品的準(zhǔn)備和生產(chǎn):包括創(chuàng)建產(chǎn)品所必須的:包括創(chuàng)建產(chǎn)品所必須的活動(dòng),如建模、文檔、日志、表格和列表等。活動(dòng),如建模、文檔、日志、表格和列表等。10.2 傳統(tǒng)軟件過(guò)程模型瀑布模型瀑布模型在在2020世紀(jì)世紀(jì)8080年代之前,瀑年代之前,瀑布模型一直是唯一被廣泛布模型一直是唯一被廣泛采用的生命周期模型。采用的生命周期模型。傳統(tǒng)的瀑布模型如圖所示。傳統(tǒng)的瀑布模型如圖所示。10.2 傳統(tǒng)軟件過(guò)程模型瀑布模型的特點(diǎn)瀑布模型的特點(diǎn)階段間具有順序性和依賴(lài)性。其中包含兩重含義:階段間具有順序性和依賴(lài)性。其中包含兩重含義:必須等前一階段的工作完成之后,才能開(kāi)始后一必須等前一階段的工作完成之后,才能開(kāi)始后一階段的工作;階段的工作;前一階段的輸出文檔就是后一階段的輸入文檔。前一階段的輸出文檔就是后一階段的輸入文檔。10.2 傳統(tǒng)軟件過(guò)程模型瀑布模型的特點(diǎn)瀑布模型的特點(diǎn)推遲實(shí)現(xiàn)的觀點(diǎn)推遲實(shí)現(xiàn)的觀點(diǎn) 瀑布模型在編碼之前設(shè)置了系統(tǒng)分析和系統(tǒng)設(shè)計(jì)瀑布模型在編碼之前設(shè)置了系統(tǒng)分析和系統(tǒng)設(shè)計(jì)的各個(gè)階段,分析與設(shè)計(jì)階段的基本任務(wù)規(guī)定,的各個(gè)階段,分析與設(shè)計(jì)階段的基本任務(wù)規(guī)定,在這兩個(gè)階段主要考慮目標(biāo)系統(tǒng)的邏輯模型,不在這兩個(gè)階段主要考慮目標(biāo)系統(tǒng)的邏輯模型,不涉及軟件的物理實(shí)現(xiàn)。涉及軟件的物理實(shí)現(xiàn)。清楚地區(qū)分邏輯設(shè)計(jì)與物理設(shè)計(jì),盡可能推遲程清楚地區(qū)分邏輯設(shè)計(jì)與物理設(shè)計(jì),盡可能推遲程序的物理實(shí)現(xiàn),是按照瀑布模型開(kāi)發(fā)軟件的一條序的物理實(shí)現(xiàn),是按照瀑布模型開(kāi)發(fā)軟件的一條重要的指導(dǎo)思想。重要的指導(dǎo)思想。10.2 傳統(tǒng)軟件過(guò)程模型瀑布模型的特點(diǎn)瀑布模型的特點(diǎn)質(zhì)量保證的觀點(diǎn)質(zhì)量保證的觀點(diǎn) 每個(gè)階段都必須完成規(guī)定的文檔,沒(méi)有交出合格每個(gè)階段都必須完成規(guī)定的文檔,沒(méi)有交出合格的文檔就是沒(méi)有完成該階段的任務(wù)。的文檔就是沒(méi)有完成該階段的任務(wù)。每個(gè)階段結(jié)束前都要對(duì)所完成的文檔進(jìn)行評(píng)審,每個(gè)階段結(jié)束前都要對(duì)所完成的文檔進(jìn)行評(píng)審,以便盡早發(fā)現(xiàn)問(wèn)題,改正錯(cuò)誤。以便盡早發(fā)現(xiàn)問(wèn)題,改正錯(cuò)誤。10.2 傳統(tǒng)軟件過(guò)程模型實(shí)際的瀑布模型實(shí)際的瀑布模型實(shí)際的瀑布模型是帶實(shí)際的瀑布模型是帶“反饋環(huán)反饋環(huán)”的,如圖所示。的,如圖所示。10.2 傳統(tǒng)軟件過(guò)程模型瀑布模型的優(yōu)點(diǎn)瀑布模型的優(yōu)點(diǎn)可強(qiáng)迫開(kāi)發(fā)人員采用規(guī)范化的方法??蓮?qiáng)迫開(kāi)發(fā)人員采用規(guī)范化的方法。嚴(yán)格地規(guī)定了每個(gè)階段必須提交的文檔。嚴(yán)格地規(guī)定了每個(gè)階段必須提交的文檔。要求每個(gè)階段交出的所有產(chǎn)品都必須是經(jīng)過(guò)驗(yàn)證要求每個(gè)階段交出的所有產(chǎn)品都必須是經(jīng)過(guò)驗(yàn)證的。的。10.2 傳統(tǒng)軟件過(guò)程模型瀑布模型的缺點(diǎn)瀑布模型的缺點(diǎn)由于瀑布模型幾乎完全依賴(lài)于書(shū)面的規(guī)格說(shuō)明,由于瀑布模型幾乎完全依賴(lài)于書(shū)面的規(guī)格說(shuō)明,很可能導(dǎo)致最終開(kāi)發(fā)出的軟件產(chǎn)品不能真正滿(mǎn)足很可能導(dǎo)致最終開(kāi)發(fā)出的軟件產(chǎn)品不能真正滿(mǎn)足用戶(hù)的需要。如果需求規(guī)格說(shuō)明與用戶(hù)需求之間用戶(hù)的需要。如果需求規(guī)格說(shuō)明與用戶(hù)需求之間有差異,就會(huì)發(fā)生這種情況。有差異,就會(huì)發(fā)生這種情況。瀑布模型只適用于項(xiàng)目開(kāi)始時(shí)需求已確定的情況。瀑布模型只適用于項(xiàng)目開(kāi)始時(shí)需求已確定的情況。10.2 傳統(tǒng)軟件過(guò)程模型快速原型模型快速原型模型快速原型是快速建立起來(lái)快速原型是快速建立起來(lái)的可以在計(jì)算機(jī)上運(yùn)行的的可以在計(jì)算機(jī)上運(yùn)行的程序,它所能完成的功能程序,它所能完成的功能往往是最終產(chǎn)品能完成的往往是最終產(chǎn)品能完成的功能的一個(gè)子集。功能的一個(gè)子集??焖僭湍P腿鐖D所示,快速原型模型如圖所示,圖中圖中實(shí)線箭頭表示開(kāi)發(fā)過(guò)實(shí)線箭頭表示開(kāi)發(fā)過(guò)程程,虛線箭頭表示維護(hù)過(guò)虛線箭頭表示維護(hù)過(guò)程程。10.2 傳統(tǒng)軟件過(guò)程模型快速原型模型的優(yōu)點(diǎn)快速原型模型的優(yōu)點(diǎn)(1)(1)有助于滿(mǎn)足用戶(hù)的真實(shí)需求。有助于滿(mǎn)足用戶(hù)的真實(shí)需求。(2)(2)原型系統(tǒng)已經(jīng)通過(guò)與用戶(hù)的交互而得到驗(yàn)證,據(jù)原型系統(tǒng)已經(jīng)通過(guò)與用戶(hù)的交互而得到驗(yàn)證,據(jù)此產(chǎn)生的規(guī)格說(shuō)明文檔能夠正確地描述用戶(hù)需求。此產(chǎn)生的規(guī)格說(shuō)明文檔能夠正確地描述用戶(hù)需求。(3)(3)軟件產(chǎn)品的開(kāi)發(fā)基本上是按線性順序進(jìn)行。軟件產(chǎn)品的開(kāi)發(fā)基本上是按線性順序進(jìn)行。(4)(4)因?yàn)橐?guī)格說(shuō)明文檔正確地描述了用戶(hù)需求,因此,因?yàn)橐?guī)格說(shuō)明文檔正確地描述了用戶(hù)需求,因此,在開(kāi)發(fā)過(guò)程的后續(xù)階段不會(huì)因?yàn)榘l(fā)現(xiàn)規(guī)格說(shuō)明文在開(kāi)發(fā)過(guò)程的后續(xù)階段不會(huì)因?yàn)榘l(fā)現(xiàn)規(guī)格說(shuō)明文檔的錯(cuò)誤而進(jìn)行較大的返工。檔的錯(cuò)誤而進(jìn)行較大的返工。10.2 傳統(tǒng)軟件過(guò)程模型快速原型模型的優(yōu)點(diǎn)快速原型模型的優(yōu)點(diǎn)(5)(5)開(kāi)發(fā)人員通過(guò)建立原型系統(tǒng)已經(jīng)學(xué)到了許多東西,開(kāi)發(fā)人員通過(guò)建立原型系統(tǒng)已經(jīng)學(xué)到了許多東西,因此,在設(shè)計(jì)和編碼階段發(fā)生錯(cuò)誤的可能性也比因此,在設(shè)計(jì)和編碼階段發(fā)生錯(cuò)誤的可能性也比較小,這自然減少了在后續(xù)階段需要改正前面階較小,這自然減少了在后續(xù)階段需要改正前面階段所犯錯(cuò)誤的可能性。段所犯錯(cuò)誤的可能性。(6)(6)快速原型的突出特點(diǎn)是快速原型的突出特點(diǎn)是“快速快速”。開(kāi)發(fā)人員應(yīng)。開(kāi)發(fā)人員應(yīng)該盡可能快地建造出原型系統(tǒng),以加速軟件開(kāi)發(fā)該盡可能快地建造出原型系統(tǒng),以加速軟件開(kāi)發(fā)過(guò)程,節(jié)約軟件開(kāi)發(fā)成本。過(guò)程,節(jié)約軟件開(kāi)發(fā)成本。原型的用途是獲知用戶(hù)的真正需求,一旦需求確原型的用途是獲知用戶(hù)的真正需求,一旦需求確定了,原型可以拋棄,當(dāng)然也可以在原型的基礎(chǔ)定了,原型可以拋棄,當(dāng)然也可以在原型的基礎(chǔ)上進(jìn)行開(kāi)發(fā)。上進(jìn)行開(kāi)發(fā)。10.2 傳統(tǒng)軟件過(guò)程模型增量模型增量模型 增量模型也稱(chēng)為漸增模型,是增量模型也稱(chēng)為漸增模型,是MillsMills等于等于19801980年提年提出來(lái)的。出來(lái)的。使用增量模型開(kāi)發(fā)軟件時(shí),把軟件產(chǎn)品作為一系使用增量模型開(kāi)發(fā)軟件時(shí),把軟件產(chǎn)品作為一系列的增量構(gòu)件來(lái)設(shè)計(jì)、編碼、集成和測(cè)試。列的增量構(gòu)件來(lái)設(shè)計(jì)、編碼、集成和測(cè)試。每個(gè)構(gòu)件由多個(gè)相互作用的模塊構(gòu)成,并且能夠每個(gè)構(gòu)件由多個(gè)相互作用的模塊構(gòu)成,并且能夠完成特定的功能。完成特定的功能。10.2 傳統(tǒng)軟件過(guò)程模型增量模型增量模型 增量模型如圖所示。增量模型如圖所示。10.2 傳統(tǒng)軟件過(guò)程模型增量模型的優(yōu)點(diǎn)增量模型的優(yōu)點(diǎn)(1)(1)能在較短時(shí)間內(nèi)向用戶(hù)提交可完成一些有用的工作產(chǎn)品,能在較短時(shí)間內(nèi)向用戶(hù)提交可完成一些有用的工作產(chǎn)品,即從第即從第1 1個(gè)構(gòu)件交付之日起,用戶(hù)就能做一些有用的工作。個(gè)構(gòu)件交付之日起,用戶(hù)就能做一些有用的工作。(2)(2)逐步增加產(chǎn)品的功能可以使用戶(hù)有較充裕的時(shí)間學(xué)習(xí)和適逐步增加產(chǎn)品的功能可以使用戶(hù)有較充裕的時(shí)間學(xué)習(xí)和適應(yīng)新產(chǎn)品,從而減少一個(gè)全新的軟件可能給用戶(hù)組織帶來(lái)應(yīng)新產(chǎn)品,從而減少一個(gè)全新的軟件可能給用戶(hù)組織帶來(lái)的沖擊。的沖擊。(3)(3)項(xiàng)目失敗的風(fēng)險(xiǎn)較低,雖然在某些增量構(gòu)件中可能遇到一項(xiàng)目失敗的風(fēng)險(xiǎn)較低,雖然在某些增量構(gòu)件中可能遇到一些問(wèn)題,但其他增量構(gòu)件將能夠成功地交付給客戶(hù)。些問(wèn)題,但其他增量構(gòu)件將能夠成功地交付給客戶(hù)。(4)(4)優(yōu)先級(jí)最高的服務(wù)首先交付,然后再將其他增量構(gòu)件逐次優(yōu)先級(jí)最高的服務(wù)首先交付,然后再將其他增量構(gòu)件逐次集成進(jìn)來(lái)。因此,最重要的系統(tǒng)服務(wù)將接受最多的測(cè)試。集成進(jìn)來(lái)。因此,最重要的系統(tǒng)服務(wù)將接受最多的測(cè)試。10.2 傳統(tǒng)軟件過(guò)程模型增量構(gòu)件開(kāi)發(fā)增量構(gòu)件開(kāi)發(fā) 每個(gè)增量構(gòu)件應(yīng)當(dāng)實(shí)現(xiàn)某種系統(tǒng)功能,因此增量構(gòu)件的開(kāi)發(fā)每個(gè)增量構(gòu)件應(yīng)當(dāng)實(shí)現(xiàn)某種系統(tǒng)功能,因此增量構(gòu)件的開(kāi)發(fā)可以采用瀑布模型的方式,如圖所示??梢圆捎闷俨寄P偷姆绞?,如圖所示。10.2 傳統(tǒng)軟件過(guò)程模型采用增量模型需注意的問(wèn)題采用增量模型需注意的問(wèn)題(1)(1)在把每個(gè)新的增量構(gòu)件集成到現(xiàn)有軟件體系結(jié)構(gòu)在把每個(gè)新的增量構(gòu)件集成到現(xiàn)有軟件體系結(jié)構(gòu)中時(shí),必須不破壞原來(lái)已經(jīng)開(kāi)發(fā)出的產(chǎn)品。中時(shí),必須不破壞原來(lái)已經(jīng)開(kāi)發(fā)出的產(chǎn)品。(2)(2)軟件體系結(jié)構(gòu)必須是開(kāi)放的,即向現(xiàn)有產(chǎn)品中加軟件體系結(jié)構(gòu)必須是開(kāi)放的,即向現(xiàn)有產(chǎn)品中加入新構(gòu)件的過(guò)程必須簡(jiǎn)單、方便。入新構(gòu)件的過(guò)程必須簡(jiǎn)單、方便。因此,采用增量模型比采用瀑布模型和快速原型因此,采用增量模型比采用瀑布模型和快速原型模型更需要精心的設(shè)計(jì)。模型更需要精心的設(shè)計(jì)。10.2 傳統(tǒng)軟件過(guò)程模型螺旋模型螺旋模型 螺旋模型最初是螺旋模型最初是BoehmBoehm于于19881988年提出來(lái)的。年提出來(lái)的。該模型將瀑布模型與快速原型模型結(jié)合起來(lái),并該模型將瀑布模型與快速原型模型結(jié)合起來(lái),并且加入兩種模型均忽略了的風(fēng)險(xiǎn)分析。且加入兩種模型均忽略了的風(fēng)險(xiǎn)分析。螺旋模型的基本思想是,使用原型及其他方法來(lái)螺旋模型的基本思想是,使用原型及其他方法來(lái)盡量降低風(fēng)險(xiǎn)。盡量降低風(fēng)險(xiǎn)。10.2 傳統(tǒng)軟件過(guò)程模型螺旋模型螺旋模型 理解這種模型的一理解這種模型的一個(gè)簡(jiǎn)便方法,是把個(gè)簡(jiǎn)便方法,是把它看做在每個(gè)階段它看做在每個(gè)階段之前都增加了風(fēng)險(xiǎn)之前都增加了風(fēng)險(xiǎn)分析過(guò)程的快速原分析過(guò)程的快速原型模型。型模型。10.2 傳統(tǒng)軟件過(guò)程模型完整的螺旋模型完整的螺旋模型 10.2 傳統(tǒng)軟件過(guò)程模型完整的螺旋模型完整的螺旋模型 在螺旋模型中,軟件過(guò)程表示成一個(gè)螺線,而不是像以往在螺旋模型中,軟件過(guò)程表示成一個(gè)螺線,而不是像以往的模型那樣表示為一個(gè)具有回溯的活動(dòng)序列。的模型那樣表示為一個(gè)具有回溯的活動(dòng)序列。在螺線上的每一個(gè)循環(huán)表示過(guò)程的一個(gè)階段。在螺線上的每一個(gè)循環(huán)表示過(guò)程的一個(gè)階段。每個(gè)階段開(kāi)始時(shí)的任務(wù)是確定該階段的目標(biāo)、為完成這些每個(gè)階段開(kāi)始時(shí)的任務(wù)是確定該階段的目標(biāo)、為完成這些目標(biāo)選擇方案及設(shè)定這些方案的約束條件。接下來(lái)的任務(wù)目標(biāo)選擇方案及設(shè)定這些方案的約束條件。接下來(lái)的任務(wù)是,從風(fēng)險(xiǎn)角度分析上一步的工作結(jié)果,努力排除各種潛是,從風(fēng)險(xiǎn)角度分析上一步的工作結(jié)果,努力排除各種潛在的風(fēng)險(xiǎn),通常用建造原型的方法來(lái)排除風(fēng)險(xiǎn)。如果成功在的風(fēng)險(xiǎn),通常用建造原型的方法來(lái)排除風(fēng)險(xiǎn)。如果成功地排除了所有風(fēng)險(xiǎn),則啟動(dòng)下一步開(kāi)發(fā)步驟,在這個(gè)步驟地排除了所有風(fēng)險(xiǎn),則啟動(dòng)下一步開(kāi)發(fā)步驟,在這個(gè)步驟的工作過(guò)程相當(dāng)于純粹的瀑布模型。最后是評(píng)價(jià)該階段的的工作過(guò)程相當(dāng)于純粹的瀑布模型。最后是評(píng)價(jià)該階段的工作成果并計(jì)劃下一個(gè)階段的工作。工作成果并計(jì)劃下一個(gè)階段的工作。10.2 傳統(tǒng)軟件過(guò)程模型螺旋模型的螺旋模型的4項(xiàng)活動(dòng)項(xiàng)活動(dòng) 螺線上的每一個(gè)循環(huán)可劃分為螺線上的每一個(gè)循環(huán)可劃分為4 4個(gè)象限,分別表達(dá)了個(gè)象限,分別表達(dá)了4 4個(gè)方個(gè)方面的活動(dòng)。面的活動(dòng)。(1)(1)目標(biāo)設(shè)定目標(biāo)設(shè)定定義在該階段的目標(biāo),弄清對(duì)過(guò)程和產(chǎn)品定義在該階段的目標(biāo),弄清對(duì)過(guò)程和產(chǎn)品的限制條件,制訂詳細(xì)的管理計(jì)劃,識(shí)別項(xiàng)目風(fēng)險(xiǎn),可能的限制條件,制訂詳細(xì)的管理計(jì)劃,識(shí)別項(xiàng)目風(fēng)險(xiǎn),可能還要計(jì)劃與這些風(fēng)險(xiǎn)有關(guān)的對(duì)策。還要計(jì)劃與這些風(fēng)險(xiǎn)有關(guān)的對(duì)策。(2)(2)風(fēng)險(xiǎn)估計(jì)與弱化風(fēng)險(xiǎn)估計(jì)與弱化針對(duì)每一個(gè)風(fēng)險(xiǎn)進(jìn)行詳細(xì)分析,設(shè)針對(duì)每一個(gè)風(fēng)險(xiǎn)進(jìn)行詳細(xì)分析,設(shè)想弱化風(fēng)險(xiǎn)的步驟。想弱化風(fēng)險(xiǎn)的步驟。(3)(3)開(kāi)發(fā)與驗(yàn)證開(kāi)發(fā)與驗(yàn)證評(píng)價(jià)風(fēng)險(xiǎn)之后選擇系統(tǒng)開(kāi)發(fā)模型。評(píng)價(jià)風(fēng)險(xiǎn)之后選擇系統(tǒng)開(kāi)發(fā)模型。(4)(4)計(jì)劃計(jì)劃評(píng)價(jià)開(kāi)發(fā)工作,確定是否繼續(xù)進(jìn)行螺線的下一評(píng)價(jià)開(kāi)發(fā)工作,確定是否繼續(xù)進(jìn)行螺線的下一個(gè)循環(huán)。如果確定要繼續(xù),則計(jì)劃項(xiàng)目的下一個(gè)階段的工個(gè)循環(huán)。如果確定要繼續(xù),則計(jì)劃項(xiàng)目的下一個(gè)階段的工作。作。10.2 傳統(tǒng)軟件過(guò)程模型螺旋模型的優(yōu)點(diǎn)螺旋模型的優(yōu)點(diǎn) 對(duì)可選方案和約束條件的強(qiáng)調(diào)有利于已有軟件的對(duì)可選方案和約束條件的強(qiáng)調(diào)有利于已有軟件的重用,也有助于把軟件質(zhì)量作為軟件開(kāi)發(fā)的一個(gè)重用,也有助于把軟件質(zhì)量作為軟件開(kāi)發(fā)的一個(gè)重要目標(biāo)。重要目標(biāo)。減少了過(guò)多測(cè)試或測(cè)試不足所帶來(lái)的風(fēng)險(xiǎn)。減少了過(guò)多測(cè)試或測(cè)試不足所帶來(lái)的風(fēng)險(xiǎn)。在螺旋模型中維護(hù)只是模型的另一個(gè)周期,因而在螺旋模型中維護(hù)只是模型的另一個(gè)周期,因而在維護(hù)和開(kāi)發(fā)之間并沒(méi)有本質(zhì)區(qū)別。在維護(hù)和開(kāi)發(fā)之間并沒(méi)有本質(zhì)區(qū)別。10.2 傳統(tǒng)軟件過(guò)程模型螺旋模型的缺點(diǎn)螺旋模型的缺點(diǎn) 螺旋模型是風(fēng)險(xiǎn)驅(qū)動(dòng)的,因此要求軟件開(kāi)發(fā)人員螺旋模型是風(fēng)險(xiǎn)驅(qū)動(dòng)的,因此要求軟件開(kāi)發(fā)人員必須具有豐富的風(fēng)險(xiǎn)評(píng)估經(jīng)驗(yàn)和這方面的專(zhuān)門(mén)知必須具有豐富的風(fēng)險(xiǎn)評(píng)估經(jīng)驗(yàn)和這方面的專(zhuān)門(mén)知識(shí),否則將出現(xiàn)真正的風(fēng)險(xiǎn):當(dāng)項(xiàng)目實(shí)際上正在識(shí),否則將出現(xiàn)真正的風(fēng)險(xiǎn):當(dāng)項(xiàng)目實(shí)際上正在走向?yàn)?zāi)難時(shí),開(kāi)發(fā)人員可能還以為一切正常。走向?yàn)?zāi)難時(shí),開(kāi)發(fā)人員可能還以為一切正常。10.2 傳統(tǒng)軟件過(guò)程模型噴泉模型噴泉模型 噴泉模型是典型的面向噴泉模型是典型的面向?qū)ο笊芷谀P汀?duì)象生命周期模型?!皣娙獓娙币辉~體現(xiàn)了迭一詞體現(xiàn)了迭代和無(wú)間隙特性。圖中代和無(wú)間隙特性。圖中代表不同階段的圓圈相代表不同階段的圓圈相互重疊,這明確表示兩互重疊,這明確表示兩個(gè)活動(dòng)之間存在重疊。個(gè)活動(dòng)之間存在重疊。10.3 現(xiàn)代軟件過(guò)程模型基于構(gòu)件的開(kāi)發(fā)模型基于構(gòu)件的開(kāi)發(fā)模型 基于構(gòu)件的軟件工程(基于構(gòu)件的軟件工程(component-based component-based software engineeringsoftware engineering,CBSECBSE)是強(qiáng)調(diào)使用可復(fù))是強(qiáng)調(diào)使用可復(fù)用的軟件用的軟件“構(gòu)件構(gòu)件”來(lái)設(shè)計(jì)和構(gòu)造基于計(jì)算機(jī)的系來(lái)設(shè)計(jì)和構(gòu)造基于計(jì)算機(jī)的系統(tǒng)的過(guò)程。統(tǒng)的過(guò)程。ClementsClements對(duì)對(duì)CBSECBSE給出了如下描述。給出了如下描述。10.3 現(xiàn)代軟件過(guò)程模型基于構(gòu)件的開(kāi)發(fā)模型基于構(gòu)件的開(kāi)發(fā)模型 ClementsClements對(duì)對(duì)CBSECBSE給出了如下描述。給出了如下描述。CBSECBSE正在改變大型軟件系統(tǒng)的開(kāi)發(fā)方式。正在改變大型軟件系統(tǒng)的開(kāi)發(fā)方式。CBSECBSE體現(xiàn)體現(xiàn)了了FrodFrod Brooks Brooks和其他人支持的和其他人支持的“購(gòu)買(mǎi),而非構(gòu)造購(gòu)買(mǎi),而非構(gòu)造”的思想。就如同早期的子程序?qū)⒊绦騿T從考慮編的思想。就如同早期的子程序?qū)⒊绦騿T從考慮編程細(xì)節(jié)中解脫出來(lái)一樣,程細(xì)節(jié)中解脫出來(lái)一樣,CBSECBSE將考慮的重點(diǎn)從編碼將考慮的重點(diǎn)從編碼轉(zhuǎn)移到組裝軟件系統(tǒng)。考慮的焦點(diǎn)是轉(zhuǎn)移到組裝軟件系統(tǒng)??紤]的焦點(diǎn)是“集成集成”,而,而不再是不再是“實(shí)現(xiàn)實(shí)現(xiàn)”。這樣做的基礎(chǔ)是假定在很多大型。這樣做的基礎(chǔ)是假定在很多大型軟件系統(tǒng)中存在足夠多的共性,使得開(kāi)發(fā)可復(fù)用的軟件系統(tǒng)中存在足夠多的共性,使得開(kāi)發(fā)可復(fù)用的構(gòu)件來(lái)滿(mǎn)足這些共性是可行的。構(gòu)件來(lái)滿(mǎn)足這些共性是可行的。10.3 現(xiàn)代軟件過(guò)程模型基于構(gòu)件的開(kāi)發(fā)模型基于構(gòu)件的開(kāi)發(fā)模型 當(dāng)軟件團(tuán)隊(duì)使用傳統(tǒng)的需求獲取技術(shù)確定了待開(kāi)當(dāng)軟件團(tuán)隊(duì)使用傳統(tǒng)的需求獲取技術(shù)確定了待開(kāi)發(fā)軟件的系統(tǒng)需求時(shí),該過(guò)程開(kāi)始。發(fā)軟件的系統(tǒng)需求時(shí),該過(guò)程開(kāi)始。體系結(jié)構(gòu)設(shè)計(jì)完成后,并不立即進(jìn)行詳細(xì)設(shè)計(jì)任體系結(jié)構(gòu)設(shè)計(jì)完成后,并不立即進(jìn)行詳細(xì)設(shè)計(jì)任務(wù),而是針對(duì)每一系統(tǒng)需求考慮以下問(wèn)題務(wù),而是針對(duì)每一系統(tǒng)需求考慮以下問(wèn)題:(1)(1)現(xiàn)有的商品化構(gòu)件(現(xiàn)有的商品化構(gòu)件(commercial off-the-shelfcommercial off-the-shelf,COTSCOTS)是否能夠?qū)崿F(xiàn)該需求?)是否能夠?qū)崿F(xiàn)該需求?(2)(2)內(nèi)部開(kāi)發(fā)的可復(fù)用構(gòu)件是否能夠?qū)崿F(xiàn)該需求??jī)?nèi)部開(kāi)發(fā)的可復(fù)用構(gòu)件是否能夠?qū)崿F(xiàn)該需求?(3)(3)可用構(gòu)件的接口與待構(gòu)造系統(tǒng)的體系結(jié)構(gòu)是否相容?可用構(gòu)件的接口與待構(gòu)造系統(tǒng)的體系結(jié)構(gòu)是否相容?10.3 現(xiàn)代軟件過(guò)程模型基于構(gòu)件的開(kāi)發(fā)模型基于構(gòu)件的開(kāi)發(fā)模型 10.3 現(xiàn)代軟件過(guò)程模型開(kāi)發(fā)步驟開(kāi)發(fā)步驟 不考慮構(gòu)件的開(kāi)發(fā)技術(shù),基于構(gòu)件的開(kāi)發(fā)模型由不考慮構(gòu)件的開(kāi)發(fā)技術(shù),基于構(gòu)件的開(kāi)發(fā)模型由以下步驟組成:以下步驟組成:(1)(1)對(duì)于該問(wèn)題領(lǐng)域的基于構(gòu)件的可用產(chǎn)品進(jìn)行研究對(duì)于該問(wèn)題領(lǐng)域的基于構(gòu)件的可用產(chǎn)品進(jìn)行研究和評(píng)估。和評(píng)估。(2)(2)考慮構(gòu)件集成的問(wèn)題。考慮構(gòu)件集成的問(wèn)題。(3)(3)設(shè)計(jì)軟件架構(gòu)以容納這些構(gòu)件。設(shè)計(jì)軟件架構(gòu)以容納這些構(gòu)件。(4)(4)將構(gòu)件集成到架構(gòu)中。將構(gòu)件集成到架構(gòu)中。(5)(5)進(jìn)行充分的測(cè)試以保證功能正常。進(jìn)行充分的測(cè)試以保證功能正常。10.3 現(xiàn)代軟件過(guò)程模型典型的構(gòu)件模型典型的構(gòu)件模型 (1)(1)OMG/CORBAOMG/CORBA。對(duì)象管理組織發(fā)布了公共對(duì)象請(qǐng)求代理體系。對(duì)象管理組織發(fā)布了公共對(duì)象請(qǐng)求代理體系結(jié)構(gòu)(結(jié)構(gòu)(OMG/CORBAOMG/CORBA),一個(gè)對(duì)象請(qǐng)求代理提供了多種服務(wù)),一個(gè)對(duì)象請(qǐng)求代理提供了多種服務(wù)使得可復(fù)用構(gòu)件(對(duì)象)可以與其他構(gòu)件通信。使得可復(fù)用構(gòu)件(對(duì)象)可以與其他構(gòu)件通信。(2)(2)Microsoft COMMicrosoft COM。微軟公司開(kāi)發(fā)了構(gòu)件對(duì)象模型(。微軟公司開(kāi)發(fā)了構(gòu)件對(duì)象模型(COMCOM),),此模型提供了運(yùn)行于此模型提供了運(yùn)行于WindowsWindows操作系統(tǒng)下的單個(gè)應(yīng)用中使操作系統(tǒng)下的單個(gè)應(yīng)用中使用不同廠商生產(chǎn)的構(gòu)件的規(guī)格說(shuō)明。用不同廠商生產(chǎn)的構(gòu)件的規(guī)格說(shuō)明。(3)(3)Sun JavaBeanSun JavaBean構(gòu)件構(gòu)件。JavaBeanJavaBean構(gòu)件系統(tǒng)是一個(gè)可移植的、構(gòu)件系統(tǒng)是一個(gè)可移植的、平臺(tái)獨(dú)立的、使用平臺(tái)獨(dú)立的、使用JavaJava程序設(shè)計(jì)語(yǔ)言開(kāi)發(fā)的程序設(shè)計(jì)語(yǔ)言開(kāi)發(fā)的CBSECBSE基礎(chǔ)設(shè)施。基礎(chǔ)設(shè)施。10.3 現(xiàn)代軟件過(guò)程模型形式化方法模型形式化方法模型 形式化系統(tǒng)開(kāi)發(fā)模型是一種基于形式化數(shù)學(xué)變換形式化系統(tǒng)開(kāi)發(fā)模型是一種基于形式化數(shù)學(xué)變換的軟件開(kāi)發(fā)方法,它可將系統(tǒng)規(guī)格說(shuō)明轉(zhuǎn)換為可的軟件開(kāi)發(fā)方法,它可將系統(tǒng)規(guī)格說(shuō)明轉(zhuǎn)換為可執(zhí)行的程序。執(zhí)行的程序。10.3 現(xiàn)代軟件過(guò)程模型與瀑布模型的區(qū)別與瀑布模型的區(qū)別 軟件需求規(guī)格說(shuō)明被細(xì)化為用數(shù)學(xué)記號(hào)表達(dá)的詳細(xì)的形式軟件需求規(guī)格說(shuō)明被細(xì)化為用數(shù)學(xué)記號(hào)表達(dá)的詳細(xì)的形式化規(guī)格說(shuō)明?;?guī)格說(shuō)明。設(shè)計(jì)、實(shí)現(xiàn)和單元測(cè)試等開(kāi)發(fā)過(guò)程由變換開(kāi)發(fā)過(guò)程代替。設(shè)計(jì)、實(shí)現(xiàn)和單元測(cè)試等開(kāi)發(fā)過(guò)程由變換開(kāi)發(fā)過(guò)程代替。通過(guò)一系列變換將形式化規(guī)格說(shuō)明細(xì)化成為程序。這種細(xì)通過(guò)一系列變換將形式化規(guī)格說(shuō)明細(xì)化成為程序。這種細(xì)化的過(guò)程如圖所示?;倪^(guò)程如圖所示。10.3 現(xiàn)代軟件過(guò)程模型面向方面的軟件開(kāi)發(fā)面向方面的軟件開(kāi)發(fā) 面向方面的軟件開(kāi)發(fā)(面向方面的軟件開(kāi)發(fā)(aspect-oriented aspect-oriented software developmentsoftware development,AOSDAOSD)通常稱(chēng)為面向方)通常稱(chēng)為面向方面編程(面編程(aspect-oriented progammingaspect-oriented progamming,AOPAOP),),是相對(duì)較新的一種軟件工程模型,為定義、說(shuō)明、是相對(duì)較新的一種軟件工程模型,為定義、說(shuō)明、設(shè)計(jì)和構(gòu)建方面(設(shè)計(jì)和構(gòu)建方面(aspectaspect)提供過(guò)程和方法。)提供過(guò)程和方法。10.3 現(xiàn)代軟件過(guò)程模型統(tǒng)一過(guò)程統(tǒng)一過(guò)程 由由BoochBooch、JacobsonJacobson及及RumbaughRumbaugh提出,統(tǒng)一過(guò)程模型如圖提出,統(tǒng)一過(guò)程模型如圖所示。所示。10.3 現(xiàn)代軟件過(guò)程模型統(tǒng)一過(guò)程的工作流統(tǒng)一過(guò)程的工作流 在統(tǒng)一過(guò)程中,有在統(tǒng)一過(guò)程中,有5 5個(gè)核心工作流。個(gè)核心工作流。需求工作流。需求工作流的目標(biāo)是確保開(kāi)發(fā)人員構(gòu)建正需求工作流。需求工作流的目標(biāo)是確保開(kāi)發(fā)人員構(gòu)建正確的系統(tǒng)。確的系統(tǒng)。分析工作流。分析工作流的目標(biāo)是分析和細(xì)化需求。分析工作流。分析工作流的目標(biāo)是分析和細(xì)化需求。設(shè)計(jì)工作流。設(shè)計(jì)工作流是對(duì)分析工作流的細(xì)化,直到設(shè)計(jì)工作流。設(shè)計(jì)工作流是對(duì)分析工作流的細(xì)化,直到設(shè)計(jì)模型可以被程序員實(shí)現(xiàn)為止。設(shè)計(jì)模型可以被程序員實(shí)現(xiàn)為止。實(shí)現(xiàn)工作流。實(shí)現(xiàn)工作流的目標(biāo)是:用選擇的實(shí)現(xiàn)語(yǔ)言實(shí)現(xiàn)工作流。實(shí)現(xiàn)工作流的目標(biāo)是:用選擇的實(shí)現(xiàn)語(yǔ)言實(shí)現(xiàn)目標(biāo)信息系統(tǒng)。實(shí)現(xiàn)目標(biāo)信息系統(tǒng)。測(cè)試工作流。測(cè)試工作流是質(zhì)量保證組的職責(zé)。測(cè)試工作流。測(cè)試工作流是質(zhì)量保證組的職責(zé)。10.3 現(xiàn)代軟件過(guò)程模型統(tǒng)一過(guò)程的階段統(tǒng)一過(guò)程的階段 統(tǒng)一過(guò)程有統(tǒng)一過(guò)程有4 4個(gè)階段,分別是初始階段、細(xì)化階段、構(gòu)造階個(gè)階段,分別是初始階段、細(xì)化階段、構(gòu)造階段和移交階段。段和移交階段。初始階段。初始階段主要關(guān)注項(xiàng)目計(jì)劃和風(fēng)險(xiǎn)評(píng)估,其目初始階段。初始階段主要關(guān)注項(xiàng)目計(jì)劃和風(fēng)險(xiǎn)評(píng)估,其目的是確定是否值得開(kāi)發(fā)目標(biāo)信息系統(tǒng)。的是確定是否值得開(kāi)發(fā)目標(biāo)信息系統(tǒng)。細(xì)化階段。細(xì)化階段關(guān)心定義系統(tǒng)的總體框架,其目標(biāo)是:細(xì)化階段。細(xì)化階段關(guān)心定義系統(tǒng)的總體框架,其目標(biāo)是:細(xì)化初始需求(用況)、細(xì)化體系結(jié)構(gòu)、監(jiān)控風(fēng)險(xiǎn)并細(xì)化細(xì)化初始需求(用況)、細(xì)化體系結(jié)構(gòu)、監(jiān)控風(fēng)險(xiǎn)并細(xì)化它們的優(yōu)先級(jí)、細(xì)化業(yè)務(wù)案例以及制訂項(xiàng)目管理計(jì)劃。它們的優(yōu)先級(jí)、細(xì)化業(yè)務(wù)案例以及制訂項(xiàng)目管理計(jì)劃。構(gòu)造階段。構(gòu)造階段是建立系統(tǒng),構(gòu)造信息系統(tǒng)的第構(gòu)造階段。構(gòu)造階段是建立系統(tǒng),構(gòu)造信息系統(tǒng)的第1 1個(gè)具個(gè)具有操作質(zhì)量的版本,以能夠交付給客戶(hù)進(jìn)行有操作質(zhì)量的版本,以能夠交付給客戶(hù)進(jìn)行 測(cè)試的版本結(jié)測(cè)試的版本結(jié)束,有時(shí)稱(chēng)為測(cè)試版本。束,有時(shí)稱(chēng)為測(cè)試版本。移交階段。移交階段包含移交階段。移交階段包含 測(cè)試時(shí)期,以發(fā)布完整的系統(tǒng)而測(cè)試時(shí)期,以發(fā)布完整的系統(tǒng)而終止,其目標(biāo)是確保信息系統(tǒng)真正滿(mǎn)足客戶(hù)的需求。終止,其目標(biāo)是確保信息系統(tǒng)真正滿(mǎn)足客戶(hù)的需求。10.3 現(xiàn)代軟件過(guò)程模型敏捷過(guò)程模型敏捷過(guò)程模型 20012001年,年,Kent BeckKent Beck等等1717名編程大師發(fā)表名編程大師發(fā)表“敏捷軟件開(kāi)發(fā)敏捷軟件開(kāi)發(fā)”宣言:宣言:我們正在通過(guò)親身實(shí)踐以及幫助他人實(shí)踐的方式來(lái)揭示更我們正在通過(guò)親身實(shí)踐以及幫助他人實(shí)踐的方式來(lái)揭示更好的軟件開(kāi)發(fā)之路,通過(guò)這項(xiàng)工作,我們認(rèn)為:好的軟件開(kāi)發(fā)之路,通過(guò)這項(xiàng)工作,我們認(rèn)為:個(gè)體和交互勝過(guò)過(guò)程和工具;個(gè)體和交互勝過(guò)過(guò)程和工具;可工作軟件勝過(guò)寬泛的文檔;可工作軟件勝過(guò)寬泛的文檔;客戶(hù)合作勝過(guò)合同談判;客戶(hù)合作勝過(guò)合同談判;響應(yīng)變化勝過(guò)遵循計(jì)劃。響應(yīng)變化勝過(guò)遵循計(jì)劃。10.3 現(xiàn)代軟件過(guò)程模型敏捷過(guò)程模型敏捷過(guò)程模型 對(duì)于敏捷開(kāi)發(fā),對(duì)于敏捷開(kāi)發(fā),IvarIvar Jacobson Jacobson給出了下面非常有用的論述。給出了下面非常有用的論述。“敏捷(敏捷(AgilityAgility)已經(jīng)成為當(dāng)今現(xiàn)代軟件過(guò)程的一個(gè)時(shí)髦用)已經(jīng)成為當(dāng)今現(xiàn)代軟件過(guò)程的一個(gè)時(shí)髦用詞。每個(gè)人都是敏捷的,敏捷團(tuán)隊(duì)是能夠適當(dāng)響應(yīng)變化的靈詞。每個(gè)人都是敏捷的,敏捷團(tuán)隊(duì)是能夠適當(dāng)響應(yīng)變化的靈活團(tuán)隊(duì)。變化就是軟件開(kāi)發(fā)本身,軟件構(gòu)建有變化、團(tuán)隊(duì)成活團(tuán)隊(duì)。變化就是軟件開(kāi)發(fā)本身,軟件構(gòu)建有變化、團(tuán)隊(duì)成員在變化、使用新技術(shù)會(huì)帶來(lái)變化,各種變化都會(huì)對(duì)開(kāi)發(fā)的員在變化、使用新技術(shù)會(huì)帶來(lái)變化,各種變化都會(huì)對(duì)開(kāi)發(fā)的軟件產(chǎn)品以及項(xiàng)目本身造成影響。我們必須接受的是支持變軟件產(chǎn)品以及項(xiàng)目本身造成影響。我們必須接受的是支持變化的意識(shí),它應(yīng)當(dāng)根植于軟件開(kāi)發(fā)中的每一件事中,因?yàn)檫@化的意識(shí),它應(yīng)當(dāng)根植于軟件開(kāi)發(fā)中的每一件事中,因?yàn)檫@是軟件的心臟與靈魂。敏捷團(tuán)隊(duì)意識(shí)到軟件是團(tuán)隊(duì)中所有人是軟件的心臟與靈魂。敏捷團(tuán)隊(duì)意識(shí)到軟件是團(tuán)隊(duì)中所有人共同開(kāi)發(fā)完成的,這些人的個(gè)人技能和合作能力是項(xiàng)目成功共同開(kāi)發(fā)完成的,這些人的個(gè)人技能和合作能力是項(xiàng)目成功的關(guān)鍵所在。的關(guān)鍵所在?!?0.3 現(xiàn)代軟件過(guò)程模型敏捷過(guò)程模型敏捷過(guò)程模型 任何一個(gè)敏捷過(guò)程都可以由所強(qiáng)調(diào)的任何一個(gè)敏捷過(guò)程都可以由所強(qiáng)調(diào)的3 3個(gè)關(guān)鍵假設(shè)識(shí)別出來(lái),個(gè)關(guān)鍵假設(shè)識(shí)別出來(lái),這這3 3個(gè)假設(shè)可適用于大多數(shù)軟件項(xiàng)目。個(gè)假設(shè)可適用于大多數(shù)軟件項(xiàng)目。(1)(1)提前預(yù)測(cè)哪些需求是穩(wěn)定的、哪些需求會(huì)變化非常困難。提前預(yù)測(cè)哪些需求是穩(wěn)定的、哪些需求會(huì)變化非常困難。同樣的,預(yù)測(cè)項(xiàng)目進(jìn)行中客戶(hù)優(yōu)先級(jí)的變化也很困難。同樣的,預(yù)測(cè)項(xiàng)目進(jìn)行中客戶(hù)優(yōu)先級(jí)的變化也很困難。(2)(2)對(duì)很多軟件,設(shè)計(jì)和構(gòu)建是交錯(cuò)進(jìn)行的。事實(shí)上,兩種活對(duì)很多軟件,設(shè)計(jì)和構(gòu)建是交錯(cuò)進(jìn)行的。事實(shí)上,兩種活動(dòng)應(yīng)當(dāng)順序開(kāi)展以保證通過(guò)構(gòu)建實(shí)施來(lái)驗(yàn)證設(shè)計(jì)模型,而動(dòng)應(yīng)當(dāng)順序開(kāi)展以保證通過(guò)構(gòu)建實(shí)施來(lái)驗(yàn)證設(shè)計(jì)模型,而在通過(guò)構(gòu)建驗(yàn)證之前很難估計(jì)應(yīng)該設(shè)計(jì)到什么程度。在通過(guò)構(gòu)建驗(yàn)證之前很難估計(jì)應(yīng)該設(shè)計(jì)到什么程度。(3)(3)從制訂計(jì)劃的角度來(lái)看,分析、設(shè)計(jì)、構(gòu)建和測(cè)試并不像從制訂計(jì)劃的角度來(lái)看,分析、設(shè)計(jì)、構(gòu)建和測(cè)試并不像我們所設(shè)想的那么容易預(yù)測(cè)。我們所設(shè)想的那么容易預(yù)測(cè)。10.3 現(xiàn)代軟件過(guò)程模型極限編程極限編程 極限編程(極限編程(eXtremeeXtreme Programming Programming,XPXP)使用面向?qū)ο蠓剑┦褂妹嫦驅(qū)ο蠓椒ㄗ鳛橥扑]的開(kāi)發(fā)范型。法作為推薦的開(kāi)發(fā)范型。XPXP包含了策劃、設(shè)計(jì)、編碼和測(cè)包含了策劃、設(shè)計(jì)、編碼和測(cè)試試4 4個(gè)框架活動(dòng)的規(guī)則和實(shí)踐。個(gè)框架活動(dòng)的規(guī)則和實(shí)踐。10.3 現(xiàn)代軟件過(guò)程模型極限編程的框架活動(dòng)極限編程的框架活動(dòng) 策劃。策劃活動(dòng)開(kāi)始于建立健全描述待開(kāi)發(fā)軟件特征與策劃。策劃活動(dòng)開(kāi)始于建立健全描述待開(kāi)發(fā)軟件特征與功能需求的功能需求的“故事故事”(也稱(chēng)為用戶(hù)故事)。(也稱(chēng)為用戶(hù)故事)。設(shè)計(jì)。設(shè)計(jì)。XPXP設(shè)計(jì)嚴(yán)格遵循設(shè)計(jì)嚴(yán)格遵循KISKIS(keep it simplekeep it simple,保持簡(jiǎn)保持簡(jiǎn)潔)原則,通常更愿意使用簡(jiǎn)單設(shè)計(jì)而不是更為復(fù)雜的表潔)原則,通常更愿意使用簡(jiǎn)單設(shè)計(jì)而不是更為復(fù)雜的表述。述。編碼。編碼。XPXP推薦在故事開(kāi)發(fā)和基本設(shè)計(jì)完成之后,團(tuán)隊(duì)不推薦在故事開(kāi)發(fā)和基本設(shè)計(jì)完成之后,團(tuán)隊(duì)不應(yīng)直接開(kāi)始編碼,而是開(kāi)發(fā)一系列用于檢測(cè)本次(軟件增應(yīng)直接開(kāi)始編碼,而是開(kāi)發(fā)一系列用于檢測(cè)本次(軟件增量)發(fā)行包括所有故事的單元測(cè)試,一旦建立起單元測(cè)試,量)發(fā)行包括所有故事的單元測(cè)試,一旦建立起單元測(cè)試,開(kāi)發(fā)者就可以更集中精力于必須實(shí)現(xiàn)的內(nèi)容以通過(guò)單元測(cè)開(kāi)發(fā)者就可以更集中精力于必須實(shí)現(xiàn)的內(nèi)容以通過(guò)單元測(cè)試。試。測(cè)試。測(cè)試。10.3 現(xiàn)代軟件過(guò)程模型自適應(yīng)軟件開(kāi)發(fā)自適應(yīng)軟件開(kāi)發(fā) 自適應(yīng)軟件開(kāi)發(fā)(自適應(yīng)軟件開(kāi)發(fā)(adaptive software adaptive software developmentdevelopment,ASDASD)是由)是由Jim HighsmithJim Highsmith提出的;提出的;它可作為構(gòu)建復(fù)雜軟件和系統(tǒng)的一項(xiàng)技術(shù),其基它可作為構(gòu)建復(fù)雜軟件和系統(tǒng)的一項(xiàng)技術(shù),其基本概念著眼于人員合作和團(tuán)隊(duì)自組織。本概念著眼于人員合作和團(tuán)隊(duì)自組織。10.3 現(xiàn)代軟件過(guò)程模型自適應(yīng)軟件開(kāi)發(fā)模型自適應(yīng)軟件開(kāi)發(fā)模型 10.3 現(xiàn)代軟件過(guò)程模型自適應(yīng)軟件開(kāi)發(fā)的階段自適應(yīng)軟件開(kāi)發(fā)的階段 (1)(1)思考:思考過(guò)程中,開(kāi)始項(xiàng)目規(guī)劃并完成自適應(yīng)循環(huán)策思考:思考過(guò)程中,開(kāi)始項(xiàng)目規(guī)劃并完成自適應(yīng)循環(huán)策劃。自適應(yīng)循環(huán)策劃通過(guò)使用項(xiàng)目開(kāi)始信息,來(lái)確定項(xiàng)目劃。自適應(yīng)循環(huán)策劃通過(guò)使用項(xiàng)目開(kāi)始信息,來(lái)確定項(xiàng)目所需的一系列軟件增量發(fā)布循環(huán)。所需的一系列軟件增量發(fā)布循環(huán)。(2)(2)協(xié)作:受激勵(lì)的人員以超越其聰明才智和獨(dú)創(chuàng)成果的方協(xié)作:受激勵(lì)的人員以超越其聰明才智和獨(dú)創(chuàng)成果的方式共同工作,協(xié)作方法是所有敏捷方法中不斷重現(xiàn)的主旋式共同工作,協(xié)作方法是所有敏捷方法中不斷重現(xiàn)的主旋律。律。(3)(3)學(xué)習(xí):當(dāng)學(xué)習(xí):當(dāng)ASDASD團(tuán)隊(duì)成員開(kāi)始開(kāi)發(fā)作為自適應(yīng)循環(huán)一部分的團(tuán)隊(duì)成員開(kāi)始開(kāi)發(fā)作為自適應(yīng)循環(huán)一部分的構(gòu)件時(shí),其重點(diǎn)是在完成循環(huán)的過(guò)程中學(xué)習(xí)盡可能多的東構(gòu)件時(shí),其重點(diǎn)是在完成循環(huán)的過(guò)程中學(xué)習(xí)盡可能多的東西。西。小結(jié)傳統(tǒng)軟件過(guò)程模型確實(shí)給軟件開(kāi)發(fā)帶來(lái)秩序和結(jié)傳統(tǒng)軟件過(guò)程模型確實(shí)給軟件開(kāi)發(fā)帶來(lái)秩序和結(jié)構(gòu)。每一個(gè)傳統(tǒng)模型都實(shí)現(xiàn)了一組通用框架活動(dòng):構(gòu)。每一個(gè)傳統(tǒng)模型都實(shí)現(xiàn)了一組通用框架活動(dòng):溝通、計(jì)劃、建模、構(gòu)建和部署。溝通、計(jì)劃、建模、構(gòu)建和部署。瀑布模型建議框架活動(dòng)的一個(gè)線性流程,這在軟瀑布模型建議框架活動(dòng)的一個(gè)線性流程,這在軟件世界里,通常與當(dāng)代的軟件開(kāi)發(fā)的現(xiàn)實(shí)情況不件世界里,通常與當(dāng)代的軟件開(kāi)發(fā)的現(xiàn)實(shí)情況不符(如持續(xù)的變更、演化的系統(tǒng)、緊迫的開(kāi)發(fā)時(shí)符(如持續(xù)的變更、演化的系統(tǒng)、緊迫的開(kāi)發(fā)時(shí)間)。但瀑布模型確實(shí)適用于需求定義清楚且穩(wěn)間)。但瀑布模型確實(shí)適用于需求定義清楚且穩(wěn)定的軟件開(kāi)發(fā)。定的軟件開(kāi)發(fā)。小結(jié)增量軟件過(guò)程模型通過(guò)一系列的增量發(fā)布產(chǎn)生軟增量軟件過(guò)程模型通過(guò)一系列的增量發(fā)布產(chǎn)生軟件。件。RADRAD模型是為大型且必須在嚴(yán)格的時(shí)間內(nèi)提交模型是為大型且必須在嚴(yán)格的時(shí)間內(nèi)提交的項(xiàng)目而設(shè)計(jì)的。的項(xiàng)目而設(shè)計(jì)的。演化過(guò)程模型認(rèn)識(shí)到大多數(shù)軟件工程項(xiàng)目的迭代演化過(guò)程模型認(rèn)識(shí)到大多數(shù)軟件工程項(xiàng)目的迭代特性,其設(shè)計(jì)的目的是為了適應(yīng)變更。演化模型,特性,其設(shè)計(jì)的目的是為了適應(yīng)變更。演化模型,如原型及螺旋模型,快速地產(chǎn)生增量的工作產(chǎn)品。如原型及螺旋模型,快速地產(chǎn)生增量的工作產(chǎn)品。這些模型可以應(yīng)用于所有的軟件工程活動(dòng)這些模型可以應(yīng)用于所有的軟件工程活動(dòng)從從概念開(kāi)發(fā)到長(zhǎng)期的軟件維護(hù)。概念開(kāi)發(fā)到長(zhǎng)期的軟件維護(hù)。小結(jié)基于構(gòu)件的模型強(qiáng)調(diào)構(gòu)件重用及組裝。形式化方基于構(gòu)件的模型強(qiáng)調(diào)構(gòu)件重用及組裝。形式化方法模型提倡采用數(shù)學(xué)的方法進(jìn)行軟件開(kāi)發(fā)和驗(yàn)證。法模型提倡采用數(shù)學(xué)的方法進(jìn)行軟件開(kāi)發(fā)和驗(yàn)證。面向方面的模型目的是解決跨越整個(gè)軟件體系架面向方面的模型目的是解決跨越整個(gè)軟件體系架構(gòu)的橫切關(guān)注。構(gòu)的橫切關(guān)注。統(tǒng)一過(guò)程模型是一種統(tǒng)一過(guò)程模型是一種“用例驅(qū)動(dòng)、以體系結(jié)構(gòu)為用例驅(qū)動(dòng)、以體系結(jié)構(gòu)為核心、迭代及增量核心、迭代及增量”的軟件過(guò)程框架,由的軟件過(guò)程框架,由UMLUML方法方法和工具支持。和工具支持。11.1 軟件體系結(jié)構(gòu)的基本概念什么是體系結(jié)構(gòu)什么是體系結(jié)構(gòu)目前還沒(méi)有一個(gè)公認(rèn)的關(guān)于軟件體系結(jié)構(gòu)的定義,許多專(zhuān)家目前還沒(méi)有一個(gè)公認(rèn)的關(guān)于軟件體系結(jié)構(gòu)的定義,許多專(zhuān)家學(xué)者從不同角度對(duì)軟件體系結(jié)構(gòu)進(jìn)行了描述。學(xué)者從不同角度對(duì)軟件體系結(jié)構(gòu)進(jìn)行了描述。Bass、Clements和和Kazman給出了如下定義:給出了如下定義:“一個(gè)程序或計(jì)算機(jī)一個(gè)程序或計(jì)算機(jī)系統(tǒng)的軟件體系結(jié)構(gòu)是指系統(tǒng)的軟件體系結(jié)構(gòu)是指系統(tǒng)的一個(gè)或者多個(gè)結(jié)構(gòu)。結(jié)構(gòu)中系統(tǒng)的一個(gè)或者多個(gè)結(jié)構(gòu)。結(jié)構(gòu)中包括軟件的構(gòu)件、構(gòu)件的外部可見(jiàn)屬性以及它們之間的相互包括軟件的構(gòu)件、構(gòu)件的外部可見(jiàn)屬性以及它們之間的相互關(guān)系。外部可見(jiàn)屬性則是指軟件構(gòu)件提供的服務(wù)、性能、使關(guān)系。外部可見(jiàn)屬性則是指軟件構(gòu)件提供的服務(wù)、性能、使用特性、錯(cuò)誤處理、共享資源使用等用特性、錯(cuò)誤處理、共享資源使用等?!边@一定義強(qiáng)調(diào)在任一體系結(jié)構(gòu)表述中這一定義強(qiáng)調(diào)在任一體系結(jié)構(gòu)表述中“軟件構(gòu)件軟件構(gòu)件”的角色。的角色。DewaynePerry和和A1exanderWo1f曾這樣定義:曾這樣定義:“軟軟件件體系結(jié)構(gòu)是具有一定形式的結(jié)構(gòu)化元素,即構(gòu)件的集合,包體系結(jié)構(gòu)是具有一定形式的結(jié)構(gòu)化元素,即構(gòu)件的集合,包括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。處理構(gòu)件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)括處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。處理構(gòu)件負(fù)責(zé)對(duì)數(shù)據(jù)進(jìn)行加工,數(shù)據(jù)構(gòu)件是被加工的信息,連接構(gòu)件把體系結(jié)構(gòu)的行加工,數(shù)據(jù)構(gòu)件是被加工的信息,連接構(gòu)件把體系結(jié)構(gòu)的不同部分組合連接起來(lái)。不同部分組合連接起來(lái)。”這一定義注重區(qū)分處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。這一定義注重區(qū)分處理構(gòu)件、數(shù)據(jù)構(gòu)件和連接構(gòu)件。雖然軟件體系結(jié)構(gòu)的定義在變化,但其意圖是清晰的。雖然軟件體系結(jié)構(gòu)的定義在變化,但其意圖是清晰的。體系結(jié)構(gòu)設(shè)計(jì)是一系列體系結(jié)構(gòu)設(shè)計(jì)是一系列決策和基本原理的集合決策和基本原理的集合,這些決策的,這些決策的目標(biāo)在于開(kāi)發(fā)高效的軟件體系結(jié)構(gòu)。在體系結(jié)構(gòu)設(shè)計(jì)中所強(qiáng)目標(biāo)在于開(kāi)發(fā)高效的軟件體系結(jié)構(gòu)。在體系結(jié)構(gòu)設(shè)計(jì)中所強(qiáng)調(diào)的基本原理是系統(tǒng)的可理解性、可維護(hù)性和可擴(kuò)展性。調(diào)的基本原理是系統(tǒng)的可理解性、可維護(hù)性和可擴(kuò)展性。11.1 軟件體系結(jié)構(gòu)的基本概念1模式模式軟件設(shè)計(jì)模式是從軟件設(shè)計(jì)過(guò)程中總結(jié)出來(lái)的,是針對(duì)軟件設(shè)計(jì)模式是從軟件設(shè)計(jì)過(guò)程中總結(jié)出來(lái)的,是針對(duì)特定問(wèn)題的解決方案。建筑師特定問(wèn)題的解決方案。建筑師C.Alexander對(duì)模式給出的對(duì)模式給出的經(jīng)典定義是:經(jīng)典定義是:每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷每個(gè)模式都描述了一個(gè)在我們的環(huán)境中不斷出現(xiàn)的問(wèn)題及該問(wèn)題解決方案的核心出現(xiàn)的問(wèn)題及該問(wèn)題解決方案的核心。在軟件系統(tǒng)中,可。在軟件系統(tǒng)中,可以將模式劃分為以下以將模式劃分為以下3類(lèi)。類(lèi)。(1)體系結(jié)構(gòu)模式體系結(jié)構(gòu)模式(architecturalpattern):表達(dá)了軟):表達(dá)了軟件系統(tǒng)的基本結(jié)構(gòu)組織形式或者結(jié)構(gòu)方案,包含了一組預(yù)件系統(tǒng)的基本結(jié)構(gòu)組織形式或者結(jié)構(gòu)方案,包含了一組預(yù)定義的子系統(tǒng),規(guī)定了這些子系統(tǒng)的責(zé)任,同時(shí)還提供了定義的子系統(tǒng),規(guī)定了這些子系統(tǒng)的責(zé)任,同時(shí)還提供了用于組織和管理這些子系統(tǒng)的規(guī)則和向?qū)А5湫偷捏w系結(jié)用于組織和管理這些子系統(tǒng)的規(guī)則和向?qū)?。典型的體系結(jié)構(gòu)模式如構(gòu)模式如OSI參考模型參考模型。11.1 軟件體系結(jié)構(gòu)的基本概念體系結(jié)構(gòu)模式、風(fēng)格和框架的概念體系結(jié)構(gòu)模式、風(fēng)格和框架的概念(2)設(shè)計(jì)模式設(shè)計(jì)模式(designpattern):為軟件系統(tǒng)的子系):為軟件系統(tǒng)的子系統(tǒng)、構(gòu)件或者構(gòu)件之間的關(guān)系提供一個(gè)精煉之后的解決方統(tǒng)、構(gòu)件或者構(gòu)件之間的關(guān)系提供一個(gè)精煉之后的解決方案,描述了在特定環(huán)境下,用于解決通用軟件設(shè)計(jì)問(wèn)題的案,描述了在特定環(huán)境下,用于解決通用軟件設(shè)計(jì)問(wèn)題的構(gòu)件以及這些構(gòu)件相互通信時(shí)的各種結(jié)構(gòu)。有代表性的設(shè)構(gòu)件以及這些構(gòu)件相互通信時(shí)的各種結(jié)構(gòu)。有代表性的設(shè)計(jì)模式是計(jì)模式是ErichGamma及其同事提出的及其同事提出的23種設(shè)計(jì)模式種設(shè)計(jì)模式。(3)慣用法慣用法(idiom):是與編程語(yǔ)言相關(guān)的低級(jí)模式,):是與編程語(yǔ)言相關(guān)的低級(jí)模式,描述如何實(shí)現(xiàn)構(gòu)件的某些功能,或者利用編程語(yǔ)言的特性描述如何實(shí)現(xiàn)構(gòu)件的某些功能,或者利用編程語(yǔ)言的特性來(lái)實(shí)現(xiàn)構(gòu)件內(nèi)部要素之間的通信功能。來(lái)實(shí)現(xiàn)構(gòu)件內(nèi)部要素之間的通信功能。11.1 軟件體系結(jié)構(gòu)的基本概念2風(fēng)格風(fēng)格風(fēng)格是帶有一種傾向性的模式。同一個(gè)問(wèn)題可以有不同風(fēng)格是帶有一種傾向性的模式。同一個(gè)問(wèn)題可以有不同的解決問(wèn)題的方案或模式,但我們根據(jù)經(jīng)驗(yàn),通常會(huì)強(qiáng)烈的解決問(wèn)題的方案或模式,但我們根據(jù)經(jīng)驗(yàn),通常會(huì)強(qiáng)烈傾向于采用特定的模式,這就是風(fēng)格。傾向于采用特定的模式,這就是風(fēng)格。每種風(fēng)格描述每種風(fēng)格描述一種系統(tǒng)范疇一種系統(tǒng)范疇,該范疇包括:,該范疇包括:(1)一組構(gòu)件一組構(gòu)件(如數(shù)據(jù)庫(kù)、計(jì)算模塊)完成系統(tǒng)需要的某(如數(shù)據(jù)庫(kù)、計(jì)算模塊)完成系統(tǒng)需要的某種功能;種功能;(2)一組連接件一組連接件,它們能使構(gòu)件間實(shí)現(xiàn),它們能使構(gòu)件間實(shí)現(xiàn)“通信通信”、“合作合作”和和“協(xié)調(diào)協(xié)調(diào)”;(3)約束約束,定義構(gòu)件如何集成為一個(gè)系統(tǒng);,定義構(gòu)件如何集成為一個(gè)系統(tǒng);(4)語(yǔ)義模型語(yǔ)義模型,它能使設(shè)計(jì)者通過(guò)分析系統(tǒng)的構(gòu)成成分的,它能使設(shè)計(jì)者通過(guò)分析系統(tǒng)的構(gòu)成成分的性質(zhì)來(lái)理解系統(tǒng)的整體性質(zhì)。性質(zhì)來(lái)理解系統(tǒng)的整體性質(zhì)。11.1 軟件體系結(jié)構(gòu)的基本概念體系結(jié)構(gòu)風(fēng)格定義了一個(gè)系統(tǒng)家族,即體系結(jié)構(gòu)風(fēng)格定義了一個(gè)系統(tǒng)家族,即一個(gè)體系結(jié)構(gòu)定一個(gè)體系結(jié)構(gòu)定義一個(gè)詞匯表和一組約束義一個(gè)詞匯表和一組約束。詞匯表中包含一些構(gòu)件和連接。詞匯表中包含一些構(gòu)件和連接件類(lèi)型,而這組約束指出系統(tǒng)是如何將這些構(gòu)件和連接件件類(lèi)型,而這組約束指出系統(tǒng)是如何將這些構(gòu)件和連接件組合起來(lái)的。體系結(jié)構(gòu)風(fēng)格反映了領(lǐng)域中眾多系統(tǒng)所共有組合起來(lái)的。體系結(jié)構(gòu)風(fēng)格反映了領(lǐng)域中眾多系統(tǒng)所共有的結(jié)構(gòu)和語(yǔ)義特性,并指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效的結(jié)構(gòu)和語(yǔ)義特性,并指導(dǎo)如何將各個(gè)模塊和子系統(tǒng)有效地組織成一個(gè)完整的系統(tǒng)。地組織成一個(gè)完整的系統(tǒng)。對(duì)體系結(jié)構(gòu)風(fēng)格的研究和實(shí)踐為大粒度的軟件復(fù)用提供對(duì)體系結(jié)構(gòu)風(fēng)格的研究和實(shí)踐為大粒度的軟件復(fù)用提供了可能。了可能。11.1 軟件測(cè)試的基本概念11.1 軟件測(cè)試的基本概念3框架框架隨著應(yīng)用的發(fā)展和完善,某些帶有整體性的應(yīng)用模式被隨著應(yīng)用的發(fā)展和完善,某些帶有整體性的應(yīng)用模式被逐漸固定下來(lái),形成特定的框架,包括逐漸固定下來(lái),形成特定的框架,包括基本構(gòu)成元素基本構(gòu)成元素和和關(guān)關(guān)系系??蚣芸蚣苁翘囟☉?yīng)用領(lǐng)域問(wèn)題的體系結(jié)構(gòu)模式,框架定義是特定應(yīng)用領(lǐng)域問(wèn)題的體系結(jié)構(gòu)模式,框架定義了基本構(gòu)成單元和關(guān)系后,開(kāi)發(fā)者就可以集中精力解決業(yè)了基本構(gòu)成單元和關(guān)系后,開(kāi)發(fā)者就可以集中精力解決業(yè)務(wù)邏輯問(wèn)題。務(wù)邏輯問(wèn)題。在組織形式上,框架是一個(gè)待實(shí)例化的完整系統(tǒng),定義在組織形式上,框架是一個(gè)待實(shí)例化的完整系統(tǒng),定義了軟件系統(tǒng)的元素和關(guān)系,創(chuàng)建了基本的模塊,定義了涉了軟件系統(tǒng)的元素和關(guān)系,創(chuàng)建了基本的模塊,定義了涉及功能更改和擴(kuò)充的插件位置。典型的框架例子有及功能更改和擴(kuò)充的插件位置。典型的框架例子有MFC框框架架和和Struts框架框架。體系結(jié)構(gòu)的重要作用體現(xiàn)在以下三個(gè)方面體系結(jié)構(gòu)的重要作用體現(xiàn)在以下三個(gè)方面:(1)體系結(jié)構(gòu)的表示有助于風(fēng)險(xiǎn)承擔(dān)者(項(xiàng)目干系)體系結(jié)構(gòu)的表示有助于風(fēng)險(xiǎn)承擔(dān)者(項(xiàng)目干系人)進(jìn)行交流。人)進(jìn)行交流。(2)體系結(jié)構(gòu)突出了早期設(shè)計(jì)決策。)體系結(jié)構(gòu)突出了早期設(shè)計(jì)決策。(3)軟件體系結(jié)構(gòu)是可傳遞和可復(fù)用的模型。)軟件體系結(jié)構(gòu)是可傳遞和可復(fù)用的模型。11.1 軟件測(cè)試的基本概念體系結(jié)構(gòu)的重要作用體系結(jié)構(gòu)的重要作用當(dāng)輸入數(shù)據(jù)經(jīng)過(guò)一系列的計(jì)算和操作構(gòu)件的變換形成輸出當(dāng)輸入數(shù)據(jù)經(jīng)過(guò)一系列的計(jì)算和操作構(gòu)件的變換形成輸出數(shù)據(jù)時(shí),可以應(yīng)用這種體系結(jié)構(gòu)。數(shù)據(jù)時(shí),可以應(yīng)用這種體系結(jié)構(gòu)。管道管道/過(guò)濾器過(guò)濾器、批處理序批處理序列列都屬于數(shù)據(jù)流風(fēng)格。都屬于數(shù)據(jù)流風(fēng)格。管道管道/過(guò)濾器結(jié)構(gòu)如下圖所示。過(guò)濾器結(jié)構(gòu)如下圖所示。11.2 典型的體系結(jié)構(gòu)風(fēng)格數(shù)據(jù)流風(fēng)格數(shù)據(jù)流風(fēng)格管道管道/過(guò)濾器結(jié)構(gòu)過(guò)濾器結(jié)構(gòu) 從從上上圖圖可可看看出出,管管道道/過(guò)過(guò)濾濾器器結(jié)結(jié)構(gòu)構(gòu)擁?yè)碛杏幸灰唤M組被被稱(chēng)稱(chēng)為為過(guò)過(guò)濾濾器器(filter)的的構(gòu)構(gòu)件件,這這些些構(gòu)構(gòu)件件通通過(guò)過(guò)管管道道(pipe)連連接接,管管道道將將數(shù)數(shù)據(jù)據(jù)從從一一個(gè)個(gè)構(gòu)構(gòu)件件傳傳送送到到下下一一個(gè)個(gè)構(gòu)構(gòu)件件。每每個(gè)個(gè)過(guò)過(guò)濾濾器器獨(dú)獨(dú)立立于于其其上上游游和和下下游游的的構(gòu)構(gòu)件件而而工工作作,過(guò)過(guò)濾濾器器的的設(shè)設(shè)計(jì)計(jì)要要針針對(duì)對(duì)某某種種形式的數(shù)據(jù)輸入,并且產(chǎn)生某種特定形式的數(shù)據(jù)輸出。形式的數(shù)據(jù)輸入,并且產(chǎn)生某種特定形式的數(shù)據(jù)輸出。如如果果數(shù)數(shù)據(jù)據(jù)流流退退化化成成為為單單線線的的變變換換,則則稱(chēng)稱(chēng)為為批批處處理理序序列列(batchsequential)。這這種種結(jié)結(jié)構(gòu)構(gòu)接接收收一一批批數(shù)數(shù)據(jù)據(jù),然然后后應(yīng)應(yīng)用用一系列連續(xù)的構(gòu)件(過(guò)濾器)變換它。一系列連續(xù)的構(gòu)件(過(guò)濾器)變換它。11.2 典型的體系結(jié)構(gòu)風(fēng)格管道管道/過(guò)濾器風(fēng)格具有以下過(guò)濾器風(fēng)格具有以下優(yōu)點(diǎn)優(yōu)點(diǎn):(1 1)使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特)使得軟構(gòu)件具有良好的隱蔽性和高內(nèi)聚、低耦合的特 點(diǎn)。點(diǎn)。(2 2)允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入)允許設(shè)計(jì)者將整個(gè)系統(tǒng)的輸入/輸出行為看成是多個(gè)過(guò)輸出行為看成是多個(gè)過(guò) 濾器的行為的簡(jiǎn)單合成。濾器的行為的簡(jiǎn)單合成。(3 3)支持軟件復(fù)用。只要提供適合在兩個(gè)過(guò)濾器之間傳送)支持軟件復(fù)用。只要提供適合在兩個(gè)過(guò)濾器之間傳送 的數(shù)據(jù),任何兩個(gè)過(guò)濾器都可被連接起來(lái)。的數(shù)據(jù),任何兩個(gè)過(guò)濾器都可被連接起來(lái)。(4 4)系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡(jiǎn)單。新的過(guò)濾器可以添加)系統(tǒng)維護(hù)和增強(qiáng)系統(tǒng)性能簡(jiǎn)單。新的過(guò)濾器可以添加 到現(xiàn)有系統(tǒng)中來(lái);舊的可以被改進(jìn)的過(guò)濾器替換掉。到現(xiàn)有系統(tǒng)中來(lái);舊的可以被改進(jìn)的過(guò)濾器替換掉。(5 5)允許對(duì)一些如吞吐量、死鎖等屬性的分析。)允許對(duì)一些如吞吐量、死鎖等屬性的分析。(6 6)支持并行執(zhí)行。每個(gè)過(guò)濾器是作為一個(gè)單獨(dú)的任務(wù)完)支持并行執(zhí)行。每個(gè)過(guò)濾器是作為一個(gè)單獨(dú)的任務(wù)完 成,因此可與其他任務(wù)并行執(zhí)行。成,因此可與其他任務(wù)并行執(zhí)行。11.2 典型的體系結(jié)構(gòu)風(fēng)格管道管道/過(guò)濾器風(fēng)格主要過(guò)濾器風(fēng)格主要缺點(diǎn)缺點(diǎn)如下:如下:(1)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因?yàn)殡m然過(guò)濾)通常導(dǎo)致進(jìn)程成為批處理的結(jié)構(gòu)。這是因?yàn)殡m然過(guò)濾器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須器可增量式地處理數(shù)據(jù),但它們是獨(dú)立的,所以設(shè)計(jì)者必須將每個(gè)過(guò)濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換。將每個(gè)過(guò)濾器看成一個(gè)完整的從輸入到輸出的轉(zhuǎn)換。(2)不適合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時(shí),)不適合處理交互的應(yīng)用。當(dāng)需要增量地顯示改變時(shí),這個(gè)問(wèn)題尤為嚴(yán)重。這個(gè)問(wèn)題尤為嚴(yán)重。(3)因?yàn)樵跀?shù)據(jù)傳輸上沒(méi)有通用的標(biāo)準(zhǔn),每個(gè)過(guò)濾器都增)因?yàn)樵跀?shù)據(jù)傳輸上沒(méi)有通用的標(biāo)準(zhǔn),每個(gè)過(guò)濾器都增加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,加了解析和合成數(shù)據(jù)的工作,這樣就導(dǎo)致了系統(tǒng)性能下降,并增加了編寫(xiě)過(guò)濾器的復(fù)雜性。并增加了編寫(xiě)過(guò)濾器的復(fù)雜性。11.2 典型的體系結(jié)構(gòu)風(fēng)格在此類(lèi)體系結(jié)構(gòu)中,存在以下在此類(lèi)體系結(jié)構(gòu)中,存在以下3種子風(fēng)格。種子風(fēng)格。1主程序主程序/子程序體系結(jié)構(gòu)子程序體系結(jié)構(gòu)這種傳統(tǒng)的程序結(jié)構(gòu)將功能分解為一個(gè)控制層次,其這種傳統(tǒng)的程序結(jié)構(gòu)將功能分解為一個(gè)控制層次,其中中“主主”程序調(diào)用一組程序構(gòu)件,這些程序構(gòu)件又去調(diào)用程序調(diào)用一組程序構(gòu)件,這些程序構(gòu)件又去調(diào)用別別的程序構(gòu)件,如下圖所示。這種結(jié)構(gòu)總體上為樹(shù)狀結(jié)的程序構(gòu)件,如下圖所示。這種結(jié)構(gòu)總體上為樹(shù)狀結(jié)構(gòu),可以在底層存在公共模塊。構(gòu),可以在底層存在公共模塊。11.2 典型的體系結(jié)構(gòu)風(fēng)格調(diào)用調(diào)用返回風(fēng)格返回風(fēng)格主程序主程序/子程序體系結(jié)構(gòu)的子程序體系結(jié)構(gòu)的優(yōu)點(diǎn)優(yōu)點(diǎn)如下如下:(1)可以使用自頂向下,逐步分解的方法得到體系結(jié)構(gòu))可以使用自頂向下,逐步分解的方法得到體系結(jié)構(gòu)圖,典型的拓?fù)浣Y(jié)構(gòu)為樹(shù)狀結(jié)構(gòu)?;诙x圖,典型的拓?fù)浣Y(jié)構(gòu)為樹(shù)狀結(jié)構(gòu)?;诙x使用關(guān)系對(duì)子使用關(guān)系對(duì)子程序進(jìn)行分解,使用過(guò)程調(diào)用作為程序之間的交互機(jī)制。程序進(jìn)行分解,使用過(guò)程調(diào)用作為程序之間的交互機(jī)制。(2)采用程序設(shè)計(jì)語(yǔ)言支持的單線程控制。)采用程序設(shè)計(jì)語(yǔ)言支持的單線程控制。其主要其主要缺點(diǎn)缺點(diǎn)如下如下:(3)子程序的正確性難于判斷。需要運(yùn)用層次推理來(lái)判斷)子程序的正確性難于判斷。需要運(yùn)用層次推理來(lái)判斷子程序的正確性,因?yàn)樽映绦虻恼_性取決于它調(diào)用的子程子程序的正確性,因?yàn)樽映绦虻恼_性取決于它調(diào)用的子程序的正確性。序的正確性。(4)子系統(tǒng)的結(jié)構(gòu)不清晰。通??梢詫⒍鄠€(gè)子程序合成為)子系統(tǒng)的結(jié)構(gòu)不清晰。通??梢詫⒍鄠€(gè)子程序合成為模塊。模塊。11.2 典型的體系結(jié)構(gòu)風(fēng)格2面向?qū)ο箫L(fēng)格面向?qū)ο箫L(fēng)格系統(tǒng)的構(gòu)件封裝了數(shù)據(jù)和必須應(yīng)用到該數(shù)據(jù)上的操系統(tǒng)的構(gòu)件封裝了數(shù)據(jù)和必須應(yīng)用到該數(shù)據(jù)上的操作,構(gòu)件間通過(guò)消息傳遞進(jìn)行通信與合作。與主程序作,構(gòu)件間通過(guò)消息傳遞進(jìn)行通信與合作。與主程序/子程子程序的體系結(jié)構(gòu)相比,面向?qū)ο箫L(fēng)格中的對(duì)象交互會(huì)復(fù)雜一序的體系結(jié)構(gòu)相比,面向?qū)ο箫L(fēng)格中的對(duì)象交互會(huì)復(fù)雜一些。面向?qū)ο箫L(fēng)格與網(wǎng)絡(luò)應(yīng)用的需求在分布性、自治性、些。面向?qū)ο箫L(fēng)格與網(wǎng)絡(luò)應(yīng)用的需求在分布性、自治性、協(xié)作性、演化性等方面具有內(nèi)在的一致性。協(xié)作性、演化性等方面具有內(nèi)在的一致性。面向?qū)ο箫L(fēng)格具有以下面向?qū)ο箫L(fēng)格具有以下優(yōu)點(diǎn)優(yōu)點(diǎn):(1 1)因?yàn)閷?duì)象對(duì)其他對(duì)象隱藏它的表示,所以可以改變一)因?yàn)閷?duì)象對(duì)其他對(duì)象隱藏它的表示,所以可以改變一 個(gè)對(duì)象的表示,而不影響其他對(duì)象。個(gè)對(duì)象的表示,而不影響其他對(duì)象。(2 2)設(shè)計(jì)者可將一些數(shù)據(jù)存取操作的問(wèn)題分解成一些交互)設(shè)計(jì)者可將一些數(shù)據(jù)存取操作的問(wèn)題分解成一些交互 的代理程序的集合。的代理程序的集合。11.2 典型的體系結(jié)構(gòu)風(fēng)格其其缺點(diǎn)缺點(diǎn)如下如下:(1)為了使一個(gè)對(duì)象和另一個(gè)對(duì)象通過(guò)過(guò)程調(diào)用等進(jìn)行)為了使一個(gè)對(duì)象和另一個(gè)對(duì)象通過(guò)過(guò)程調(diào)用等進(jìn)行交互,必須知道對(duì)象的標(biāo)識(shí)。只要一個(gè)對(duì)象的標(biāo)識(shí)交互,必須知道對(duì)象的標(biāo)識(shí)。只要一個(gè)對(duì)象的標(biāo)識(shí)改變了,就必須修改所有其他明確調(diào)用它的對(duì)象。改變了,就必須修改所有其他明確調(diào)用它的對(duì)象。(2)必須修改所有顯式調(diào)用它的其他對(duì)象,并消除由此)必須修改所有顯式調(diào)用它的其他對(duì)象,并消除由此帶來(lái)的一些副作用。例如,如果帶來(lái)的一些副作用。例如,如果A使用了對(duì)象使用了對(duì)象B,C也使用了對(duì)象也使用了對(duì)象B,那么,那么,C對(duì)對(duì)B的使用所造成的對(duì)的使用所造成的對(duì)A的影響可能是料想不到的。的影響可能是料想不到的。11.2 典型的體系結(jié)構(gòu)風(fēng)格3層次結(jié)構(gòu)層次結(jié)構(gòu)層次結(jié)構(gòu)的基本結(jié)構(gòu)如下圖所示。在這種體系結(jié)構(gòu)中,整層次結(jié)構(gòu)的基本結(jié)構(gòu)如下圖所示。在這種體系結(jié)構(gòu)中,整個(gè)系統(tǒng)被組織成一個(gè)分層結(jié)構(gòu),每一層為上層提供服務(wù),并個(gè)系統(tǒng)被組織成一個(gè)分層結(jié)構(gòu),每一層為上層提供服務(wù),并作為下一層的客戶(hù)。作為下一層的客戶(hù)。11.2 典型的體系結(jié)構(gòu)風(fēng)格這種風(fēng)格支持基于可增加抽象層的設(shè)計(jì)。允許將復(fù)雜問(wèn)這種風(fēng)格支持基于可增加抽象層的設(shè)計(jì)。允許將復(fù)雜問(wèn)題分解成一個(gè)增量步驟序列的實(shí)現(xiàn)。由于每一層最多只影響題分解成一個(gè)增量步驟序列的實(shí)現(xiàn)。由于每一層最多只影響兩層,同時(shí)只要給相鄰層提供相同的接口,允許每層用不同兩層,同時(shí)只要給相鄰層提供相同的接口,允許每層用不同的方法實(shí)現(xiàn),同樣為軟件復(fù)用提供了強(qiáng)大的支持。的方法實(shí)現(xiàn),同樣為軟件復(fù)用提供了強(qiáng)大的支持。層次結(jié)構(gòu)具有以下層次結(jié)構(gòu)具有以下優(yōu)點(diǎn)優(yōu)點(diǎn):(1)支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),使設(shè)計(jì)者可以把)支持基于抽象程度遞增的系統(tǒng)設(shè)計(jì),使設(shè)計(jì)者可以把一個(gè)復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解。一個(gè)復(fù)雜系統(tǒng)按遞增的步驟進(jìn)行分解。(2)支持功能增強(qiáng),因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏唬┲С止δ茉鰪?qiáng),因?yàn)槊恳粚又炼嗪拖噜彽纳舷聦咏换ィ虼?,功能的改變最多影響相鄰的?nèi)外層?;ィ虼?,功能的改變最多影響相鄰的內(nèi)外層。11.2 典型的體系結(jié)構(gòu)風(fēng)格(3)支持復(fù)用。只要提供的服務(wù)接口定義不變,同一層的)支持復(fù)用。只要提供的服務(wù)接口定義不變,同一層的不同實(shí)現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)不同實(shí)現(xiàn)可以交換使用。這樣,就可以定義一組標(biāo)準(zhǔn)的接口,從而允許各種不同的實(shí)現(xiàn)方法。的接口,從而允許各種不同的實(shí)現(xiàn)方法。其其缺點(diǎn)缺點(diǎn)如下如下:(1)并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,)并不是每個(gè)系統(tǒng)都可以很容易地劃分為分層的模式,甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對(duì)系甚至即使一個(gè)系統(tǒng)的邏輯結(jié)構(gòu)是層次化的,出于對(duì)系統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級(jí)或高級(jí)統(tǒng)性能的考慮,系統(tǒng)設(shè)計(jì)師不得不把一些低級(jí)或高級(jí)的功能綜合起來(lái)。的功能綜合起來(lái)。(2)很難找到一個(gè)合適的、正確的層次抽象方法。)很難找到一個(gè)合適的、正確的層次抽象方法。11.2 典型的體系結(jié)構(gòu)風(fēng)格數(shù)據(jù)庫(kù)系統(tǒng)數(shù)據(jù)庫(kù)系統(tǒng)、超文本系統(tǒng)超文本系統(tǒng)和和黑板系統(tǒng)黑板系統(tǒng)都屬于倉(cāng)庫(kù)風(fēng)都屬于倉(cāng)庫(kù)風(fēng)格。在這種風(fēng)格中,數(shù)據(jù)格。在這種風(fēng)格中,數(shù)據(jù)倉(cāng)庫(kù)(如文件或數(shù)據(jù)庫(kù))倉(cāng)庫(kù)(如文件或數(shù)據(jù)庫(kù))位于這種體系結(jié)構(gòu)的中心,位于這種體系結(jié)構(gòu)的中心,其他構(gòu)件會(huì)經(jīng)常訪問(wèn)該數(shù)其他構(gòu)件會(huì)經(jīng)常訪問(wèn)該數(shù)據(jù)倉(cāng)庫(kù),并對(duì)倉(cāng)庫(kù)中的數(shù)據(jù)倉(cāng)庫(kù),并對(duì)倉(cāng)庫(kù)中的數(shù)據(jù)進(jìn)行增加、修改或刪除據(jù)進(jìn)行增加、修改或刪除操作。右圖為一個(gè)典型的操作。右圖為一個(gè)典型的倉(cāng)庫(kù)風(fēng)格的體系結(jié)構(gòu)。倉(cāng)庫(kù)風(fēng)格的體系結(jié)構(gòu)。11.2 典型的體系結(jié)構(gòu)風(fēng)格倉(cāng)庫(kù)風(fēng)格倉(cāng)庫(kù)風(fēng)格上圖中上圖中,可把中心存儲(chǔ)庫(kù)變換成可把中心存儲(chǔ)庫(kù)變換成“黑板黑板”,黑板構(gòu)件負(fù)責(zé),黑板構(gòu)件負(fù)責(zé)協(xié)協(xié)調(diào)信息在客戶(hù)間的傳遞,當(dāng)用戶(hù)感興趣的數(shù)據(jù)發(fā)生變化時(shí),調(diào)信息在客戶(hù)間的傳遞,當(dāng)用戶(hù)感興趣的數(shù)據(jù)發(fā)生變化時(shí),它將通知客戶(hù)軟件。黑板系統(tǒng)的組成如下圖所示。黑板系統(tǒng)它將通知客戶(hù)軟件。黑板系統(tǒng)的組成如下圖所示。黑板系統(tǒng)的傳統(tǒng)應(yīng)用是信號(hào)處理領(lǐng)域,如語(yǔ)音和模式識(shí)別。另一應(yīng)用的傳統(tǒng)應(yīng)用是信號(hào)處理領(lǐng)域,如語(yǔ)音和模式識(shí)別。另一應(yīng)用是松耦合代理數(shù)據(jù)共享存取。是松耦合代理數(shù)據(jù)共享存取。11.2 典型的體系結(jié)構(gòu)風(fēng)格以上所講的體系結(jié)構(gòu)模型是通用的模型,除了這些通用的以上所講的體系結(jié)構(gòu)模型是通用的模型,除了這些通用的模型以外,對(duì)于特定的應(yīng)用還需要特定的體系結(jié)構(gòu)模型。這模型以外,對(duì)于特定的應(yīng)用還需要特定的體系結(jié)構(gòu)模型。這些體系結(jié)構(gòu)模型稱(chēng)為些體系結(jié)構(gòu)模型稱(chēng)為領(lǐng)域相關(guān)的體系結(jié)構(gòu)領(lǐng)域相關(guān)的體系結(jié)構(gòu)。有兩種領(lǐng)域相關(guān)。有兩種領(lǐng)域相關(guān)的體系結(jié)構(gòu)模型:的體系結(jié)構(gòu)模型:類(lèi)屬模型類(lèi)屬模型(genericmodel)和)和參考模型參考模型(referencemodel)。)。11.3 特定領(lǐng)域的軟件體系結(jié)構(gòu) 類(lèi)屬模型類(lèi)屬模型類(lèi)屬模型是從許多實(shí)際系統(tǒng)中抽象出來(lái)的一般模型,它封類(lèi)屬模型是從許多實(shí)際系統(tǒng)中抽象出來(lái)的一般模型,它封裝了這些系統(tǒng)的主要特征。例如,許多圖書(shū)館開(kāi)發(fā)了自己的裝了這些系統(tǒng)的主要特征。例如,許多圖書(shū)館開(kāi)發(fā)了自己的圖書(shū)館館藏圖書(shū)館館藏/流通系統(tǒng),若把它們的共同功能抽取出來(lái)并創(chuàng)建流通系統(tǒng),若把它們的共同功能抽取出來(lái)并創(chuàng)建一個(gè)讓所有圖書(shū)館都認(rèn)可的系統(tǒng)體系結(jié)構(gòu)模型,這就是類(lèi)屬一個(gè)讓所有圖書(shū)館都認(rèn)可的系統(tǒng)體系結(jié)構(gòu)模型,這就是類(lèi)屬模型。類(lèi)屬模型的一個(gè)最著名的例子是模型。類(lèi)屬模型的一個(gè)最著名的例子是編譯器模型編譯器模型,由這個(gè),由這個(gè)模型已開(kāi)發(fā)出了數(shù)以千計(jì)的編譯器。模型已開(kāi)發(fā)出了數(shù)以千計(jì)的編譯器。參考模型源于對(duì)應(yīng)用領(lǐng)域的研究,它參考模型源于對(duì)應(yīng)用領(lǐng)域的研究,它描述了一個(gè)理想化的包含描述了一個(gè)理想化的包含了系統(tǒng)應(yīng)具有的所有特征的軟件體系結(jié)構(gòu)了系統(tǒng)應(yīng)具有的所有特征的軟件體系結(jié)構(gòu)。它是更抽象且是描述。它是更抽象且是描述一大類(lèi)系統(tǒng)的模型,并且也是對(duì)設(shè)計(jì)者有關(guān)某類(lèi)系統(tǒng)的一般結(jié)構(gòu)一大類(lèi)系統(tǒng)的模型,并且也是對(duì)設(shè)計(jì)者有關(guān)某類(lèi)系統(tǒng)的一般結(jié)構(gòu)的指導(dǎo),如的指導(dǎo),如Rockwell和和Gera所提出的所提出的軟件工廠參考模型軟件工廠參考模型。以上兩種不同類(lèi)型的模型之間并不存在嚴(yán)格的區(qū)別,也可以將以上兩種不同類(lèi)型的模型之間并不存在嚴(yán)格的區(qū)別,也可以將類(lèi)屬模型視為參考模型。區(qū)別之一是類(lèi)屬模型可以直接在設(shè)計(jì)中類(lèi)屬模型視為參考模型。區(qū)別之一是類(lèi)屬模型可以直接在設(shè)計(jì)中復(fù)用,而參考模型一般是用于領(lǐng)域概念間的交流和對(duì)可能的體系復(fù)用,而參考模型一般是用于領(lǐng)域概念間的交流和對(duì)可能的體系結(jié)構(gòu)做出比較。另外,類(lèi)屬模型通常是經(jīng)過(guò)結(jié)構(gòu)做出比較。另外,類(lèi)屬模型通常是經(jīng)過(guò)“自下而上自下而上”地對(duì)已有地對(duì)已有系統(tǒng)的抽象,而參考模型是系統(tǒng)的抽象,而參考模型是“由上到下由上到下”地產(chǎn)生的。它們都是抽象地產(chǎn)生的。它們都是抽象系統(tǒng)表示法。系統(tǒng)表示法。11.3 特定領(lǐng)域的軟件體系結(jié)構(gòu) 參考模型參考模型分布式系統(tǒng)的一個(gè)最簡(jiǎn)單的模型是多處理器系統(tǒng),系統(tǒng)由分布式系統(tǒng)的一個(gè)最簡(jiǎn)單的模型是多處理器系統(tǒng),系統(tǒng)由許多進(jìn)程組成,這些進(jìn)程可以在不同的處理器上并行運(yùn)行,許多進(jìn)程組成,這些進(jìn)程可以在不同的處理器上并行運(yùn)行,可以極大地提高系統(tǒng)的性能??梢詷O大地提高系統(tǒng)的性能。由于大型實(shí)時(shí)系統(tǒng)對(duì)響應(yīng)時(shí)間要求較高,這種模型在大型由于大型實(shí)時(shí)系統(tǒng)對(duì)響應(yīng)時(shí)間要求較高,這種模型在大型實(shí)時(shí)系統(tǒng)中比較常見(jiàn)。大型實(shí)時(shí)系統(tǒng)需要實(shí)時(shí)采集信息,并實(shí)時(shí)系統(tǒng)中比較常見(jiàn)。大型實(shí)時(shí)系統(tǒng)需要實(shí)時(shí)采集信息,并利用采集到的信息進(jìn)行決策,然后發(fā)送信號(hào)給執(zhí)行機(jī)構(gòu)。雖利用采集到的信息進(jìn)行決策,然后發(fā)送信號(hào)給執(zhí)行機(jī)構(gòu)。雖然,信息采集、決策制定和執(zhí)行控制這些進(jìn)程可以在同一臺(tái)然,信息采集、決策制定和執(zhí)行控制這些進(jìn)程可以在同一臺(tái)處理器上統(tǒng)一調(diào)度執(zhí)行,但使用多處理器能夠提高系統(tǒng)性處理器上統(tǒng)一調(diào)度執(zhí)行,但使用多處理器能夠提高系統(tǒng)性能。能。11.4 分布式系統(tǒng)結(jié)構(gòu) 多處理器體系結(jié)構(gòu)多處理器體系結(jié)構(gòu)客戶(hù)機(jī)客戶(hù)機(jī)/服務(wù)器(服務(wù)器(client/server,C/S)體系結(jié)構(gòu)是基于)體系結(jié)構(gòu)是基于資源不對(duì)等,且為實(shí)現(xiàn)共享而提出來(lái)的,由資源不對(duì)等,且為實(shí)現(xiàn)共享而提出來(lái)的,由服務(wù)器服務(wù)器、客戶(hù)客戶(hù)機(jī)機(jī)和和網(wǎng)絡(luò)網(wǎng)絡(luò)三部分組成。三部分組成。在在C/S體系結(jié)構(gòu)中,客戶(hù)機(jī)可以通過(guò)遠(yuǎn)程調(diào)用來(lái)獲取服體系結(jié)構(gòu)中,客戶(hù)機(jī)可以通過(guò)遠(yuǎn)程調(diào)用來(lái)獲取服務(wù)器提供的服務(wù),因此,客戶(hù)機(jī)必須知道可用的服務(wù)器的務(wù)器提供的服務(wù),因此,客戶(hù)機(jī)必須知道可用的服務(wù)器的名字及它們所提供的服務(wù),而服務(wù)器不需要知道客戶(hù)機(jī)的名字及它們所提供的服務(wù),而服務(wù)器不需要知道客戶(hù)機(jī)的身份,也不需要知道有多少臺(tái)服務(wù)器在運(yùn)行。身份,也不需要知道有多少臺(tái)服務(wù)器在運(yùn)行。傳統(tǒng)的傳統(tǒng)的C/S體系結(jié)構(gòu)分為兩層。在這種體系結(jié)構(gòu)中,一體系結(jié)構(gòu)分為兩層。在這種體系結(jié)構(gòu)中,一個(gè)應(yīng)用系統(tǒng)被劃分為客戶(hù)機(jī)和服務(wù)器兩部分。典型的兩層個(gè)應(yīng)用系統(tǒng)被劃分為客戶(hù)機(jī)和服務(wù)器兩部分。典型的兩層C/S體系結(jié)構(gòu)如下圖所示。體系結(jié)構(gòu)如下圖所示。11.4 分布式系統(tǒng)結(jié)構(gòu) 客戶(hù)客戶(hù)/服務(wù)器體系結(jié)構(gòu)服務(wù)器體系結(jié)構(gòu)兩層兩層C/S體系結(jié)構(gòu)可以有兩種形態(tài):體系結(jié)構(gòu)可以有兩種形態(tài):(1)瘦客戶(hù)機(jī)模型瘦客戶(hù)機(jī)模型。在瘦客戶(hù)機(jī)模型中,數(shù)據(jù)管理部分。在瘦客戶(hù)機(jī)模型中,數(shù)據(jù)管理部分和應(yīng)用邏輯都在服務(wù)器上執(zhí)行,客戶(hù)機(jī)只負(fù)責(zé)表示部分。和應(yīng)用邏輯都在服務(wù)器上執(zhí)行,客戶(hù)機(jī)只負(fù)責(zé)表示部分。11.4 分布式系統(tǒng)結(jié)構(gòu)(2)胖客戶(hù)機(jī)模型胖客戶(hù)機(jī)模型。在這種模型中,服務(wù)器只負(fù)責(zé)對(duì)數(shù)據(jù)。在這種模型中,服務(wù)器只負(fù)責(zé)對(duì)數(shù)據(jù)的管理。客戶(hù)機(jī)上的軟件實(shí)現(xiàn)應(yīng)用邏輯和與系統(tǒng)用戶(hù)的交的管理??蛻?hù)機(jī)上的軟件實(shí)現(xiàn)應(yīng)用邏輯和與系統(tǒng)用戶(hù)的交互?;?。胖客戶(hù)機(jī)模型能夠利用客戶(hù)機(jī)的處理能力,比瘦客戶(hù)機(jī)胖客戶(hù)機(jī)模型能夠利用客戶(hù)機(jī)的處理能力,比瘦客戶(hù)機(jī)模型在分布處理上更有效。但另一方面,隨著企業(yè)規(guī)模的模型在分布處理上更有效。但另一方面,隨著企業(yè)規(guī)模的日益擴(kuò)大,軟件的復(fù)雜程度不斷提高,胖客戶(hù)機(jī)模型逐漸日益擴(kuò)大,軟件的復(fù)雜程度不斷提高,胖客戶(hù)機(jī)模型逐漸暴露出了以下缺點(diǎn):暴露出了以下缺點(diǎn):開(kāi)發(fā)成本較高。開(kāi)發(fā)成本較高。用戶(hù)界面風(fēng)格不一,使用繁雜,不利于推廣使用。用戶(hù)界面風(fēng)格不一,使用繁雜,不利于推廣使用。軟件移植困難。軟件移植困難。軟件維護(hù)和升級(jí)困難。軟件維護(hù)和升級(jí)困難。11.4 分布式系統(tǒng)結(jié)構(gòu) 為了解決以上問(wèn)題,為了解決以上問(wèn)題,三層三層C/S體系結(jié)構(gòu)體系結(jié)構(gòu)應(yīng)運(yùn)而生,其結(jié)應(yīng)運(yùn)而生,其結(jié)構(gòu)圖如下圖所示。與兩層構(gòu)圖如下圖所示。與兩層C/S體系結(jié)構(gòu)相比,體系結(jié)構(gòu)相比,3層層C/S體系結(jié)體系結(jié)構(gòu)中增加了應(yīng)用服務(wù)器。可以將整個(gè)應(yīng)用邏輯駐留在應(yīng)用構(gòu)中增加了應(yīng)用服務(wù)器??梢詫⒄麄€(gè)應(yīng)用邏輯駐留在應(yīng)用服務(wù)器上,而只有表示層存在于客戶(hù)機(jī)上。服務(wù)器上,而只有表示層存在于客戶(hù)機(jī)上。11.4 分布式系統(tǒng)結(jié)構(gòu) 三層三層三層三層C/SC/SC/SC/S體系結(jié)構(gòu)將整個(gè)系統(tǒng)分成體系結(jié)構(gòu)將整個(gè)系統(tǒng)分成體系結(jié)構(gòu)將整個(gè)系統(tǒng)分成體系結(jié)構(gòu)將整個(gè)系統(tǒng)分成表示層表示層表示層表示層、應(yīng)用邏輯層應(yīng)用邏輯層應(yīng)用邏輯層應(yīng)用邏輯層和和和和數(shù)據(jù)層數(shù)據(jù)層數(shù)據(jù)層數(shù)據(jù)層三個(gè)部分,其數(shù)據(jù)處理流程如下圖所示。三個(gè)部分,其數(shù)據(jù)處理流程如下圖所示。三個(gè)部分,其數(shù)據(jù)處理流程如下圖所示。三個(gè)部分,其數(shù)據(jù)處理流程如下圖所示。11.4 分布式系統(tǒng)結(jié)構(gòu) 11.4 分布式系統(tǒng)結(jié)構(gòu)(1)表示層表示層:表示層是應(yīng)用系統(tǒng)的用戶(hù)界面部分,擔(dān)負(fù)著:表示層是應(yīng)用系統(tǒng)的用戶(hù)界面部分,擔(dān)負(fù)著用戶(hù)與應(yīng)用程序之間的對(duì)話功能。它用于檢查用戶(hù)從鍵盤(pán)等用戶(hù)與應(yīng)用程序之間的對(duì)話功能。它用于檢查用戶(hù)從鍵盤(pán)等輸入的數(shù)據(jù),顯示應(yīng)用程序輸出的數(shù)據(jù),一般采用圖形用戶(hù)輸入的數(shù)據(jù),顯示應(yīng)用程序輸出的數(shù)據(jù),一般采用圖形用戶(hù)界面(界面(graphicuserinterface,GUI)。)。(2)應(yīng)用邏輯層應(yīng)用邏輯層:應(yīng)用邏輯層為應(yīng)用系統(tǒng)的主體部分,包:應(yīng)用邏輯層為應(yīng)用系統(tǒng)的主體部分,包含具體的業(yè)務(wù)處理邏輯。通常在功能層中包含有確認(rèn)用戶(hù)對(duì)含具體的業(yè)務(wù)處理邏輯。通常在功能層中包含有確認(rèn)用戶(hù)對(duì)應(yīng)用和數(shù)據(jù)庫(kù)存取權(quán)限的功能以及記錄系統(tǒng)處理日志的功應(yīng)用和數(shù)據(jù)庫(kù)存取權(quán)限的功能以及記錄系統(tǒng)處理日志的功能。能。(3)數(shù)據(jù)層數(shù)據(jù)層:數(shù)據(jù)層主要包括數(shù)據(jù)的存儲(chǔ)及對(duì)數(shù)據(jù)的存?。簲?shù)據(jù)層主要包括數(shù)據(jù)的存儲(chǔ)及對(duì)數(shù)據(jù)的存取操作,一般選擇關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(操作,一般選擇關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)。)。瀏覽器瀏覽器/服務(wù)器服務(wù)器(browser/server,B/S)風(fēng)格是三層體)風(fēng)格是三層體系結(jié)構(gòu)的一種實(shí)現(xiàn)方式,其具體結(jié)構(gòu)為瀏覽器系結(jié)構(gòu)的一種實(shí)現(xiàn)方式,其具體結(jié)構(gòu)為瀏覽器/Web服務(wù)器服務(wù)器/數(shù)據(jù)庫(kù)服務(wù)器。數(shù)據(jù)庫(kù)服務(wù)器。B/S體系結(jié)構(gòu)如下圖所示。體系結(jié)構(gòu)如下圖所示。11.4 分布式系統(tǒng)結(jié)構(gòu) B/S體系結(jié)構(gòu)主要是利用不斷成熟的體系結(jié)構(gòu)主要是利用不斷成熟的WWW瀏覽器技術(shù),瀏覽器技術(shù),結(jié)合瀏覽器的多種腳本語(yǔ)言,用通用瀏覽器就實(shí)現(xiàn)了原來(lái)需結(jié)合瀏覽器的多種腳本語(yǔ)言,用通用瀏覽器就實(shí)現(xiàn)了原來(lái)需要復(fù)雜的專(zhuān)用軟件才能實(shí)現(xiàn)的強(qiáng)大功能,并節(jié)約了開(kāi)發(fā)成本。要復(fù)雜的專(zhuān)用軟件才能實(shí)現(xiàn)的強(qiáng)大功能,并節(jié)約了開(kāi)發(fā)成本。從某種程度上來(lái)說(shuō),從某種程度上來(lái)說(shuō),B/S結(jié)構(gòu)是一種全新的軟件體系結(jié)構(gòu)。結(jié)構(gòu)是一種全新的軟件體系結(jié)構(gòu)。B/S體系結(jié)構(gòu)具有以下優(yōu)點(diǎn):體系結(jié)構(gòu)具有以下優(yōu)點(diǎn):(1)基于)基于B/S體系結(jié)構(gòu)的軟件,系統(tǒng)安裝、修改和維護(hù)全體系結(jié)構(gòu)的軟件,系統(tǒng)安裝、修改和維護(hù)全在服務(wù)器端解決。在服務(wù)器端解決。(2)B/S體系結(jié)構(gòu)還提供了異種機(jī)、異種網(wǎng)、異種應(yīng)用服體系結(jié)構(gòu)還提供了異種機(jī)、異種網(wǎng)、異種應(yīng)用服務(wù)的聯(lián)機(jī)、聯(lián)網(wǎng)和統(tǒng)一服務(wù)的最現(xiàn)實(shí)的開(kāi)放性基礎(chǔ)。務(wù)的聯(lián)機(jī)、聯(lián)網(wǎng)和統(tǒng)一服務(wù)的最現(xiàn)實(shí)的開(kāi)放性基礎(chǔ)。11.4 分布式系統(tǒng)結(jié)構(gòu) 與與C/S體系結(jié)構(gòu)相比,體系結(jié)構(gòu)相比,B/S體系結(jié)構(gòu)也有許多不足之處。體系結(jié)構(gòu)也有許多不足之處。(1)B/S體系結(jié)構(gòu)缺乏對(duì)動(dòng)態(tài)頁(yè)面的支持能力,沒(méi)有集成體系結(jié)構(gòu)缺乏對(duì)動(dòng)態(tài)頁(yè)面的支持能力,沒(méi)有集成有效的數(shù)據(jù)庫(kù)處理功能。有效的數(shù)據(jù)庫(kù)處理功能。(2)采用)采用B/S體系結(jié)構(gòu)的應(yīng)用系統(tǒng),在數(shù)據(jù)查詢(xún)等響應(yīng)速體系結(jié)構(gòu)的應(yīng)用系統(tǒng),在數(shù)據(jù)查詢(xún)等響應(yīng)速度上,要遠(yuǎn)遠(yuǎn)地低于度上,要遠(yuǎn)遠(yuǎn)地低于C/S體系結(jié)構(gòu)。體系結(jié)構(gòu)。(3)B/S體系結(jié)構(gòu)的數(shù)據(jù)提交一般以頁(yè)面為單位,數(shù)據(jù)的體系結(jié)構(gòu)的數(shù)據(jù)提交一般以頁(yè)面為單位,數(shù)據(jù)的動(dòng)態(tài)交互性不強(qiáng),不利于在線事務(wù)處理(動(dòng)態(tài)交互性不強(qiáng),不利于在線事務(wù)處理(OLTP)應(yīng))應(yīng)用。用。11.4 分布式系統(tǒng)結(jié)構(gòu) 在客戶(hù)機(jī)在客戶(hù)機(jī)/服務(wù)器模型中,客戶(hù)機(jī)和服務(wù)器的地位是不同服務(wù)器模型中,客戶(hù)機(jī)和服務(wù)器的地位是不同的。為了消除客戶(hù)機(jī)與服務(wù)器之間的差別,提高系統(tǒng)的伸的。為了消除客戶(hù)機(jī)與服務(wù)器之間的差別,提高系統(tǒng)的伸縮性以及有效地均衡負(fù)載,可采用分布式對(duì)象體系結(jié)構(gòu)來(lái)縮性以及有效地均衡負(fù)載,可采用分布式對(duì)象體系結(jié)構(gòu)來(lái)設(shè)計(jì)系統(tǒng)。設(shè)計(jì)系統(tǒng)。分布式對(duì)象分布式對(duì)象的實(shí)質(zhì)是在分布式異構(gòu)環(huán)境下建立應(yīng)用系統(tǒng)的實(shí)質(zhì)是在分布式異構(gòu)環(huán)境下建立應(yīng)用系統(tǒng)框架和對(duì)象構(gòu)件,它將應(yīng)用服務(wù)分割成具有完整邏輯含義框架和對(duì)象構(gòu)件,它將應(yīng)用服務(wù)分割成具有完整邏輯含義的獨(dú)立子模塊(我們稱(chēng)之為的獨(dú)立子模塊(我們稱(chēng)之為構(gòu)件構(gòu)件),各個(gè)子模塊可放在同),各個(gè)子模塊可放在同一臺(tái)服務(wù)器或分布在多臺(tái)服務(wù)器上運(yùn)行,模塊之間通過(guò)中一臺(tái)服務(wù)器或分布在多臺(tái)服務(wù)器上運(yùn)行,模塊之間通過(guò)中間件互相通信。通常將這個(gè)中間件稱(chēng)為軟件總線或?qū)ο笳?qǐng)間件互相通信。通常將這個(gè)中間件稱(chēng)為軟件總線或?qū)ο笳?qǐng)11.4 分布式系統(tǒng)結(jié)構(gòu) 分布式對(duì)象體系結(jié)構(gòu)分布式對(duì)象體系結(jié)構(gòu)求代理,它的作用是在對(duì)象之間提供一個(gè)無(wú)縫接口。分布式求代理,它的作用是在對(duì)象之間提供一個(gè)無(wú)縫接口。分布式對(duì)象體系結(jié)構(gòu)如下圖所示。對(duì)象體系結(jié)構(gòu)如下圖所示。11.4 分布式系統(tǒng)結(jié)構(gòu) 分布式對(duì)象技術(shù)的應(yīng)用目的分布式對(duì)象技術(shù)的應(yīng)用目的是為了降低主服務(wù)器的負(fù)荷、是為了降低主服務(wù)器的負(fù)荷、共享網(wǎng)絡(luò)資源、平衡網(wǎng)絡(luò)中計(jì)算機(jī)業(yè)務(wù)處理的分配,提高計(jì)共享網(wǎng)絡(luò)資源、平衡網(wǎng)絡(luò)中計(jì)算機(jī)業(yè)務(wù)處理的分配,提高計(jì)算機(jī)系統(tǒng)協(xié)同處理的能力,從而使應(yīng)用的實(shí)現(xiàn)更為靈活。算機(jī)系統(tǒng)協(xié)同處理的能力,從而使應(yīng)用的實(shí)現(xiàn)更為靈活。分布式對(duì)象技術(shù)的基礎(chǔ)是構(gòu)件。分布式對(duì)象技術(shù)的基礎(chǔ)是構(gòu)件。構(gòu)件構(gòu)件是一些獨(dú)立的代碼封是一些獨(dú)立的代碼封裝體,在分布計(jì)算的環(huán)境下可以是裝體,在分布計(jì)算的環(huán)境下可以是一個(gè)簡(jiǎn)單的對(duì)象一個(gè)簡(jiǎn)單的對(duì)象,但大多,但大多數(shù)情況下是數(shù)情況下是一組相關(guān)的對(duì)象組合體一組相關(guān)的對(duì)象組合體,提供一定的服務(wù)。分布,提供一定的服務(wù)。分布式環(huán)境下,構(gòu)件是一些靈活的軟件模塊,它們可以位置透式環(huán)境下,構(gòu)件是一些靈活的軟件模塊,它們可以位置透明、語(yǔ)言獨(dú)立和平臺(tái)獨(dú)立地互相發(fā)送消息,實(shí)現(xiàn)請(qǐng)求服務(wù)。明、語(yǔ)言獨(dú)立和平臺(tái)獨(dú)立地互相發(fā)送消息,實(shí)現(xiàn)請(qǐng)求服務(wù)。構(gòu)件之間并不存在客戶(hù)機(jī)與服務(wù)器的界限,接受服務(wù)者扮演構(gòu)件之間并不存在客戶(hù)機(jī)與服務(wù)器的界限,接受服務(wù)者扮演客戶(hù)機(jī)的角色,提供服務(wù)者就是服務(wù)器??蛻?hù)機(jī)的角色,提供服務(wù)者就是服務(wù)器。當(dāng)前主流的分布式對(duì)象技術(shù)規(guī)范有當(dāng)前主流的分布式對(duì)象技術(shù)規(guī)范有OMG的的CORBA、Microsoft公司的公司的.NET和和Sun公司的公司的J2EE。它們都支持服務(wù)。它們都支持服務(wù)端構(gòu)件的開(kāi)發(fā),都有其各自的特點(diǎn)。端構(gòu)件的開(kāi)發(fā),都有其各自的特點(diǎn)。11.4 分布式系統(tǒng)結(jié)構(gòu) 代理可以用于構(gòu)建帶有隔離組件的分布式軟件系統(tǒng),該代理可以用于構(gòu)建帶有隔離組件的分布式軟件系統(tǒng),該軟件通過(guò)遠(yuǎn)程服務(wù)調(diào)用進(jìn)行交互。代理者負(fù)責(zé)協(xié)調(diào)通信,軟件通過(guò)遠(yuǎn)程服務(wù)調(diào)用進(jìn)行交互。代理者負(fù)責(zé)協(xié)調(diào)通信,諸如轉(zhuǎn)發(fā)請(qǐng)求以及傳遞結(jié)果和異常等。諸如轉(zhuǎn)發(fā)請(qǐng)求以及傳遞結(jié)果和異常等。1991年,年,OMG基于面向?qū)ο蠹夹g(shù),給出了以對(duì)象請(qǐng)求代基于面向?qū)ο蠹夹g(shù),給出了以對(duì)象請(qǐng)求代理(理(ORB)為中心的分布式應(yīng)用體系結(jié)構(gòu),如下圖所示。)為中心的分布式應(yīng)用體系結(jié)構(gòu),如下圖所示。11.4 分布式系統(tǒng)結(jié)構(gòu) 代理代理在在OMG的對(duì)象管理結(jié)構(gòu)中,的對(duì)象管理結(jié)構(gòu)中,ORB是一個(gè)關(guān)鍵的通信機(jī)是一個(gè)關(guān)鍵的通信機(jī)制,它以實(shí)現(xiàn)互操作性為主要目標(biāo),處理對(duì)象之間的消息制,它以實(shí)現(xiàn)互操作性為主要目標(biāo),處理對(duì)象之間的消息分布。在分布。在ORB之上有之上有4個(gè)對(duì)象接口:個(gè)對(duì)象接口:(1)對(duì)象服務(wù)對(duì)象服務(wù):定義加入:定義加入ORB的系統(tǒng)級(jí)服務(wù),如安全的系統(tǒng)級(jí)服務(wù),如安全性、命名和事務(wù)處理,它們是與應(yīng)用領(lǐng)域無(wú)關(guān)的。性、命名和事務(wù)處理,它們是與應(yīng)用領(lǐng)域無(wú)關(guān)的。(2)公共設(shè)施公共設(shè)施:水平級(jí)的服務(wù),定義應(yīng)用程序級(jí)服務(wù)。:水平級(jí)的服務(wù),定義應(yīng)用程序級(jí)服務(wù)。(3)領(lǐng)域接口領(lǐng)域接口:面向特定的領(lǐng)域。:面向特定的領(lǐng)域。(4)應(yīng)用接口應(yīng)用接口:面向指定的現(xiàn)實(shí)世界應(yīng)用。是指供應(yīng)商或:面向指定的現(xiàn)實(shí)世界應(yīng)用。是指供應(yīng)商或用戶(hù)借助于用戶(hù)借助于ORB、公共對(duì)象服務(wù)及公共設(shè)施而開(kāi)發(fā)的、公共對(duì)象服務(wù)及公共設(shè)施而開(kāi)發(fā)的特定產(chǎn)品。特定產(chǎn)品。11.4 分布式系統(tǒng)結(jié)構(gòu) MVC框架即模型框架即模型視圖視圖控制器(控制器(model-view-controller)框架,它強(qiáng)調(diào)將用戶(hù)輸入、數(shù)據(jù)模型和數(shù)據(jù)表)框架,它強(qiáng)調(diào)將用戶(hù)輸入、數(shù)據(jù)模型和數(shù)據(jù)表示的方式分開(kāi)設(shè)計(jì),一個(gè)交互式應(yīng)用系統(tǒng)由示的方式分開(kāi)設(shè)計(jì),一個(gè)交互式應(yīng)用系統(tǒng)由模型模型、視圖視圖和和控控制器制器3個(gè)部件組成,分別對(duì)應(yīng)于內(nèi)部數(shù)據(jù)、數(shù)據(jù)表示和輸入個(gè)部件組成,分別對(duì)應(yīng)于內(nèi)部數(shù)據(jù)、數(shù)據(jù)表示和輸入/輸出控制部分,其結(jié)構(gòu)如下圖所示。輸出控制部分,其結(jié)構(gòu)如下圖所示。11.5 體系結(jié)構(gòu)框架MVC框架框架11.5 體系結(jié)構(gòu)框架MVC框架框架1.模型對(duì)象模型對(duì)象模型對(duì)象獨(dú)立于外在顯示內(nèi)容和形式,代表應(yīng)用領(lǐng)域中的模型對(duì)象獨(dú)立于外在顯示內(nèi)容和形式,代表應(yīng)用領(lǐng)域中的業(yè)務(wù)實(shí)體和業(yè)務(wù)規(guī)則,是業(yè)務(wù)實(shí)體和業(yè)務(wù)規(guī)則,是整個(gè)模型的核心整個(gè)模型的核心。模型對(duì)象的變化。模型對(duì)象的變化通過(guò)事件處理通知視圖和控制器對(duì)象。通過(guò)事件處理通知視圖和控制器對(duì)象。2.視圖對(duì)象視圖對(duì)象視圖對(duì)象代表視圖對(duì)象代表GUI對(duì)象,并且以用戶(hù)需要的格式表示模型對(duì)象,并且以用戶(hù)需要的格式表示模型狀態(tài),是交互系統(tǒng)與外界的接口。視圖對(duì)象可以包含子視狀態(tài),是交互系統(tǒng)與外界的接口。視圖對(duì)象可以包含子視圖,子視圖用于顯示模型的不同部分。通常,每個(gè)視圖對(duì)象圖,子視圖用于顯示模型的不同部分。通常,每個(gè)視圖對(duì)象對(duì)應(yīng)一個(gè)控制器對(duì)象。對(duì)應(yīng)一個(gè)控制器對(duì)象。11.5 體系結(jié)構(gòu)框架3.控制器對(duì)象控制器對(duì)象控制器對(duì)象代表鼠標(biāo)和鍵盤(pán)事件。它處理用戶(hù)的輸入行為控制器對(duì)象代表鼠標(biāo)和鍵盤(pán)事件。它處理用戶(hù)的輸入行為并給模型發(fā)送業(yè)務(wù)事件,再將業(yè)務(wù)事件解析為模型應(yīng)執(zhí)行并給模型發(fā)送業(yè)務(wù)事件,再將業(yè)務(wù)事件解析為模型應(yīng)執(zhí)行的動(dòng)作;同時(shí),模型的更新與修改也將通過(guò)控制器來(lái)通知的動(dòng)作;同時(shí),模型的更新與修改也將通過(guò)控制器來(lái)通知視圖,從而保持各個(gè)視圖與模型的一致性。視圖,從而保持各個(gè)視圖與模型的一致性。MVC的處理過(guò)程為的處理過(guò)程為:首先控制器接收用戶(hù)的請(qǐng)求,并決定:首先控制器接收用戶(hù)的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型來(lái)進(jìn)行處理;然后模型用業(yè)務(wù)邏輯來(lái)處應(yīng)該調(diào)用哪個(gè)模型來(lái)進(jìn)行處理;然后模型用業(yè)務(wù)邏輯來(lái)處理用戶(hù)的請(qǐng)求并返回?cái)?shù)據(jù);最后控制器用相應(yīng)的視圖格式理用戶(hù)的請(qǐng)求并返回?cái)?shù)據(jù);最后控制器用相應(yīng)的視圖格式化模型返回的數(shù)據(jù),并通過(guò)表示層呈現(xiàn)給用戶(hù)。其中,?;P头祷氐臄?shù)據(jù),并通過(guò)表示層呈現(xiàn)給用戶(hù)。其中,模型是核心數(shù)據(jù)和功能,視圖只關(guān)心顯示數(shù)據(jù),控制只關(guān)心型是核心數(shù)據(jù)和功能,視圖只關(guān)心顯示數(shù)據(jù),控制只關(guān)心用戶(hù)輸入,這種結(jié)構(gòu)由于將數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層分開(kāi),用戶(hù)輸入,這種結(jié)構(gòu)由于將數(shù)據(jù)和業(yè)務(wù)規(guī)則從表示層分開(kāi),因此可以最大化地重用代碼。因此可以最大化地重用代碼。11.5 體系結(jié)構(gòu)框架J2EE的核心體系結(jié)構(gòu)就是在的核心體系結(jié)構(gòu)就是在MVC框架的基礎(chǔ)上進(jìn)行擴(kuò)展框架的基礎(chǔ)上進(jìn)行擴(kuò)展得到的,如下圖所示。得到的,如下圖所示。11.5 體系結(jié)構(gòu)框架J2EE體系結(jié)構(gòu)框架體系結(jié)構(gòu)框架J2EE的核心體系結(jié)構(gòu)框架的核心體系結(jié)構(gòu)框架 客戶(hù)層客戶(hù)層:用戶(hù)通過(guò)客戶(hù)層與系統(tǒng)交互。該層可以是各種類(lèi):用戶(hù)通過(guò)客戶(hù)層與系統(tǒng)交互。該層可以是各種類(lèi)型的客戶(hù)端。例如,可編程客戶(hù)端(如基于型的客戶(hù)端。例如,可編程客戶(hù)端(如基于JavaSwing的客戶(hù)端或的客戶(hù)端或applet),純),純Web瀏覽器客戶(hù)端,瀏覽器客戶(hù)端,WML移動(dòng)移動(dòng)客戶(hù)端等??蛻?hù)端等。資源層資源層:資源層可以是企業(yè)數(shù)據(jù)庫(kù),電子商務(wù)解決方案中:資源層可以是企業(yè)數(shù)據(jù)庫(kù),電子商務(wù)解決方案中的外部企業(yè)系統(tǒng),或者是外部的外部企業(yè)系統(tǒng),或者是外部SOA服務(wù)。數(shù)據(jù)可以分布在服務(wù)。數(shù)據(jù)可以分布在多個(gè)服務(wù)器上。多個(gè)服務(wù)器上。從上圖可看出,從上圖可看出,J2EE模型是模型是分層結(jié)構(gòu)分層結(jié)構(gòu),中間的,中間的3層(表示層,層(表示層,業(yè)務(wù)層,集成層)包含應(yīng)用程序構(gòu)件,客戶(hù)層和資源層處于業(yè)務(wù)層,集成層)包含應(yīng)用程序構(gòu)件,客戶(hù)層和資源層處于應(yīng)用程序的外圍。應(yīng)用程序的外圍。11.5 體系結(jié)構(gòu)框架表示層:表示層:也稱(chēng)為也稱(chēng)為Web層或服務(wù)器端表示層,用戶(hù)通過(guò)表層或服務(wù)器端表示層,用戶(hù)通過(guò)表示層來(lái)訪問(wèn)應(yīng)用程序。在基于示層來(lái)訪問(wèn)應(yīng)用程序。在基于Web的應(yīng)用系統(tǒng)中,表示的應(yīng)用系統(tǒng)中,表示層由用戶(hù)界面代碼和運(yùn)行于層由用戶(hù)界面代碼和運(yùn)行于Web服務(wù)器或應(yīng)用服務(wù)器上服務(wù)器或應(yīng)用服務(wù)器上的過(guò)程組成。參考的過(guò)程組成。參考MVC框架,表示層包括視圖構(gòu)件和控框架,表示層包括視圖構(gòu)件和控制器構(gòu)件。制器構(gòu)件。業(yè)務(wù)層:業(yè)務(wù)層:業(yè)務(wù)層包含表示層中的控制器構(gòu)件沒(méi)有實(shí)現(xiàn)的業(yè)務(wù)層包含表示層中的控制器構(gòu)件沒(méi)有實(shí)現(xiàn)的一部分應(yīng)用邏輯。它負(fù)責(zé)確認(rèn)和執(zhí)行企業(yè)范圍內(nèi)的業(yè)務(wù)一部分應(yīng)用邏輯。它負(fù)責(zé)確認(rèn)和執(zhí)行企業(yè)范圍內(nèi)的業(yè)務(wù)規(guī)則和事務(wù),并管理從資源層加載到應(yīng)用程序高速緩存規(guī)則和事務(wù),并管理從資源層加載到應(yīng)用程序高速緩存中的業(yè)務(wù)對(duì)象。中的業(yè)務(wù)對(duì)象。集成層:集成層:集成層負(fù)責(zé)建立和維護(hù)與數(shù)據(jù)源的連接。例如,集成層負(fù)責(zé)建立和維護(hù)與數(shù)據(jù)源的連接。例如,通過(guò)通過(guò)JDBC與數(shù)據(jù)庫(kù)進(jìn)行通信,利用與數(shù)據(jù)庫(kù)進(jìn)行通信,利用Java消息服務(wù)消息服務(wù)(JMS)與外部系統(tǒng)聯(lián)合。)與外部系統(tǒng)聯(lián)合。11.5 體系結(jié)構(gòu)框架1PCMEF框架框架表示表示控制控制中介者中介者實(shí)體實(shí)體基礎(chǔ)(基礎(chǔ)(presentation-control-mediator-entity-foundation,PCMEF)是一個(gè)垂)是一個(gè)垂直層次的分層體系結(jié)構(gòu)框架。每一層是可以包含其他包的包。直層次的分層體系結(jié)構(gòu)框架。每一層是可以包含其他包的包。PCMEF框架包含框架包含4層:表示層、控制層、領(lǐng)域?qū)雍突A(chǔ)層。層:表示層、控制層、領(lǐng)域?qū)雍突A(chǔ)層。領(lǐng)域?qū)影瑑蓚€(gè)預(yù)定義包:實(shí)體(領(lǐng)域?qū)影瑑蓚€(gè)預(yù)定義包:實(shí)體(entity)包和中介者)包和中介者(mediator)包。)包。PCMEF框架中包的依賴(lài)性主要是向下依賴(lài)性。表示層依框架中包的依賴(lài)性主要是向下依賴(lài)性。表示層依賴(lài)于控制層,控制層依賴(lài)于領(lǐng)域?qū)樱薪檎甙蕾?lài)于實(shí)體包賴(lài)于控制層,控制層依賴(lài)于領(lǐng)域?qū)樱薪檎甙蕾?lài)于實(shí)體包和基礎(chǔ)層和基礎(chǔ)層,如下圖所示如下圖所示。PCMEF與與PCBMER框架框架11.5 體系結(jié)構(gòu)框架表示層表示層:包含定義包含定義GUI對(duì)象的類(lèi)。對(duì)象的類(lèi)??刂茖涌刂茖?處理表示層的請(qǐng)求,負(fù)責(zé)處理表示層的請(qǐng)求,負(fù)責(zé)大多數(shù)程序邏輯、算法、主要計(jì)大多數(shù)程序邏輯、算法、主要計(jì)算以及為每個(gè)用戶(hù)維持會(huì)話狀態(tài)。算以及為每個(gè)用戶(hù)維持會(huì)話狀態(tài)。領(lǐng)域?qū)宇I(lǐng)域?qū)?其實(shí)體包處理控制請(qǐng)求其實(shí)體包處理控制請(qǐng)求,中介者包用于創(chuàng)建一個(gè)協(xié)調(diào)實(shí)體中介者包用于創(chuàng)建一個(gè)協(xié)調(diào)實(shí)體類(lèi)和基礎(chǔ)類(lèi)的通信通道。類(lèi)和基礎(chǔ)類(lèi)的通信通道。基礎(chǔ)層基礎(chǔ)層:負(fù)責(zé)與數(shù)據(jù)庫(kù)和負(fù)責(zé)與數(shù)據(jù)庫(kù)和Web服務(wù)服務(wù)的所有通信。的所有通信。11.5 體系結(jié)構(gòu)框架PCMEF框架框架 2.PCBMER框架框架PCBMER框架由框架由PCMEF框架框架擴(kuò)展而成擴(kuò)展而成,代表著表示代表著表示控制控制器器Bean中介者中介者實(shí)體實(shí)體資源(資源(presentation-control-bean-mediator-entity-resource,PCBMER)。其)。其核心體系結(jié)構(gòu)框架如右圖所示。核心體系結(jié)構(gòu)框架如右圖所示。11.5 體系結(jié)構(gòu)框架PCBMER的核心框架的核心框架 在上圖中,把層表示為在上圖中,把層表示為UML包(子系統(tǒng),層),帶箭頭的包(子系統(tǒng),層),帶箭頭的虛線表示依賴(lài)關(guān)系。例如,表示層依賴(lài)控制器層和虛線表示依賴(lài)關(guān)系。例如,表示層依賴(lài)控制器層和bean層,控層,控制器層依賴(lài)制器層依賴(lài)bean層。層。PCBMER的層次不是嚴(yán)格線性的,上層可的層次不是嚴(yán)格線性的,上層可以依賴(lài)多個(gè)相鄰下層。以依賴(lài)多個(gè)相鄰下層。bean層層:表示那些預(yù)先確定要呈現(xiàn)在用戶(hù)界面上的數(shù)據(jù)類(lèi)和:表示那些預(yù)先確定要呈現(xiàn)在用戶(hù)界面上的數(shù)據(jù)類(lèi)和值對(duì)象。除了用戶(hù)輸入外,值對(duì)象。除了用戶(hù)輸入外,bean數(shù)據(jù)由實(shí)體對(duì)象(實(shí)體層)數(shù)據(jù)由實(shí)體對(duì)象(實(shí)體層)創(chuàng)建。創(chuàng)建。表示層:表示層:表示屏幕以及呈現(xiàn)表示屏幕以及呈現(xiàn)bean對(duì)象的對(duì)象的UI對(duì)象。對(duì)象??刂破鲗涌刂破鲗樱罕硎緫?yīng)用邏輯。:表示應(yīng)用邏輯。實(shí)體層:實(shí)體層:響應(yīng)控制器和中介者。響應(yīng)控制器和中介者。中介者層:中介者層:建立了充當(dāng)實(shí)體類(lèi)和資源類(lèi)媒介的通信管道。建立了充當(dāng)實(shí)體類(lèi)和資源類(lèi)媒介的通信管道。資源層資源層:負(fù)責(zé)所有與外部持久數(shù)據(jù)資源(數(shù)據(jù)庫(kù)、:負(fù)責(zé)所有與外部持久數(shù)據(jù)資源(數(shù)據(jù)庫(kù)、Web服務(wù)服務(wù)等)的通信。等)的通信。11.5 體系結(jié)構(gòu)框架在在UML中,體系結(jié)構(gòu)建模是以結(jié)點(diǎn)、構(gòu)件、包、子系統(tǒng)中,體系結(jié)構(gòu)建模是以結(jié)點(diǎn)、構(gòu)件、包、子系統(tǒng)等概念為中心的。另外,等概念為中心的。另外,UML還可以通過(guò)給類(lèi)圖增加設(shè)計(jì)約還可以通過(guò)給類(lèi)圖增加設(shè)計(jì)約束支持體系結(jié)構(gòu)建模。所采用的主要形式是在類(lèi)及其他模型束支持體系結(jié)構(gòu)建模。所采用的主要形式是在類(lèi)及其他模型中增加依賴(lài)關(guān)系。中增加依賴(lài)關(guān)系。依賴(lài)依賴(lài)是體系結(jié)構(gòu)框架的基礎(chǔ),它還決定體是體系結(jié)構(gòu)框架的基礎(chǔ),它還決定體系結(jié)構(gòu)的復(fù)雜性。系結(jié)構(gòu)的復(fù)雜性。體系結(jié)構(gòu)設(shè)計(jì)描述了建立計(jì)算機(jī)系統(tǒng)所需的數(shù)據(jù)結(jié)構(gòu)和程體系結(jié)構(gòu)設(shè)計(jì)描述了建立計(jì)算機(jī)系統(tǒng)所需的數(shù)據(jù)結(jié)構(gòu)和程序構(gòu)件。一個(gè)好的體系結(jié)構(gòu)設(shè)計(jì)要求軟件模塊的分層及編程序構(gòu)件。一個(gè)好的體系結(jié)構(gòu)設(shè)計(jì)要求軟件模塊的分層及編程標(biāo)準(zhǔn)的執(zhí)行。在面向?qū)ο筌浖?,常?jiàn)的軟件模塊有標(biāo)準(zhǔn)的執(zhí)行。在面向?qū)ο筌浖校R?jiàn)的軟件模塊有類(lèi)類(lèi)、接接口口、包包和和構(gòu)件構(gòu)件。在。在設(shè)計(jì)階段設(shè)計(jì)階段我們往往我們往往關(guān)注類(lèi)、接口和包關(guān)注類(lèi)、接口和包,而,而在在實(shí)現(xiàn)階段實(shí)現(xiàn)階段則則關(guān)注構(gòu)件關(guān)注構(gòu)件,而在,而在部署階段部署階段則則關(guān)注構(gòu)件的部署關(guān)注構(gòu)件的部署,也就是將構(gòu)件部署在哪些結(jié)點(diǎn)上。也就是將構(gòu)件部署在哪些結(jié)點(diǎn)上。11.6 體系結(jié)構(gòu)建模1.類(lèi)類(lèi) 在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,在面向?qū)ο蟮某绦蛟O(shè)計(jì)中,類(lèi)和接口是程序的基本組成類(lèi)和接口是程序的基本組成單元單元。一個(gè)典型程序需要界面類(lèi)專(zhuān)門(mén)負(fù)責(zé)表示用戶(hù)界面信。一個(gè)典型程序需要界面類(lèi)專(zhuān)門(mén)負(fù)責(zé)表示用戶(hù)界面信息,需要數(shù)據(jù)庫(kù)類(lèi)負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互,需要有業(yè)務(wù)邏息,需要數(shù)據(jù)庫(kù)類(lèi)負(fù)責(zé)與數(shù)據(jù)庫(kù)進(jìn)行交互,需要有業(yè)務(wù)邏輯類(lèi)負(fù)責(zé)算法計(jì)算等。在計(jì)算機(jī)程序中,要設(shè)計(jì)和實(shí)現(xiàn)的輯類(lèi)負(fù)責(zé)算法計(jì)算等。在計(jì)算機(jī)程序中,要設(shè)計(jì)和實(shí)現(xiàn)的所有類(lèi)都具有唯一的名字,在不同的階段或從不同的角度所有類(lèi)都具有唯一的名字,在不同的階段或從不同的角度可以將它們稱(chēng)為可以將它們稱(chēng)為設(shè)計(jì)類(lèi)設(shè)計(jì)類(lèi)、實(shí)現(xiàn)類(lèi)實(shí)現(xiàn)類(lèi)、系統(tǒng)類(lèi)系統(tǒng)類(lèi)、應(yīng)用類(lèi)應(yīng)用類(lèi)等。等。11.6 體系結(jié)構(gòu)建模類(lèi)及其依賴(lài)性類(lèi)及其依賴(lài)性2繼承依賴(lài)性繼承依賴(lài)性依賴(lài)性管理中最棘手的問(wèn)題是由于繼承所引起的依賴(lài)依賴(lài)性管理中最棘手的問(wèn)題是由于繼承所引起的依賴(lài)性。性。繼承是一種在父類(lèi)和子類(lèi)之間共享屬性和行為的方式繼承是一種在父類(lèi)和子類(lèi)之間共享屬性和行為的方式,所以運(yùn)行時(shí)可以用一個(gè)子類(lèi)對(duì)象代替其父類(lèi)對(duì)象。程序中凡所以運(yùn)行時(shí)可以用一個(gè)子類(lèi)對(duì)象代替其父類(lèi)對(duì)象。程序中凡是使用父類(lèi)對(duì)象的地方,都可以用子類(lèi)對(duì)象來(lái)代替。一個(gè)子是使用父類(lèi)對(duì)象的地方,都可以用子類(lèi)對(duì)象來(lái)代替。一個(gè)子類(lèi)對(duì)象是一種特殊的父類(lèi)對(duì)象,它繼承父類(lèi)的所有特征,同類(lèi)對(duì)象是一種特殊的父類(lèi)對(duì)象,它繼承父類(lèi)的所有特征,同時(shí)它又可以覆蓋父類(lèi)的方法,從而改變從父類(lèi)繼承的一些特時(shí)它又可以覆蓋父類(lèi)的方法,從而改變從父類(lèi)繼承的一些特征,并可以在子類(lèi)中增加一些新的功能。這樣,從客戶(hù)的角征,并可以在子類(lèi)中增加一些新的功能。這樣,從客戶(hù)的角度看,在繼承樹(shù)中為請(qǐng)求提供服務(wù)的特定對(duì)象不同,系統(tǒng)的度看,在繼承樹(shù)中為請(qǐng)求提供服務(wù)的特定對(duì)象不同,系統(tǒng)的運(yùn)行行為可能會(huì)有所不同。運(yùn)行行為可能會(huì)有所不同。11.6 體系結(jié)構(gòu)建模(1)多態(tài)繼承)多態(tài)繼承根據(jù)為請(qǐng)求提供服務(wù)的對(duì)象不同可以得到不同的行為,這根據(jù)為請(qǐng)求提供服務(wù)的對(duì)象不同可以得到不同的行為,這種現(xiàn)象稱(chēng)為種現(xiàn)象稱(chēng)為多態(tài)多態(tài)。在運(yùn)行時(shí)對(duì)類(lèi)進(jìn)行實(shí)例化,并調(diào)用與實(shí)例。在運(yùn)行時(shí)對(duì)類(lèi)進(jìn)行實(shí)例化,并調(diào)用與實(shí)例化對(duì)象相應(yīng)的方法,稱(chēng)為化對(duì)象相應(yīng)的方法,稱(chēng)為動(dòng)態(tài)綁定動(dòng)態(tài)綁定、后期綁定或運(yùn)行時(shí)綁、后期綁定或運(yùn)行時(shí)綁定。相應(yīng)地,如果方法的調(diào)用是在編譯時(shí)確定的,則稱(chēng)為是定。相應(yīng)地,如果方法的調(diào)用是在編譯時(shí)確定的,則稱(chēng)為是靜態(tài)綁定靜態(tài)綁定、前期綁定或編譯時(shí)綁定。、前期綁定或編譯時(shí)綁定。多態(tài)并不是伴隨著繼承而出現(xiàn)。如果在子類(lèi)中不覆蓋父類(lèi)多態(tài)并不是伴隨著繼承而出現(xiàn)。如果在子類(lèi)中不覆蓋父類(lèi)中的任何方法,就不會(huì)產(chǎn)生多態(tài)行為。中的任何方法,就不會(huì)產(chǎn)生多態(tài)行為。很明顯,繼承會(huì)帶來(lái)類(lèi)和方法之間的依賴(lài)性。繼承帶來(lái)的很明顯,繼承會(huì)帶來(lái)類(lèi)和方法之間的依賴(lài)性。繼承帶來(lái)的依賴(lài)性有依賴(lài)性有編譯時(shí)繼承依賴(lài)性編譯時(shí)繼承依賴(lài)性和和運(yùn)行時(shí)繼承依賴(lài)性運(yùn)行時(shí)繼承依賴(lài)性。11.6 體系結(jié)構(gòu)建模11.6 體系結(jié)構(gòu)建模編譯時(shí)繼承依賴(lài)性編譯時(shí)繼承依賴(lài)性右圖所示的例子說(shuō)明了一棵樹(shù)中類(lèi)之間的編右圖所示的例子說(shuō)明了一棵樹(shù)中類(lèi)之間的編譯時(shí)依賴(lài)性。在這個(gè)例子中,譯時(shí)依賴(lài)性。在這個(gè)例子中,B繼承繼承A,但沒(méi)有,但沒(méi)有覆蓋覆蓋A中的方法中的方法do1()。因此,。因此,B和和A之間沒(méi)有之間沒(méi)有運(yùn)行時(shí)繼承依賴(lài)性。也就是說(shuō),由于編譯時(shí)依運(yùn)行時(shí)繼承依賴(lài)性。也就是說(shuō),由于編譯時(shí)依賴(lài)性的存在,賴(lài)性的存在,A中中do1()方法的任何變化,都會(huì)方法的任何變化,都會(huì)被被B在編譯時(shí)(靜態(tài)地)繼承。在編譯時(shí)(靜態(tài)地)繼承。一般來(lái)說(shuō),一般來(lái)說(shuō),所有的繼承都會(huì)引入編譯時(shí)依賴(lài)所有的繼承都會(huì)引入編譯時(shí)依賴(lài)性性。依賴(lài)性是。依賴(lài)性是可傳遞的可傳遞的,也就是說(shuō),如果,也就是說(shuō),如果C依賴(lài)依賴(lài)B,B依賴(lài)依賴(lài)A,那么,那么C也依賴(lài)也依賴(lài)A。運(yùn)行時(shí)繼承依賴(lài)性運(yùn)行時(shí)繼承依賴(lài)性下圖舉例說(shuō)明了在一棵繼承樹(shù)中涉及客戶(hù)對(duì)象訪問(wèn)類(lèi)服務(wù)的運(yùn)行時(shí)下圖舉例說(shuō)明了在一棵繼承樹(shù)中涉及客戶(hù)對(duì)象訪問(wèn)類(lèi)服務(wù)的運(yùn)行時(shí)繼承依賴(lài)性。圖中類(lèi)繼承依賴(lài)性。圖中類(lèi)B的的do1()方法是從父類(lèi)方法是從父類(lèi)A繼承來(lái)的,因此繼承來(lái)的,因此Test與與B沒(méi)有運(yùn)行時(shí)繼承依賴(lài)性,只是一個(gè)靜態(tài)依賴(lài)性,通過(guò)從沒(méi)有運(yùn)行時(shí)繼承依賴(lài)性,只是一個(gè)靜態(tài)依賴(lài)性,通過(guò)從Test到到A的關(guān)的關(guān)聯(lián)來(lái)表明。如果在聯(lián)來(lái)表明。如果在doTest方法中調(diào)用的是方法中調(diào)用的是do2()方法,或者在方法,或者在B中覆蓋中覆蓋了了A的的do1()方法,則從方法,則從Test到到A和和B就會(huì)存在運(yùn)行時(shí)依賴(lài)性。就會(huì)存在運(yùn)行時(shí)依賴(lài)性。11.6 體系結(jié)構(gòu)建模(2)無(wú)多態(tài)繼承)無(wú)多態(tài)繼承使用繼承最簡(jiǎn)單的方式是子類(lèi)不覆蓋從父類(lèi)繼承來(lái)的方法,使用繼承最簡(jiǎn)單的方式是子類(lèi)不覆蓋從父類(lèi)繼承來(lái)的方法,這樣就不存在多態(tài)性繼承問(wèn)題。雖然無(wú)多態(tài)的繼承有時(shí)并不這樣就不存在多態(tài)性繼承問(wèn)題。雖然無(wú)多態(tài)的繼承有時(shí)并不是十分有用,但理解和管理起來(lái)是最容易的。是十分有用,但理解和管理起來(lái)是最容易的。(3)擴(kuò)展繼承和約束繼承)擴(kuò)展繼承和約束繼承擴(kuò)展繼承擴(kuò)展繼承是指子類(lèi)繼承父類(lèi)的屬性,并且提供額外屬性來(lái)是指子類(lèi)繼承父類(lèi)的屬性,并且提供額外屬性來(lái)增強(qiáng)類(lèi)定義。子類(lèi)是父類(lèi)的一種,如果子類(lèi)覆蓋了父類(lèi)的方增強(qiáng)類(lèi)定義。子類(lèi)是父類(lèi)的一種,如果子類(lèi)覆蓋了父類(lèi)的方法,那么被覆蓋的方法應(yīng)該實(shí)現(xiàn)該方法的定義,并且能夠在法,那么被覆蓋的方法應(yīng)該實(shí)現(xiàn)該方法的定義,并且能夠在子類(lèi)的語(yǔ)境中工作。子類(lèi)的語(yǔ)境中工作。當(dāng)一個(gè)類(lèi)覆蓋了繼承來(lái)的方法,并對(duì)一些繼承來(lái)的功能進(jìn)當(dāng)一個(gè)類(lèi)覆蓋了繼承來(lái)的方法,并對(duì)一些繼承來(lái)的功能進(jìn)行了限制,這時(shí)就產(chǎn)生了行了限制,這時(shí)就產(chǎn)生了約束繼承約束繼承。這時(shí),子類(lèi)不再是父類(lèi)。這時(shí),子類(lèi)不再是父類(lèi)的一種。有時(shí),限制會(huì)造成繼承方法的完全禁止。當(dāng)方法的的一種。有時(shí),限制會(huì)造成繼承方法的完全禁止。當(dāng)方法的實(shí)現(xiàn)是空時(shí),就會(huì)發(fā)生這種情況。實(shí)現(xiàn)是空時(shí),就會(huì)發(fā)生這種情況。11.6 體系結(jié)構(gòu)建模3交互依賴(lài)性交互依賴(lài)性交互依賴(lài)性也稱(chēng)為方法依賴(lài)性,是通過(guò)消息連接產(chǎn)生的。交互依賴(lài)性也稱(chēng)為方法依賴(lài)性,是通過(guò)消息連接產(chǎn)生的。如下圖所示。如下圖所示。11.6 體系結(jié)構(gòu)建模圖中,圖中,CActioner使用方法使用方法do1()來(lái)發(fā)送一條消息來(lái)發(fā)送一條消息do3()給給EEmployee,因此,因此,do1()依賴(lài)于依賴(lài)于do3()。依賴(lài)性向上傳。依賴(lài)性向上傳遞給所屬的類(lèi),因此,遞給所屬的類(lèi),因此,CActione
收藏
編號(hào):65494723
類(lèi)型:共享資源
大小:6.60MB
格式:ZIP
上傳時(shí)間:2022-03-24
40
積分
- 關(guān) 鍵 詞:
-
軟件工程基礎(chǔ)
軟件工程
基礎(chǔ)
全套
PPT
課件
- 資源描述:
-
《軟件工程基礎(chǔ)》全套PPT課件,軟件工程基礎(chǔ),軟件工程,基礎(chǔ),全套,PPT,課件
展開(kāi)閱讀全文
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
裝配圖網(wǎng)所有資源均是用戶(hù)自行上傳分享,僅供網(wǎng)友學(xué)習(xí)交流,未經(jīng)上傳用戶(hù)書(shū)面授權(quán),請(qǐng)勿作他用。