2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩171頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、2024年4月3日星期三,第1頁,第3章 軟件系統(tǒng)開發(fā)方法,3.1 軟件開發(fā)生命周期3.2 軟件開發(fā)模型3.3 傳統(tǒng)軟件開發(fā)方法3.4 面向?qū)ο筌浖_發(fā)方法3.5 RUP統(tǒng)一軟件開發(fā)過程3.6 敏捷軟件開發(fā)技術(shù),2024年4月3日星期三,第2頁,,在軟件開發(fā)的早期,人們常用的軟件開發(fā)方法是邊寫邊改法。這種開發(fā)方法在應(yīng)用開發(fā)中最為快捷,但由于其開發(fā)的隨意性,因而也最為低效。同時(shí),使用該方法的項(xiàng)目常常因?yàn)楣芾硎Э囟K結(jié)?;谶@種情

2、況,業(yè)界人士借鑒其它工程領(lǐng)域的方法,提出了許多有規(guī)則可言的軟件系統(tǒng)開發(fā)方法。最著名的當(dāng)數(shù)“瀑布式”方法了,即把軟件開發(fā)過程分解成這樣一些階段:制定開發(fā)計(jì)劃、需求分析和定義、系統(tǒng)設(shè)計(jì)、編碼實(shí)現(xiàn)、測試驗(yàn)證。然而,在軟件開發(fā)實(shí)踐中完全遵循這種過程取得成功的案例并不多。其原因主要在于這種方法有一個(gè)前提條件,那就是系統(tǒng)需求必須明確、不變。但在現(xiàn)實(shí)應(yīng)用中,這幾乎是不可能的。需求通常模糊不清,并且在系統(tǒng)開發(fā)期間隨時(shí)都有可能發(fā)生變化。因此軟件開發(fā)要求采

3、用的方法過程也必須能適應(yīng)這種變化,這就出現(xiàn)了其它一些軟件開發(fā)方法,如原型法、敏捷方法等。,2024年4月3日星期三,第3頁,3.1 軟件開發(fā)生命周期,正如任何事物一樣,軟件也有其孕育、誕生、成長、成熟以及衰亡的生命過程,一般稱其為“軟件生命周期”。,2024年4月3日星期三,第4頁,3.1 軟件開發(fā)生命周期,根據(jù)這一思想,可以得到軟件生命周期的六個(gè)階段:制定計(jì)劃需求分析和定義設(shè)計(jì)編碼測試運(yùn)行及維護(hù)。,2024年4月3日星期三

4、,第5頁,3.1 軟件開發(fā)生命周期,(1) 制定計(jì)劃(Planning)團(tuán)隊(duì)人員:分析人員、領(lǐng)域?qū)<壹坝脩舻?。這個(gè)階段的任務(wù)是確定待開發(fā)軟件系統(tǒng)的總體目標(biāo),給出軟件系統(tǒng)的功能、性能及接口等方面的要求。由團(tuán)隊(duì)人員協(xié)作,共同研究完成該項(xiàng)軟件開發(fā)任務(wù)的技術(shù)、經(jīng)濟(jì)、社會(huì)可行性,探討解決問題的各種可能方案,并對現(xiàn)有可利用資源、成本、可取得的效益、開發(fā)進(jìn)度等做出估計(jì),制定出完成該項(xiàng)開發(fā)任務(wù)的實(shí)施計(jì)劃,并編寫可行性研究報(bào)告。,2024年4月3日星

5、期三,第6頁,3.1 軟件開發(fā)生命周期,(2) 需求分析和定義(Requirement Analysis and Definition)團(tuán)隊(duì)人員:分析人員、測試人員、領(lǐng)域?qū)<壹坝脩舻?。該階段對于待開發(fā)軟件項(xiàng)目獲取的用戶需求進(jìn)行分析,并給出詳細(xì)定義。這個(gè)階段團(tuán)隊(duì)人員必須協(xié)同工作,讓軟件開發(fā)人員充分理解用戶的各項(xiàng)需求,并確定哪些需求是可以滿足的,哪些需求在現(xiàn)有技術(shù)下是不能滿足的,對能滿足的需求加以確切的描述。然后,編寫出軟件需求規(guī)格說明

6、書(SRS)或系統(tǒng)功能說明書,以及初步的系統(tǒng)用戶手冊、測試用例等。為了團(tuán)隊(duì)人員之間能很好地溝通,從這個(gè)階段開始通常會(huì)采用一些標(biāo)準(zhǔn)的建模語言(如:統(tǒng)一建模語言,Unified Modeling Language,簡稱UML)對系統(tǒng)建模。,2024年4月3日星期三,第7頁,3.1 軟件開發(fā)生命周期,(3) 軟件設(shè)計(jì)(Software Design)團(tuán)隊(duì)人員:架構(gòu)設(shè)計(jì)人員、軟件設(shè)計(jì)人員、數(shù)據(jù)庫設(shè)計(jì)員、用戶界面設(shè)計(jì)員、封裝體設(shè)計(jì)員和集成人員、

7、測試人員等。這個(gè)階段通常分為兩部分:概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。在軟件設(shè)計(jì)階段,軟件開發(fā)人員把已經(jīng)經(jīng)過用戶和領(lǐng)域?qū)<掖_認(rèn)的各項(xiàng)需求轉(zhuǎn)換成相應(yīng)的軟件體系結(jié)構(gòu)。結(jié)構(gòu)中的每一成份都是意義明確的子系統(tǒng)、模塊或用例,每個(gè)部分都和某些需求相對應(yīng),進(jìn)行所謂的概要設(shè)計(jì)。然后對每個(gè)模塊或用例要完成的工作采用合適的技術(shù)進(jìn)行具體的描述,如畫出模塊的程序流程圖或描述類的屬性、操作等,為源程序的編寫工作打下基礎(chǔ),即所謂的詳細(xì)設(shè)計(jì)。,2024年4月3日星期三,第8頁,

8、3.1 軟件開發(fā)生命周期,(4) 編碼(Coding)團(tuán)隊(duì)人員:編程人員、測試人員等。將詳細(xì)設(shè)計(jì)階段所描述的模塊程序流程圖或類的設(shè)計(jì)轉(zhuǎn)換為計(jì)算機(jī)能處理的程序代碼,即使用特定的程序設(shè)計(jì)語言表示的源程序。目前,通常使用高級(jí)程序設(shè)計(jì)語言編寫程序,如C語言、Java語言等。,2024年4月3日星期三,第9頁,3.1 軟件開發(fā)生命周期,(5) 軟件測試(Software Testing)團(tuán)隊(duì)人員:測試人員、開發(fā)人員、用戶等。測試是保證軟件

9、質(zhì)量的重要手段,其主要目的是通過軟件測試暴露出軟件中隱藏的錯(cuò)誤和缺陷。軟件測試的主要方式是在設(shè)計(jì)測試用例的基礎(chǔ)上檢驗(yàn)軟件的各個(gè)組成部分。軟件測試一般包括單元測試、集成測試、系統(tǒng)測試、驗(yàn)收測試等幾個(gè)階段。首先進(jìn)行單元測試,查找各模塊或類在功能和結(jié)構(gòu)上存在的問題并加以修改,這個(gè)過程會(huì)反復(fù)進(jìn)行;其次進(jìn)行集成測試,驗(yàn)證各軟件單元集成后形成的模塊能否達(dá)到概要設(shè)計(jì)規(guī)格說明中各模塊的設(shè)計(jì)目標(biāo);然后進(jìn)行系統(tǒng)測試,目的是對最終軟件系統(tǒng)進(jìn)行全面的測試,確保

10、最終軟件系統(tǒng)滿足產(chǎn)品需求并且遵循系統(tǒng)設(shè)計(jì);最后進(jìn)行確認(rèn)測試,以檢查已實(shí)現(xiàn)的軟件是否滿足了需求規(guī)格說明書中確定的各種需求,包括功能需求和性能需求,決定已開發(fā)的軟件能否交付用戶使用。,2024年4月3日星期三,第10頁,3.1 軟件開發(fā)生命周期,(6) 運(yùn)行/維護(hù)(Running/Maintenance)團(tuán)隊(duì)人員:系統(tǒng)支持人員等。已交付的軟件投入正式使用,軟件便進(jìn)入運(yùn)行階段。軟件在運(yùn)行過程中可能會(huì)因?yàn)榘l(fā)現(xiàn)了軟件中存在的錯(cuò)誤需要修改;或?yàn)?/p>

11、了適應(yīng)變化了的軟件工作環(huán)境,需做一些變更;或?yàn)榱嗽鰪?qiáng)軟件的功能需做變更等。這就稱為軟件維護(hù)。,2024年4月3日星期三,第11頁,3.2 軟件開發(fā)模型,從上節(jié)的內(nèi)容中我們知道,一個(gè)軟件的生命周期包含了若干個(gè)活動(dòng),那么,這些活動(dòng)應(yīng)該如何組織呢?不同的組織方式可能會(huì)產(chǎn)生很大差別的結(jié)果。實(shí)際上,與其它工程項(xiàng)目中安排各道工序類似,為了反應(yīng)軟件開發(fā)生命周期內(nèi)的各種活動(dòng)應(yīng)如何組織,各活動(dòng)之間應(yīng)如何銜接,需要用軟件開發(fā)模型做出直觀的圖示來表達(dá)。,2

12、024年4月3日星期三,第12頁,3.2 軟件開發(fā)模型,軟件開發(fā)模型是從軟件項(xiàng)目需求定義到軟件經(jīng)使用后被廢棄為止,跨越整個(gè)軟件生命周期的系統(tǒng)開發(fā)、運(yùn)作和維護(hù)的全部過程、活動(dòng)和任務(wù)的結(jié)構(gòu)框架,它給出了軟件開發(fā)活動(dòng)各個(gè)階段之間的關(guān)系。每種軟件生命周期模型代表一種軟件開發(fā)與管理的組織過程。,2024年4月3日星期三,第13頁,3.2 軟件開發(fā)模型,迄今為止,出現(xiàn)了多種軟件開發(fā)模型。如:瀑布模型螺旋模型演化模型噴泉模型智能模型增量模

13、型原型化模型,2024年4月3日星期三,第14頁,3.2.1 瀑布模型,瀑布模型將軟件生命周期劃分為制定開發(fā)計(jì)劃、需求分析和定義、軟件設(shè)計(jì)、程序編寫、軟件測試和運(yùn)行維護(hù)等六個(gè)基本活動(dòng),并且規(guī)定了它們自上而下、相互銜接的固定次序,如同瀑布流水,逐級(jí)下落。,2024年4月3日星期三,第15頁,3.2.1 瀑布模型,,瀑布模型是最早出現(xiàn)的軟件開發(fā)模型,在軟件工程中占有十分重要的地位,它提供了軟件開發(fā)的基本框架。瀑布模型規(guī)定了各項(xiàng)軟件工程活動(dòng)

14、,其核心思想是按工序?qū)栴}化簡,將功能的實(shí)現(xiàn)與設(shè)計(jì)分開,便于分工協(xié)作,即采用結(jié)構(gòu)化的分析與設(shè)計(jì)方法將邏輯實(shí)現(xiàn)與物理實(shí)現(xiàn)分開。,,2024年4月3日星期三,第16頁,3.2.1 瀑布模型,瀑布模型每項(xiàng)開發(fā)活動(dòng)均應(yīng)具有下述特征:(1) 從上一項(xiàng)活動(dòng)接收本項(xiàng)活動(dòng)的工作對象,作為本項(xiàng)活動(dòng)的輸入;(2) 利用這一輸入實(shí)施本項(xiàng)活動(dòng)應(yīng)完成的任務(wù);(3) 給出本項(xiàng)活動(dòng)的工作成果,作為輸出傳遞給下一項(xiàng)活動(dòng);(4) 對本項(xiàng)活動(dòng)實(shí)施的工作進(jìn)行評審。若

15、得到確認(rèn),則繼續(xù)下一項(xiàng)活動(dòng);否則,返回到前項(xiàng)活動(dòng),或更前一項(xiàng)活動(dòng)進(jìn)行返工。,,2024年4月3日星期三,第17頁,3.2.1 瀑布模型,瀑布模型中軟件維護(hù)的特點(diǎn):(1) 維護(hù)的具體要求是在軟件投入使用以后提出來的,經(jīng)過評價(jià),確定需求變更的必要性,才進(jìn)行維護(hù)工作。(2) 維護(hù)中對軟件的變更仍然要經(jīng)歷軟件生命周期在開發(fā)中已經(jīng)歷過的各項(xiàng)活動(dòng)。,2024年4月3日星期三,第18頁,3.2.1 瀑布模型,瀑布模型的優(yōu)點(diǎn):(1) 為軟件項(xiàng)目提

16、供了按階段劃分的檢查點(diǎn),強(qiáng)調(diào)開發(fā)的階段性。(2) 強(qiáng)調(diào)早期計(jì)劃及需求調(diào)查。(3) 強(qiáng)調(diào)產(chǎn)品測試和階段評審。(4) 強(qiáng)調(diào)文檔的重要性。,2024年4月3日星期三,第19頁,3.2.1 瀑布模型,瀑布模型的缺點(diǎn):(1) 在項(xiàng)目各個(gè)階段之間極少有反饋,往往會(huì)將早期的錯(cuò)誤引入到后期各個(gè)階段。(2) 依賴于早期進(jìn)行的唯一一次需求調(diào)查,用戶參與較少,不能適應(yīng)需求的變化。(3) 只有在項(xiàng)目生命周期的后期才能看到結(jié)果,可能與用戶的需求出現(xiàn)很

17、大的偏差,使風(fēng)險(xiǎn)推遲到項(xiàng)目開發(fā)的后期階段才顯露出來,因而失去及早糾正的機(jī)會(huì)。(4) 通過過多的強(qiáng)制完成日期和里程碑來跟蹤各個(gè)項(xiàng)目階段,靈活性較差。,2024年4月3日星期三,第20頁,3.2.1 瀑布模型,瀑布模型缺乏靈活性,無法通過開發(fā)活動(dòng)來理清本來不夠明確的需求,這將可能導(dǎo)致直到軟件開發(fā)完成時(shí)才發(fā)現(xiàn)所開發(fā)的軟件并非用戶所需要的,此時(shí)必將付出高額的代價(jià)才能糾正出現(xiàn)的偏差。瀑布模型一般適用于功能、性能明確、完整、無重大變化的軟件系統(tǒng)

18、的開發(fā)。如操作系統(tǒng)、編譯系統(tǒng)等系統(tǒng)軟件的開發(fā)。當(dāng)用戶需求不明確或經(jīng)常變更時(shí),不宜采用瀑布模型,可以考慮其它的架構(gòu)來進(jìn)行項(xiàng)目管理,如:演化模型等。,2024年4月3日星期三,第21頁,3.2.2 演化模型,演化模型主要針對事先不能完整定義需求的軟件開發(fā)。用戶可以給出待開發(fā)系統(tǒng)的核心需求,并且當(dāng)看到核心需求實(shí)現(xiàn)后,能夠有效地提出反饋,以支持系統(tǒng)的最終設(shè)計(jì)和實(shí)現(xiàn)。,2024年4月3日星期三,第22頁,3.2.2 演化模型,該模型可以表示為:

19、第一次迭代(需求→設(shè)計(jì)→編碼→測試→集成)→反饋→第二次迭代(需求→設(shè)計(jì)→編碼→測試→集成)→反饋→......,,2024年4月3日星期三,第23頁,3.2.2 演化模型,,2024年4月3日星期三,第24頁,3.2.2 演化模型,演化模型的主要優(yōu)點(diǎn):(1) 用戶能在開發(fā)過程中而不是開發(fā)接近尾聲時(shí)看到自己所需要的軟件產(chǎn)品。對發(fā)現(xiàn)的問題能夠提早解決。(2) 在一定程度上減少了軟件開發(fā)活動(dòng)的盲目性。如果在某次迭代中,其需求沒有滿足用

20、戶的要求,軟件開發(fā)人員可根據(jù)用戶的反饋信息在下一次迭代中予以修正。(3) 將系統(tǒng)中難度較大、風(fēng)險(xiǎn)較高的部分安排在早期的迭代中,可增加項(xiàng)目的成功率。,2024年4月3日星期三,第25頁,3.2.2 演化模型,演化模型的缺點(diǎn)(1) 由于項(xiàng)目需求在開發(fā)初期不可能完全弄清楚,這樣會(huì)給系統(tǒng)總體設(shè)計(jì)帶來很大的困難,并影響系統(tǒng)設(shè)計(jì)的完整性。(2) 如果在開發(fā)過程中缺乏嚴(yán)格的過程管理,演化模型很可能退化為邊寫邊改模式。(3) 如果沒有一定的約束

21、條件,可能永遠(yuǎn)無法得到一個(gè)最終的軟件產(chǎn)品。,2024年4月3日星期三,第26頁,3.2.2 演化模型,采用演化模型的軟件開發(fā)過程,實(shí)際上是從最初的原型逐步演化成最終軟件產(chǎn)品的過程。在整個(gè)演化過程中,不斷修正缺陷,以開發(fā)出最終滿足用戶需要的軟件產(chǎn)品。演化模型特別適用于用戶需求不夠明確的軟件開發(fā)項(xiàng)目,但不適宜用于大而復(fù)雜的系統(tǒng)。,2024年4月3日星期三,第27頁,3.2.3 螺旋模型,對于復(fù)雜的大型軟件系統(tǒng),開發(fā)一個(gè)原型往往很難達(dá)到要求

22、,顯然用單一的演化模型很難開發(fā)出這樣的軟件系統(tǒng)。那么,究竟要使用什么樣的模型才適合用來開發(fā)大型而復(fù)雜的軟件系統(tǒng)呢?答案就是螺旋模型。,2024年4月3日星期三,第28頁,3.2.3 螺旋模型,螺旋模型沿著螺線旋轉(zhuǎn),在笛卡爾坐標(biāo)的四個(gè)象限上分別表達(dá)了每個(gè)迭代周期的四個(gè)階段,從左象限按順時(shí)針方向依次為:,,,2024年4月3日星期三,第29頁,3.2.3 螺旋模型,(1) 制定計(jì)劃確定該階段的軟件目標(biāo),選定為完成這些目標(biāo)的實(shí)施方案,設(shè)定這

23、些方案的約束條件。(2) 風(fēng)險(xiǎn)分析分析所選方案,識(shí)別并努力消除各種潛在的風(fēng)險(xiǎn),通常用構(gòu)建原型的方法來消除風(fēng)險(xiǎn)。如果不能消除風(fēng)險(xiǎn),則停止開發(fā)工作或降低軟件項(xiàng)目規(guī)模。如果成功地消除了所有風(fēng)險(xiǎn),則轉(zhuǎn)向下一個(gè)階段。(3) 實(shí)施工程實(shí)施軟件開發(fā)。這個(gè)階段相當(dāng)于一個(gè)純粹的瀑布模型。(4) 用戶評估由用戶評價(jià)開發(fā)工作,提出修改建議。,2024年4月3日星期三,第30頁,3.2.3 螺旋模型,螺旋模型將瀑布模型和演化模型結(jié)合起來,吸取了兩者

24、的優(yōu)點(diǎn),并加入了兩種模型都忽略了的風(fēng)險(xiǎn)分析,彌補(bǔ)了兩種模型的不足。,2024年4月3日星期三,第31頁,3.2.3 螺旋模型,軟件風(fēng)險(xiǎn)是任何軟件開發(fā)項(xiàng)目中普遍存在的實(shí)際問題,項(xiàng)目規(guī)模越大,問題越復(fù)雜,資源、成本、進(jìn)度等因素的不確定性就越大,承擔(dān)該項(xiàng)目所冒的風(fēng)險(xiǎn)也就越大。軟件風(fēng)險(xiǎn)可能在不同程度上損害軟件的開發(fā)過程和軟件產(chǎn)品的質(zhì)量。因此,在軟件開發(fā)過程中必須及時(shí)對風(fēng)險(xiǎn)進(jìn)行識(shí)別、分析,采取應(yīng)有的措施,以消除或較少風(fēng)險(xiǎn)的損害。,2024年4月3

25、日星期三,第32頁,3.2.3 螺旋模型,在螺旋模型中,沿著螺線由內(nèi)向外每旋轉(zhuǎn)一圈,也就是每完成一次迭代過程,軟件開發(fā)就前進(jìn)一個(gè)層次,開發(fā)出一個(gè)更加完善的軟件版本。在每一圈螺線上,風(fēng)險(xiǎn)分析作為開發(fā)是否能夠繼續(xù)下去的判斷點(diǎn)。假如風(fēng)險(xiǎn)太大,開發(fā)人員和用戶無法承受,開發(fā)項(xiàng)目有可能被終止。但多數(shù)情況下沿螺線的活動(dòng)會(huì)繼續(xù)下去,并由內(nèi)向外逐步延伸,最終得到用戶所期望的系統(tǒng)。,2024年4月3日星期三,第33頁,3.2.3 螺旋模型,螺旋模型的優(yōu)點(diǎn):

26、(1) 設(shè)計(jì)上的靈活性,可以保證在項(xiàng)目的各個(gè)階段進(jìn)行變更。(2) 以小的分段來構(gòu)建大型系統(tǒng),使資源、成本和進(jìn)度的估計(jì)變得更加簡單容易。(3) 用戶始終參與到每個(gè)階段的開發(fā)中,保證了項(xiàng)目的正確性與可控性。,2024年4月3日星期三,第34頁,3.2.3 螺旋模型,螺旋模型的缺點(diǎn):(1) 采用螺旋模型需要具有豐富的風(fēng)險(xiǎn)評估經(jīng)驗(yàn)和專門知識(shí),在風(fēng)險(xiǎn)較大的項(xiàng)目開發(fā)中,如果未能及時(shí)識(shí)別出潛在的風(fēng)險(xiǎn),或者消除風(fēng)險(xiǎn)的能力不足,都會(huì)造成極其重大的

27、損失。(2) 過多的迭代次數(shù)會(huì)增加軟件開發(fā)成本,延遲交付使用的時(shí)間。,2024年4月3日星期三,第35頁,3.2.3 螺旋模型,螺旋模型支持需求不明確,特別是大型軟件系統(tǒng)的開發(fā),并支持面向規(guī)格說明、面向過程、面向?qū)ο蟮榷喾N軟件開發(fā)方法。由于螺旋模型是以風(fēng)險(xiǎn)分析驅(qū)動(dòng)的,一旦在開發(fā)過程中風(fēng)險(xiǎn)過大就要停止繼續(xù)開發(fā),因此,螺旋模型比較適合應(yīng)用于產(chǎn)品研發(fā)或機(jī)構(gòu)內(nèi)部大型的復(fù)雜系統(tǒng)的開發(fā),而不適合用于合同項(xiàng)目的開發(fā)。如果要將螺旋模型作為合同項(xiàng)目的開

28、發(fā)模型,則必須在簽訂合同之前考慮清楚所有的開發(fā)風(fēng)險(xiǎn),否則,在開發(fā)過程中如果由于風(fēng)險(xiǎn)過大而中途停止開發(fā),就會(huì)賠償經(jīng)濟(jì)損失或者承擔(dān)法律責(zé)任。,2024年4月3日星期三,第36頁,3.2.4 增量模型,采用瀑布模型或演化模型開發(fā)項(xiàng)目時(shí),目標(biāo)都是一次性就把一個(gè)滿足所有需求的產(chǎn)品提交給用戶。然而,增量模型則與之不同,它分批地逐步向用戶提交可操作的產(chǎn)品。,2024年4月3日星期三,第37頁,3.2.4 增量模型,增量模型融合了瀑布模型的基本成分和快

29、速原型模型的迭代特征。該模型采用隨著日程的進(jìn)展而交錯(cuò)進(jìn)行的線性序列,每一個(gè)線性序列產(chǎn)生軟件的一個(gè)可發(fā)布的“增量”。當(dāng)使用增量模型時(shí),第1個(gè)增量往往是核心產(chǎn)品,即第1個(gè)增量實(shí)現(xiàn)了基本的需求,但很多補(bǔ)充的特征還沒有發(fā)布??蛻魧γ恳粋€(gè)增量的使用和評估都作為下一個(gè)增量發(fā)布的新特征和功能,這個(gè)過程在每一個(gè)增量發(fā)布后不斷重復(fù),直到產(chǎn)生了最終的完善產(chǎn)品。增量模型強(qiáng)調(diào)每一個(gè)增量均發(fā)布一個(gè)可操作的產(chǎn)品。,2024年4月3日星期三,第38頁,3.2.4

30、 增量模型,,2024年4月3日星期三,第39頁,3.2.4 增量模型,增量模型的優(yōu)點(diǎn):(1) 人員分配靈活,剛開始不用投入大量人力資源,可以避免不必要的浪費(fèi)。(2) 重要功能被首先交付,可以獲得最多的測試,保證軟件產(chǎn)品的質(zhì)量。(3) 早期發(fā)布的可操作產(chǎn)品可以作為原型為后期增量開發(fā)提供需求。(4) 在較短時(shí)間內(nèi)向用戶提交部分工作的產(chǎn)品,可以讓用戶對開發(fā)項(xiàng)目和開發(fā)團(tuán)隊(duì)有信心。(5) 用戶能看到所開發(fā)軟件的中間版本,可以使最終產(chǎn)品

31、不至于偏離用戶的需求。(6) 可以將技術(shù)難度大的部分作為早期的增量,能夠有效地管理與控制技術(shù)風(fēng)險(xiǎn)。,2024年4月3日星期三,第40頁,3.2.4 增量模型,增量模型的缺點(diǎn):(1) 在開發(fā)過程中,需求的變化是不可避免的。如果不能有效地控制并管理好需求的變更,增量模型很容易退化為邊寫邊改模式,從而使軟件過程的控制失去整體性。(2) 由于各個(gè)增量逐漸并入已有的結(jié)構(gòu),所以加入的增量部分不能破壞已構(gòu)造好的系統(tǒng)部分,這需要軟件具備開放式的體

32、系結(jié)構(gòu),對開發(fā)團(tuán)隊(duì)的技術(shù)要求更高。(3) 難以對所有增量進(jìn)行有效的集成。,2024年4月3日星期三,第41頁,3.2.4 增量模型,增量模型與原型模型、演化模型一樣,本質(zhì)上是迭代的,都能應(yīng)用在需求不明確、需求變化大的軟件項(xiàng)目的開發(fā)中,但與其它迭代式的模型不一樣的是,增量模型強(qiáng)調(diào)每一個(gè)增量均發(fā)布一個(gè)可操作產(chǎn)品。早期的增量是最終產(chǎn)品的“可拆卸”版本。用戶可對每一個(gè)可操作產(chǎn)品進(jìn)行評估,能很好地滿足用戶需求,大大提高了項(xiàng)目的成功率。,2024

33、年4月3日星期三,第42頁,3.3 傳統(tǒng)軟件開發(fā)方法,在傳統(tǒng)的軟件開發(fā)過程中,最重要的是明確和分解系統(tǒng)功能。這種方法看起來很符合人們處理事務(wù)的流程,是實(shí)現(xiàn)預(yù)期目標(biāo)的最直接的途徑。然而,一旦系統(tǒng)的需求發(fā)生變化,這種基于功能分解的系統(tǒng)將會(huì)需要大量的修改工作。隨著計(jì)算機(jī)技術(shù)、網(wǎng)絡(luò)技術(shù)的不斷發(fā)展,計(jì)算機(jī)應(yīng)用范圍不斷擴(kuò)大,軟件系統(tǒng)的規(guī)模也變得越來越龐大?;趥鹘y(tǒng)生命周期的結(jié)構(gòu)化軟件開發(fā)方法逐漸暴露出了它自身的一些缺點(diǎn):難以理解和維護(hù)、可重用性差等

34、。這些缺點(diǎn)是由什么原因引起的?,2024年4月3日星期三,第43頁,3.3 傳統(tǒng)軟件開發(fā)方法,在結(jié)構(gòu)化軟件開發(fā)(傳統(tǒng)的面向過程的軟件開發(fā)方法)的整個(gè)過程中,重點(diǎn)放在了操作上。這些操作是通過函數(shù)、模塊或一條簡單的指令來執(zhí)行的。在整個(gè)開發(fā)過程中,過程化程序設(shè)計(jì)方法完全將程序中的一個(gè)非常重要的方面——數(shù)據(jù),與操作分離開來,使得數(shù)據(jù)可以被所有函數(shù)或過程完全訪問。,,2024年4月3日星期三,第44頁,3.3 傳統(tǒng)軟件開發(fā)方法,傳統(tǒng)軟件開發(fā)方法

35、遵循軟件生命周期,整個(gè)開發(fā)過程包括可行性研究、需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、編碼、測試和維護(hù)等六個(gè)階段。,2024年4月3日星期三,第45頁,3.3 傳統(tǒng)軟件開發(fā)方法,結(jié)構(gòu)化方法是傳統(tǒng)軟件開發(fā)方法的一個(gè)很好的例子,包括結(jié)構(gòu)化分析、結(jié)構(gòu)化設(shè)計(jì)、結(jié)構(gòu)化編程和結(jié)構(gòu)化測試等。,2024年4月3日星期三,第46頁,3.3 傳統(tǒng)軟件開發(fā)方法,結(jié)構(gòu)化分析的工具是數(shù)據(jù)流圖和數(shù)據(jù)字典,用來表達(dá)和理解問題的數(shù)據(jù)域和功能域。數(shù)據(jù)域包括數(shù)據(jù)流、數(shù)據(jù)內(nèi)容和數(shù)據(jù)結(jié)

36、構(gòu),而功能域則反映這三個(gè)方面的控制信息。通常將一個(gè)復(fù)雜問題按功能進(jìn)行分解并逐層細(xì)化。,2024年4月3日星期三,第47頁,3.3 傳統(tǒng)軟件開發(fā)方法,結(jié)構(gòu)化設(shè)計(jì)的基本思想是模塊化思想。將數(shù)據(jù)流圖進(jìn)一步細(xì)化到每一個(gè)子功能都清晰易懂,每個(gè)模塊完成一個(gè)子功能,每層模塊合成一個(gè)高一級(jí)的功能??傮w設(shè)計(jì)階段包括數(shù)據(jù)庫結(jié)構(gòu)設(shè)計(jì)、用戶界面設(shè)計(jì)、功能模塊結(jié)構(gòu)設(shè)計(jì)等。詳細(xì)設(shè)計(jì)是根據(jù)每個(gè)模塊的功能設(shè)計(jì)實(shí)現(xiàn)算法以及實(shí)現(xiàn)這些算法的邏輯控制流程。詳細(xì)設(shè)計(jì)的表示工具有

37、程序流程圖、PAD圖、N-S圖、判定表和判定樹、偽碼和PDL等。,2024年4月3日星期三,第48頁,3.3 傳統(tǒng)軟件開發(fā)方法,編程是指把軟件設(shè)計(jì)的結(jié)果轉(zhuǎn)換為用某種程序設(shè)計(jì)語言所表示的程序代碼。結(jié)構(gòu)化的程序設(shè)計(jì)語言,例如,F(xiàn)ortran、Pascal、C等,是通過把程序劃分成函數(shù)和功能模塊來控制整個(gè)程序的執(zhí)行流程的。,2024年4月3日星期三,第49頁,3.3 傳統(tǒng)軟件開發(fā)方法,傳統(tǒng)軟件開發(fā)方法有以下四個(gè)特點(diǎn):(1) 以模塊作為基本的

38、構(gòu)造單元。使得編程與現(xiàn)實(shí)世界之間存在理解鴻溝。(2) 自頂向下逐步細(xì)分功能。系統(tǒng)重用性很差。(3) 不同模塊之間的信息傳遞通過函數(shù)的調(diào)用來完成。其控制信息傳遞效率極其低下。(4) 堅(jiān)持嚴(yán)格的階段性評審。雖然能夠保證軟件質(zhì)量,但整個(gè)開發(fā)過程缺少應(yīng)有的靈活性。,2024年4月3日星期三,第50頁,3.3 傳統(tǒng)軟件開發(fā)方法,當(dāng)函數(shù)與被函數(shù)調(diào)用的數(shù)據(jù)分離時(shí),數(shù)據(jù)被破壞的可能性極大。另外,當(dāng)數(shù)據(jù)和函數(shù)相互獨(dú)立時(shí),總存在著用錯(cuò)誤的數(shù)據(jù)調(diào)用正確

39、的程序模塊或用正確的數(shù)據(jù)調(diào)用了錯(cuò)誤的程序模塊的可能性。所以,需要有一種方法來約束所有函數(shù)對數(shù)據(jù)的訪問,即將這些數(shù)據(jù)有效地隱藏起來,這就是面向?qū)ο蟮男畔㈦[藏思想。,2024年4月3日星期三,第51頁,3.3 傳統(tǒng)軟件開發(fā)方法,傳統(tǒng)的面向過程的結(jié)構(gòu)化開發(fā)方法的另一個(gè)問題是它不能很好地表示現(xiàn)實(shí)世界。這些現(xiàn)實(shí)世界中的事物可直接映射到面向?qū)ο蟮慕饪臻g,用面向?qū)ο蟮能浖_發(fā)方法能很好地解決現(xiàn)實(shí)世界的問題。,2024年4月3日星期三,第52頁,3.

40、3 傳統(tǒng)軟件開發(fā)方法,為了提高系統(tǒng)的可理解性、可維護(hù)性和可重用性,并能很好地表示現(xiàn)實(shí)世界,開發(fā)軟件項(xiàng)目時(shí),最好采用面向?qū)ο筌浖_發(fā)技術(shù)。,2024年4月3日星期三,第53頁,3.4 面向?qū)ο筌浖_發(fā)技術(shù),“對象”一詞在現(xiàn)實(shí)生活中經(jīng)常會(huì)遇到,它表示現(xiàn)實(shí)世界中的某個(gè)具體的事物,例如,一臺(tái)計(jì)算機(jī)?,F(xiàn)實(shí)世界中的事物包含了物質(zhì)和意識(shí)兩大部分,物質(zhì)表達(dá)的是具體的事物,而意識(shí)則描述了某一個(gè)抽象的概念,是對客觀存在的事物的一種概括。對象的概念源于用

41、計(jì)算機(jī)程序?qū)ΜF(xiàn)實(shí)世界的復(fù)雜事物進(jìn)行建模的過程。,2024年4月3日星期三,第54頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-1:對象對象是指現(xiàn)實(shí)世界中各種各樣的實(shí)體。它既可以是具體的能觸及的事物,如一個(gè)人、一棟大樓、一架飛機(jī),甚至一個(gè)地球等;也可以是無法觸及的抽象事物,如一項(xiàng)計(jì)劃、一次約會(huì)、一場演出等。一個(gè)對象既可以非常簡單,又可以非常復(fù)雜,復(fù)雜的對象往往可以由若干個(gè)簡單的對象組合而成。,2024年4月3日星期三,第55頁,3.4.1

42、 面向?qū)ο蟮幕靖拍?對象定義了狀態(tài)和行為。對象的狀態(tài)用數(shù)據(jù)值來表示,而對象的行為則用來改變對象的狀態(tài)。在面向?qū)ο蟮南到y(tǒng)中,對象是基本的運(yùn)行實(shí)體。,2024年4月3日星期三,第56頁,3.4.1 面向?qū)ο蟮幕靖拍?所有這些對象,除去它們都是現(xiàn)實(shí)世界中所存在的事物之外,它們都還具有各自不同的特征:(1) 有一個(gè)名字用來區(qū)別于其它對象。例如:張三、李四等。,2024年4月3日星期三,第57頁,3.4.1 面向?qū)ο蟮幕靖拍?(2) 有一

43、個(gè)狀態(tài)用來描述對象的某些特征。例如:對象張三的狀態(tài):姓名:張三性別:男身高:179cm體重:71kg,2024年4月3日星期三,第58頁,3.4.1 面向?qū)ο蟮幕靖拍?(3) 有一組操作,每一個(gè)操作決定對象的一種功能或行為。對象的操作可分為兩類:一類是自身所承受的操作,使用setter、getter作為操作名;一類是施加于其它對象的操作。例如:對象張三的操作(可完成的功能):回答姓名回答性別回答身高回答體重打電話

44、踢足球駕車,,,屬于對象自身所承受的操作,屬于施加于其它對象的操作,2024年4月3日星期三,第59頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-2:類類是對一組客觀對象的抽象,它將該組對象所具有的共同特征(包括結(jié)構(gòu)特征和行為特征)集中起來,以說明該組對象的性質(zhì)和能力。例如:“人”這個(gè)詞就是抽象了所有人(單個(gè)的人,如張三、李四等,這些都是對象)的共同之處。,2024年4月3日星期三,第60頁,3.4.1 面向?qū)ο蟮幕靖拍?在面向?qū)?/p>

45、象編程中,通常把類定義為抽象數(shù)據(jù)類型,而對象是類的類型變量。當(dāng)定義了一個(gè)類以后,就可以生成任意多個(gè)屬于這個(gè)類的對象,這個(gè)過程叫做實(shí)例化。例如,用Java語言定義一個(gè)類Car為:public class Car { ……}這時(shí)可生成任意多個(gè)屬于Car類的對象:Car car1 = new Car();Car car2 = new Car();,2024年4月3日星期三,第61頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-3:

46、類與對象的關(guān)系組成類的對象均為該類的實(shí)例。類與對象之間的關(guān)系就是抽象與具體的關(guān)系。例如,張三是一個(gè)學(xué)生,學(xué)生是一個(gè)類,而張三作為一個(gè)具體的對象,是學(xué)生類的一個(gè)實(shí)例。類是多個(gè)實(shí)例的綜合抽象,而實(shí)例又是類的個(gè)體事物。,2024年4月3日星期三,第62頁,3.4.1 面向?qū)ο蟮幕靖拍?在面向?qū)ο缶幊讨?,定義一個(gè)類就定義了這個(gè)類的一系列屬性與操作,對于同一個(gè)類的不同實(shí)例之間,必定具有如下特點(diǎn):(1) 相同的屬性集合;(2) 相同的操作集

47、合;(3) 不同的對象名。,2024年4月3日星期三,第63頁,3.4.1 面向?qū)ο蟮幕靖拍?相同的屬性集合與操作集合用于標(biāo)識(shí)這些對象屬于同一個(gè)類,用不同的對象名來區(qū)別不同的對象。,2024年4月3日星期三,第64頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-4:面向?qū)ο竺嫦驅(qū)ο螅∣bject-Oriented,簡稱OO)是指人們按照自然的思維方式認(rèn)識(shí)客觀世界,采用基于對象(實(shí)體)的概念建立模型,模擬客觀世界,從而用來分析、設(shè)計(jì)和實(shí)

48、現(xiàn)軟件的方法。把軟件組織成一系列離散的、合并了數(shù)據(jù)結(jié)構(gòu)和行為的對象集。,2024年4月3日星期三,第65頁,3.4.1 面向?qū)ο蟮幕靖拍?面向?qū)ο笫钱?dāng)前計(jì)算機(jī)界關(guān)注的重點(diǎn),它是90年代主流軟件開發(fā)方法。通過面向?qū)ο蟮睦砟钍褂?jì)算機(jī)軟件系統(tǒng)能與現(xiàn)實(shí)世界中的系統(tǒng)一一對應(yīng)。面向?qū)ο蟮母拍詈蛻?yīng)用已超越了程序設(shè)計(jì)和軟件開發(fā),擴(kuò)展到很寬的范圍。如數(shù)據(jù)庫系統(tǒng)、分布式系統(tǒng)、人工智能等領(lǐng)域。,2024年4月3日星期三,第66頁,3.4.1 面向?qū)ο蟮幕?/p>

49、概念,采用面向?qū)ο蠹夹g(shù)開發(fā)軟件的方法,稱為面向?qū)ο筌浖_發(fā)方法。面向?qū)ο蠓椒ň哂幸韵聨讉€(gè)特性:(1) 對象唯一性每個(gè)對象都有唯一的標(biāo)識(shí)(如同人們的身份證號(hào)碼),通過這個(gè)標(biāo)識(shí),可以找到相應(yīng)的對象。在對象的整個(gè)生命周期(從對象的創(chuàng)建到對象的消亡)中,它的標(biāo)識(shí)都不會(huì)改變。不同的對象(即使其它屬性完全相同,例如兩個(gè)完全一樣的球)必須具有不同的標(biāo)識(shí)。(2) 封裝性具有一致的數(shù)據(jù)結(jié)構(gòu)(屬性)和行為(操作)的對象抽象成類。(3) 繼承性子

50、類自動(dòng)共享父類的數(shù)據(jù)結(jié)構(gòu)和行為的機(jī)制,這是類之間的一種關(guān)系。繼承性是面向?qū)ο蟪绦蛟O(shè)計(jì)語言不同于其它程序設(shè)計(jì)語言最重要的特點(diǎn),是其它語言所沒有的。(4) 多態(tài)性它是面向?qū)ο笙到y(tǒng)中的又一個(gè)重要特性。多態(tài)性描述的是同一個(gè)消息可以根據(jù)發(fā)送消息對象的不同采用多種不同的行為方式。即是指相同的操作或函數(shù)可作用于多種類型的對象上并獲得不同的結(jié)果。不同的對象,收到同一消息可以產(chǎn)生不同的結(jié)果,這種現(xiàn)象就稱為多態(tài)性。,2024年4月3日星期三,第67頁,

51、3.4.1 面向?qū)ο蟮幕靖拍?概念3-5:封裝及面向?qū)ο笙到y(tǒng)的封裝性封裝也叫做信息隱藏。從字面上理解,封裝就是將某事物包裝起來,使外界不了解其實(shí)際內(nèi)容。從軟件開發(fā)的角度,封裝是指將一個(gè)數(shù)據(jù)和與這個(gè)數(shù)據(jù)有關(guān)的各種操作放在一起,形成一個(gè)能動(dòng)的實(shí)體——對象,使用者不必知道對象的內(nèi)部結(jié)構(gòu),只需根據(jù)對象提供的外部接口訪問對象。從使用者的角度看,這些對象就像一個(gè)“黑盒子”,其內(nèi)部數(shù)據(jù)和行為是被隱藏起來、看不見的。面向?qū)ο笙到y(tǒng)的封裝性是一種信息

52、隱藏技術(shù),它隱藏了某一方法的具體執(zhí)行步驟,取而代之的是通過消息傳遞機(jī)制傳遞消息給它。,2024年4月3日星期三,第68頁,3.4.1 面向?qū)ο蟮幕靖拍?封裝的意義在于保護(hù)或者防止數(shù)據(jù)或者程序代碼被我們無意中破壞,以提高系統(tǒng)的安全性。既然封裝了對象,那么,怎樣才能訪問對象呢?答案是通過對象提供的公共消息接口來訪問對象。下面是一個(gè)用Java語言所定義的類:,2024年4月3日星期三,第69頁,3.4.1 面向?qū)ο蟮幕靖拍?public

53、class Employee { private String name; private int age; private float salary; private String rank; private void calculateSalary(float subtract) { salary = salary – subtract; } protected int getA

54、ge() { return age; } public void setSalary(float salary) { this.salary = salary; } public float getSalary() { return salary; } ……},2024年4月3日星期三,第70頁,3.4.1 面向?qū)ο蟮幕靖拍?在上面所定義的職員(Employee

55、)類中,包含的數(shù)據(jù)有職員姓名(name)、年齡(age)、工資(salary)、職位(rank)。這些數(shù)據(jù)被定義為私有數(shù)據(jù)(用private定義),就被隱藏起來,對于外部對象來說就不可以直接訪問了。它所包含的成員方法或成員函數(shù)(操作)有三種類型的可見性:,2024年4月3日星期三,第71頁,3.4.1 面向?qū)ο蟮幕靖拍?(1) 私有的用private關(guān)鍵字標(biāo)識(shí),如:calculateSalary,這樣的成員方法或函數(shù)不向外部公開,只

56、供對象內(nèi)部自己使用。(2) 受保護(hù)的用protected關(guān)鍵字標(biāo)識(shí),如:getAge,這樣的成員方法或函數(shù)只向部分外界公開,只對派生類對象提供服務(wù)。(3) 公有的用public關(guān)鍵字標(biāo)識(shí),如:getSalary等,這樣的成員方法或函數(shù)向所有的外界公開,它可以響應(yīng)外界對象的請求。,2024年4月3日星期三,第72頁,3.4.1 面向?qū)ο蟮幕靖拍?定義為公有的成員方法或函數(shù),才是對象提供的公共消息接口。外部對象只有通過這些公共接口

57、才能訪問到對象的內(nèi)部數(shù)據(jù),這就是所謂的信息隱藏技術(shù)。,2024年4月3日星期三,第73頁,3.4.1 面向?qū)ο蟮幕靖拍?根據(jù)對封裝的定義可以看出,封裝應(yīng)該具有下面幾個(gè)條件:(1) 具有一個(gè)清晰的邊界。對象所有的私有數(shù)據(jù)、成員方法或函數(shù)的實(shí)現(xiàn)細(xì)節(jié)都被固定在這個(gè)邊界內(nèi)。(2) 具有一個(gè)接口。這個(gè)接口描述了對象之間的交互作用,它就是消息。(3) 對象內(nèi)部的實(shí)現(xiàn)代碼受到封裝體的保護(hù),其它對象不能直接修改本對象所擁有的數(shù)據(jù)和代碼。,202

58、4年4月3日星期三,第74頁,3.4.1 面向?qū)ο蟮幕靖拍?面向?qū)ο笙到y(tǒng)中的封裝以對象為單位,即主要是指對象的封裝,該對象的特性是由它所屬的類說明來描述,也就是說在類的定義中實(shí)現(xiàn)封裝。被封裝的對象通常被稱為抽象數(shù)據(jù)類型。封裝性提高了對象內(nèi)部數(shù)據(jù)的安全性。,2024年4月3日星期三,第75頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-6:繼承及面向?qū)ο笙到y(tǒng)的繼承性繼承是指一個(gè)類能夠從另一個(gè)類那里獲得一些特性。在這個(gè)過程中,超類把它的特性

59、賦給了子類。面向?qū)ο笙到y(tǒng)的繼承性是對具有層次關(guān)系的類的屬性和操作進(jìn)行共享的一種方式。在面向?qū)ο笙到y(tǒng)中,若沒有引入繼承的概念,所有的類就會(huì)變成一盤各自為政、彼此獨(dú)立的散沙,軟件重用級(jí)別較低,每次軟件開發(fā)就只能從“零”開始。,2024年4月3日星期三,第76頁,3.4.1 面向?qū)ο蟮幕靖拍?繼承是面向?qū)ο筌浖夹g(shù)中的一個(gè)概念。如果一個(gè)類A繼承自另一個(gè)類B,就把這個(gè)A稱為B的“子類”或“派生類”,而把B稱為A的“父類”或“超類”或“基類”

60、。例如,在通常的信息管理應(yīng)用系統(tǒng)中,都會(huì)涉及到用戶權(quán)限管理,常常會(huì)有“一般用戶”和“系統(tǒng)管理員”兩種角色,而“一般用戶”和“系統(tǒng)管理員”都是“用戶”,所以,“一般用戶”類和“系統(tǒng)管理員”類都可以繼承自“用戶”類。在這里,“一般用戶”類和“系統(tǒng)管理員”類都是“用戶”類的子類,而“用戶”類則是“一般用戶”類和“系統(tǒng)管理員”類的父類。,2024年4月3日星期三,第77頁,3.4.1 面向?qū)ο蟮幕靖拍?繼承可以使得子類具有父類的各種屬性和方法

61、,而不需要再次編寫相同的代碼。在子類繼承父類時(shí),既可以重新定義子類的某些屬性和方法,也可以重寫某些方法,來覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。,2024年4月3日星期三,第78頁,3.4.1 面向?qū)ο蟮幕靖拍?繼承有兩個(gè)方面的作用:①避免代碼冗余,提高可理解性和可維護(hù)性;②繼承是從老對象生成新對象的一種代碼重用機(jī)制,使系統(tǒng)更具靈活性和適應(yīng)性,它使得解釋多態(tài)性成為可能。,2024年4月3日星期三,第79頁,3.4.1

62、 面向?qū)ο蟮幕靖拍?繼承有單繼承和多繼承之分。,,,單繼承,多繼承,2024年4月3日星期三,第80頁,3.4.1 面向?qū)ο蟮幕靖拍?多重繼承的引入,使面向?qū)ο笙到y(tǒng)大大增加了模擬現(xiàn)實(shí)世界的能力,但是系統(tǒng)結(jié)構(gòu)變得非常復(fù)雜,增加了系統(tǒng)的理解與維護(hù)難度。在面向?qū)ο蟪绦蛟O(shè)計(jì)語言中,C++支持多繼承,而Java語言只支持單繼承,不支持多繼承。,2024年4月3日星期三,第81頁,3.4.1 面向?qū)ο蟮幕靖拍?在面向?qū)ο箝_發(fā)中,繼承性不僅作

63、用在對操作的繼承,還作用在對數(shù)據(jù)的繼承,也就是說,既具有結(jié)構(gòu)特性的繼承性,又具有行為特性的繼承性。子類是否可以訪問父類的所有成員變量和成員方法(或成員函數(shù))?在前面介紹封裝性時(shí)談到,定義類的數(shù)據(jù)成員與方法成員有三種訪問域(三種可見性),即公有訪問域(public)、受保護(hù)訪問域(protected)、私有訪問域(private)。父類的成員若定義為受保護(hù)訪問域和公有訪問域,子類是可以訪問的;若父類成員定義為私有訪問域,子類則無權(quán)訪問。

64、,2024年4月3日星期三,第82頁,3.4.1 面向?qū)ο蟮幕靖拍?概念3-7:重載及面向?qū)ο笙到y(tǒng)的多態(tài)性一個(gè)類中的操作具有相同的名稱和不同的參數(shù),這樣的操作被稱為“重載”。面向?qū)ο笙到y(tǒng)的多態(tài)性是指,當(dāng)不同的對象收到相同的消息時(shí)產(chǎn)生不同的動(dòng)作。常用在功能相同但參數(shù)的數(shù)據(jù)類型有微小差別的操作中。,2024年4月3日星期三,第83頁,3.4.1 面向?qū)ο蟮幕靖拍?操作名、參數(shù)及其類型和操作的返回類型合在一起稱為操作的簽名(注:這里的操

65、作就是方法或函數(shù))。一個(gè)類中的所有操作都必須具有唯一的簽名,即是說一個(gè)類中不能存在兩個(gè)相同簽名的操作。具有相同名稱和參數(shù)但是返回類型不同的操作不能稱為重載,因?yàn)樵谡{(diào)用操作時(shí)并沒有描述操作的返回類型,被調(diào)用的對象不能分辨出僅僅是返回類型不同的兩個(gè)操作,因此這樣的操作具有歧義性,是無效的。,2024年4月3日星期三,第84頁,3.4.2 面向?qū)ο蟮拈_發(fā),傳統(tǒng)的軟件開發(fā)生命周期包含了六個(gè)階段:制定計(jì)劃、需求分析和定義、設(shè)計(jì)、編碼、測試、運(yùn)行

66、與維護(hù),面向?qū)ο蟮拈_發(fā)和傳統(tǒng)的軟件開發(fā)方法不同,它是一種基于現(xiàn)實(shí)世界抽象的新的軟件開發(fā)方法。那么,面向?qū)ο蟮能浖_發(fā)中,軟件生命周期又可分為哪幾個(gè)階段?各個(gè)階段主要完成哪些任務(wù)?,2024年4月3日星期三,第85頁,3.4.2 面向?qū)ο蟮拈_發(fā),在面向?qū)ο蟮能浖_發(fā)中,軟件生命周期可分為以下幾個(gè)階段:(1) 系統(tǒng)分析階段在這個(gè)階段,需要建立一個(gè)反映現(xiàn)實(shí)客觀世界情形的模型。為了建立這個(gè)模型,需要分析員和需求人員共同明確現(xiàn)實(shí)世界中的問題

67、。這個(gè)模型應(yīng)該解決系統(tǒng)必須做什么,而不是怎么做的問題。分析之后將得到分析模型:對象模型、動(dòng)態(tài)模型和功能模型。(2) 系統(tǒng)設(shè)計(jì)階段這個(gè)階段需要給出怎樣解決問題的決策。包括將系統(tǒng)劃分成子系統(tǒng)和子系統(tǒng)軟硬件如何配置,確定系統(tǒng)的整體框架結(jié)構(gòu)。,2024年4月3日星期三,第86頁,3.4.2 面向?qū)ο蟮拈_發(fā),(3) 對象設(shè)計(jì)階段該階段將應(yīng)用領(lǐng)域的概念轉(zhuǎn)換為計(jì)算機(jī)軟件領(lǐng)域的概念。在系統(tǒng)分析階段所定義的問題,在這個(gè)階段來確定解決問題的方法。將分

68、析模型的邏輯結(jié)構(gòu)映射到一個(gè)程序的物理組織,得到設(shè)計(jì)模型。(4) 實(shí)現(xiàn)階段在這個(gè)階段,將在對象設(shè)計(jì)階段開發(fā)的類轉(zhuǎn)換成用特定的程序設(shè)計(jì)語言編寫的代碼或數(shù)據(jù)庫。(5) 測試階段傳統(tǒng)軟件開發(fā)的測試通常經(jīng)過單元測試、集成測試、系統(tǒng)測試三個(gè)環(huán)節(jié)。由于面向?qū)ο笥衅渥陨淼奶攸c(diǎn),參考面向?qū)ο筌浖_發(fā)模式,面向?qū)ο箝_發(fā)測試包括面向?qū)ο蠓治龅臏y試、面向?qū)ο笤O(shè)計(jì)的測試、面向?qū)ο缶幊痰臏y試、面向?qū)ο髥卧獪y試、面向?qū)ο蠹蓽y試和面向?qū)ο笙到y(tǒng)測試。,2024

69、年4月3日星期三,第87頁,3.4.2 面向?qū)ο蟮拈_發(fā),面向?qū)ο箝_發(fā)同樣包含了傳統(tǒng)軟件開發(fā)的幾個(gè)階段:分析、設(shè)計(jì)、編碼、測試等,但面向?qū)ο箝_發(fā)是用“面向?qū)ο蟆钡挠^點(diǎn)去認(rèn)識(shí)客觀世界,用“面向?qū)ο蟆钡姆椒ㄈツM客觀世界,所以,在分析階段主要分析現(xiàn)實(shí)世界中的對象以及對象與對象之間的關(guān)系,在設(shè)計(jì)階段除了對整個(gè)系統(tǒng)的架構(gòu)設(shè)計(jì)外,主要針對對象(或類)以及對象(或類)與對象(或類)之間的關(guān)系進(jìn)行設(shè)計(jì),在編碼階段使用面向?qū)ο缶幊陶Z言實(shí)現(xiàn)類的各項(xiàng)功能,而

溫馨提示

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

評論

0/150

提交評論