《計(jì)算機(jī)軟件基礎(chǔ)》課件第10章軟件工程_第1頁(yè)
《計(jì)算機(jī)軟件基礎(chǔ)》課件第10章軟件工程_第2頁(yè)
《計(jì)算機(jī)軟件基礎(chǔ)》課件第10章軟件工程_第3頁(yè)
《計(jì)算機(jī)軟件基礎(chǔ)》課件第10章軟件工程_第4頁(yè)
《計(jì)算機(jī)軟件基礎(chǔ)》課件第10章軟件工程_第5頁(yè)
已閱讀5頁(yè),還剩259頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第10章軟件工程10.1軟件工程概述10.2問(wèn)題定義與可行性研究10.3軟件的需求分析10.4軟件的設(shè)計(jì)10.5軟件的編程10.6軟件的測(cè)試10.7軟件的維護(hù)習(xí)題10.1軟件工程概述1.軟件與軟件危機(jī)軟件是由計(jì)算機(jī)程序演變而形成的一種概念。程序是按既定算法,用某種計(jì)算機(jī)語(yǔ)言規(guī)定的指令或語(yǔ)句編寫的指令或語(yǔ)句的集合。軟件是程序再加上程序?qū)崿F(xiàn)和維護(hù)程序時(shí)所必需的文檔的總稱。軟件是程序和程序設(shè)計(jì)發(fā)展到規(guī)?;蜕唐坊笏饾u形成的概念。

隨著計(jì)算機(jī)技術(shù)的迅速發(fā)展,計(jì)算機(jī)軟件在計(jì)算機(jī)系統(tǒng)中占有越來(lái)越重要的地位。在軟件需求量迅速增加,規(guī)模日益增長(zhǎng)的情況下,計(jì)算機(jī)軟件的開發(fā)和維護(hù)過(guò)程中遇到了一系列嚴(yán)重問(wèn)題。如軟件開發(fā)的復(fù)雜度大大上升,導(dǎo)致大型軟件的開發(fā)費(fèi)用經(jīng)常超出預(yù)算,完成時(shí)間也常常超期,同時(shí),軟件可靠性隨規(guī)模的增長(zhǎng)而下降,質(zhì)量保證也越來(lái)越困難,即產(chǎn)生了軟件危機(jī)。軟件危機(jī)主要有以下幾種表現(xiàn):(1)不能準(zhǔn)確估計(jì)軟件開發(fā)的成本與進(jìn)度;(2)用戶對(duì)“已完成的”軟件系統(tǒng)經(jīng)常不滿意;(3)軟件產(chǎn)品質(zhì)量往往靠不?。?4)軟件難以維護(hù);(5)軟件無(wú)完整的文檔,無(wú)法用以管理和控制軟件的開發(fā)和維護(hù);(6)軟件費(fèi)用急劇上升;(7)軟件生產(chǎn)效率低,供不應(yīng)求。2.軟件工程“軟件工程”一詞是1968年北大西洋公約組織(NATO)在聯(lián)邦德國(guó)召開的一次會(huì)議上首次提出的。它的中心思想是把軟件當(dāng)作一種工業(yè)產(chǎn)品,而不是某種個(gè)體或小作坊的神秘技巧,要求“采用工程化的原理與方法對(duì)軟件進(jìn)行計(jì)劃、開發(fā)和維護(hù)”。這樣做的目的,不僅是為了實(shí)現(xiàn)按預(yù)期的速度和經(jīng)費(fèi)完成軟件生產(chǎn)計(jì)劃,也是為了提高軟件的生產(chǎn)率與可靠性。軟件工程是從技術(shù)(方法和工具)和管理兩方面研究如何更好地開發(fā)和維護(hù)計(jì)算機(jī)軟件的一門新興學(xué)科。

軟件工程是一門交叉學(xué)科,涉及到計(jì)算機(jī)科學(xué)、管理科學(xué)、工程學(xué)和數(shù)學(xué)。凡是計(jì)算機(jī)科學(xué)中的成果均可用于軟件工程,但計(jì)算機(jī)科學(xué)著重于理論研究,如自動(dòng)機(jī)理論、形式語(yǔ)言理論、編譯原理、數(shù)據(jù)庫(kù)原理、操作系統(tǒng)原理、人工智能原理等,而軟件工程著重于具體軟件系統(tǒng)的研制和建立。軟件工程的理論、方法、技術(shù)都是建立在計(jì)算機(jī)科學(xué)的基礎(chǔ)上,它是用管理學(xué)的原理、方法來(lái)進(jìn)行軟件生產(chǎn)管理;用工程學(xué)的觀點(diǎn)來(lái)進(jìn)行費(fèi)用估算,制定進(jìn)度和方案;用數(shù)學(xué)的方法來(lái)建立軟件可靠性模型以及分析各種算法和性質(zhì)。

軟件工程研究的對(duì)象是大型軟件系統(tǒng)的開發(fā)過(guò)程,它研究的內(nèi)容是生產(chǎn)流程、各生產(chǎn)步驟的目的、任務(wù)、方法、技術(shù)、工具、文檔和產(chǎn)品規(guī)格。軟件是一種邏輯產(chǎn)品,與物質(zhì)產(chǎn)品有很大差別,它看不見,摸不著,具有無(wú)形性,是腦力勞動(dòng)的結(jié)晶。它以程序和文檔形式存在,通過(guò)計(jì)算機(jī)來(lái)體現(xiàn)它的作用,在研制過(guò)程中,能見度差,這給開發(fā)過(guò)程的管理帶來(lái)極大的困難,進(jìn)度難以控制,質(zhì)量難以保證。

因此,軟件生產(chǎn)的管理也是軟件工程的一個(gè)重要研究領(lǐng)域,大型軟件開發(fā)過(guò)程的管理是一件非常復(fù)雜的事情,因此,管理不當(dāng)也會(huì)導(dǎo)致軟件開發(fā)的失敗。軟件生產(chǎn)的管理包括開發(fā)人員的層次結(jié)構(gòu)和組織方式、開發(fā)進(jìn)度的控制、軟件質(zhì)量的保證、開發(fā)費(fèi)用的估算和管理、軟件開發(fā)文檔的管理等。

目前,在國(guó)際上制定了若干關(guān)于軟件工程的技術(shù)標(biāo)準(zhǔn),我國(guó)也制定了相應(yīng)的國(guó)家標(biāo)準(zhǔn),如GB8655《計(jì)算機(jī)軟件開發(fā)規(guī)范》,GB8567《計(jì)算機(jī)軟件產(chǎn)品開發(fā)文件編制指南》,GB1526《信息處理——數(shù)據(jù)流程圖、程序流程圖、系統(tǒng)流程圖的文件編制符號(hào)及約定》等。這些標(biāo)準(zhǔn)的制定對(duì)軟件工程的發(fā)展,對(duì)軟件生產(chǎn)和文檔編制起了很大作用。3.軟件生存周期

軟件生存周期的概念是從工業(yè)中產(chǎn)品生存周期的概念借用過(guò)來(lái)的。一種產(chǎn)品從定貨開始,?經(jīng)過(guò)設(shè)計(jì)、制造、調(diào)試、使用維護(hù),直到該產(chǎn)品淘汰為止,這就是所謂的產(chǎn)品生存周期。圖10-1瀑布模型

軟件生存周期是從用戶提出開發(fā)要求開始,直到該軟件報(bào)廢為止的這段時(shí)間,可分為3個(gè)時(shí)期:計(jì)劃期、開發(fā)期和運(yùn)行期。計(jì)劃期又分為問(wèn)題定義和可行性研究?jī)蓚€(gè)階段;開發(fā)期分為4個(gè)階段:需求分析階段、設(shè)計(jì)階段(總體設(shè)計(jì)、詳細(xì)設(shè)計(jì))、編碼階段和測(cè)試階段;運(yùn)行期即維護(hù)階段。各階段的工作按順序開展,圖10-1是這種軟件生存周期的模型示意圖,由于其形狀似多級(jí)瀑布,常稱為“瀑布模型”。

10.2問(wèn)題定義與可行性研究

1.問(wèn)題定義問(wèn)題定義階段的任務(wù)是要確定軟件系統(tǒng)所要解決的任務(wù)。分析人員在與用戶和部門負(fù)責(zé)人交流之后,應(yīng)提出關(guān)于問(wèn)題性質(zhì)、工程目標(biāo)和規(guī)模的書面報(bào)告,即軟件系統(tǒng)目標(biāo)與范圍的說(shuō)明。為了成功地完成問(wèn)題定義階段的任務(wù),需要硬件人員和軟件人員的共同參與,這一階段是軟件生存周期中較短的階段。2.可行性研究

1)可行性研究的任務(wù)可行性研究的目的在于用最小的代價(jià)確定在問(wèn)題定義階段確定的系統(tǒng)目標(biāo)和規(guī)模是否現(xiàn)實(shí),所確定的問(wèn)題是否可以解決,系統(tǒng)方案在經(jīng)濟(jì)上、技術(shù)上和操作上是否可以接受??尚行匝芯恐乜紤]以下幾個(gè)方面:①經(jīng)濟(jì)可行性。估計(jì)開發(fā)費(fèi)用以及新系統(tǒng)可能帶來(lái)的收益,將兩者進(jìn)行權(quán)衡,看結(jié)果是否可以接受。

②技術(shù)可行性。對(duì)要求的功能、性能以及限制條件進(jìn)行分析,看是否能夠做成一個(gè)可接受的系統(tǒng)。所考慮的因素通常還應(yīng)包括開發(fā)的風(fēng)險(xiǎn),是否能夠得到需要的軟件和硬件資源,以及一個(gè)熟練的有能力的開發(fā)隊(duì)伍,另外與系統(tǒng)開發(fā)有關(guān)的技術(shù)是否足以支持系統(tǒng)的研制。技術(shù)可行性的估計(jì),需要有經(jīng)驗(yàn)的人員去完成。③操作可行性。判斷系統(tǒng)的操作方式在該用戶組織內(nèi)是否可行。2)推薦方案根據(jù)可行性研究結(jié)果要做出的決定是:是否繼續(xù)按預(yù)定目標(biāo)進(jìn)行開發(fā)??尚行苑治鋈藛T必須清楚地表明他對(duì)這個(gè)關(guān)鍵性決定的建議。如果認(rèn)為值得繼續(xù)進(jìn)行這項(xiàng)開發(fā)工程,則應(yīng)提供一種最好的解決方案,并說(shuō)明理由。3)軟件開發(fā)計(jì)劃分析人員應(yīng)該為推薦的系統(tǒng)草擬一份軟件開發(fā)計(jì)劃。軟件開發(fā)計(jì)劃是根據(jù)用戶提出的功能性要求,開發(fā)時(shí)間和費(fèi)用的限制而制定的,它要說(shuō)明該項(xiàng)目需要的硬件資源和軟件資源,需要的開發(fā)人員的層次和數(shù)量,項(xiàng)目開發(fā)費(fèi)用的估算,開發(fā)進(jìn)度的安排等。軟件開發(fā)計(jì)劃的閱讀者可以包括軟件主管部門、用戶和技術(shù)人員。所確定的成本與進(jìn)度可供主管部門復(fù)審。軟件開發(fā)計(jì)劃同時(shí)也給出了整個(gè)軟件生存周期的基本預(yù)算和進(jìn)度安排。10.3軟件的需求分析10.3.1需求分析概述軟件的需求分析是開發(fā)期的第一個(gè)階段。這個(gè)階段的基本任務(wù)是:用戶和分析人員雙方共同來(lái)理解系統(tǒng)的需求,并將共同理解形成一份文件,即軟件需求說(shuō)明書。該階段是面向用戶問(wèn)題的,它主要是對(duì)用戶的業(yè)務(wù)活動(dòng)進(jìn)行分析,明確在用戶的業(yè)務(wù)環(huán)境中軟件系統(tǒng)應(yīng)該“做什么”。

需求分析是一項(xiàng)重要的工作,也是困難的工作。該階段是用戶與軟件人員雙方討論協(xié)商的階段,由用戶提出問(wèn)題,軟件開發(fā)人員給出問(wèn)題的解答。用戶的業(yè)務(wù)活動(dòng)和業(yè)務(wù)環(huán)境對(duì)軟件開發(fā)人員來(lái)說(shuō)是不熟悉的,要想在短期內(nèi)搞清楚是不太可能的;用戶只熟悉本身的業(yè)務(wù)活動(dòng)和業(yè)務(wù)環(huán)境,不熟悉計(jì)算機(jī)技術(shù)。由于這兩方面人員缺乏共同的語(yǔ)言,開發(fā)人員往往急于求成,于是在未明確軟件系統(tǒng)應(yīng)該“做什么”的情況下,就開始進(jìn)行設(shè)計(jì)、編程,而用戶則不清楚軟件人員在設(shè)計(jì)怎樣的一個(gè)系統(tǒng),直至系統(tǒng)完成交付用戶之后,才發(fā)現(xiàn)它不符合要求,但這為時(shí)已晚,這類教訓(xùn)國(guó)內(nèi)外都不少見。用戶與開發(fā)人員無(wú)共同語(yǔ)言,很難進(jìn)行交流,這是需求分析階段的特點(diǎn)之一。

對(duì)于一個(gè)大型而復(fù)雜的軟件系統(tǒng),用戶也很難精確完整地提出它的功能要求,只有經(jīng)過(guò)多次長(zhǎng)時(shí)間的討論才逐步精確、完善。有時(shí)進(jìn)入到設(shè)計(jì)、編碼階段才能明確,更有甚者,到開發(fā)后期還在提新的要求。這無(wú)疑給軟件開發(fā)帶來(lái)困難。這是需求分析階段的特點(diǎn)之二。需求分析對(duì)整個(gè)開發(fā)階段都具有重大的影響,它是軟件開發(fā)的基礎(chǔ),一旦需求分析出現(xiàn)錯(cuò)誤,將導(dǎo)致整個(gè)軟件開發(fā)的失敗。如果在需求分析產(chǎn)生一個(gè)錯(cuò)誤,這個(gè)錯(cuò)誤發(fā)現(xiàn)越晚,則花的代價(jià)越高。這是需求分析的特點(diǎn)之三。

需求分析的任務(wù)是理解和表達(dá)用戶的要求。用戶的要求包括軟件系統(tǒng)的范圍、功能、性能、限制和約束。范圍是指軟件的規(guī)模有多大,處理的對(duì)象及性質(zhì)是什么;功能是指能做什么樣的加工和處理,如數(shù)據(jù)錄入、查詢、統(tǒng)計(jì)分析、打印報(bào)表等;性能是指處理數(shù)據(jù)量的多少、系統(tǒng)響應(yīng)時(shí)間、查詢速度、數(shù)據(jù)的精度、系統(tǒng)工作可靠性等;限制和約束是指開發(fā)費(fèi)用、開發(fā)周期、可使用的資源等。其中功能要求是基本的,它又包括數(shù)據(jù)要求和處理要求兩個(gè)方面。

需求分析是在系統(tǒng)分析員主持下,由用戶和軟件開發(fā)人員參加。參加需求分析的用戶人員應(yīng)有三個(gè)層次,即企業(yè)負(fù)責(zé)人,各部門負(fù)責(zé)人,具體工作人員。他們提供的情況在需求分析階段都應(yīng)認(rèn)真收集和考慮。需求分析的過(guò)程。首先召開調(diào)查會(huì)與上述三個(gè)層次的用戶人員討論,了解收集業(yè)務(wù)過(guò)程和業(yè)務(wù)環(huán)境,然后收集與各業(yè)務(wù)有關(guān)的資料、報(bào)表、記錄等文字或圖表材料,還應(yīng)到現(xiàn)場(chǎng)去參觀了解。這種調(diào)查研究應(yīng)反復(fù)進(jìn)行幾次,直到把用戶要求的功能、性能都搞清楚為止。然后對(duì)用戶的要求進(jìn)行分析、理解,最后用文檔形式把用戶要求的功能、性能表達(dá)出來(lái),也就是編寫需求說(shuō)明書。

需求說(shuō)明書主要有三個(gè)作用:作為用戶和軟件開發(fā)人員之間的合同;作為開發(fā)人員進(jìn)行設(shè)計(jì)和編程的根據(jù);作為軟件開發(fā)完成后驗(yàn)收的依據(jù)。編寫需求說(shuō)明書時(shí),應(yīng)該完整、一致、精確、無(wú)二義性,同時(shí)又要簡(jiǎn)明、易懂、易修改。它越精確,以后出現(xiàn)錯(cuò)誤、混淆、反復(fù)的可能性就越小。如“系統(tǒng)查詢等待時(shí)間很短”等詞語(yǔ),是含糊不清的描述,驗(yàn)收時(shí)無(wú)法檢查,而“查詢等待時(shí)間不超過(guò)5秒”就是精確的描述,驗(yàn)收時(shí)就可檢查是否達(dá)到這個(gè)要求。

需求說(shuō)明書最終要得到用戶的認(rèn)可,所以用戶要能看得懂,并且還能發(fā)現(xiàn)和指出其中的錯(cuò)誤。由于用戶往往不是一個(gè)人,而是企業(yè)中各個(gè)部門的若干人,他們可能提出相互沖突的要求,這就需要協(xié)調(diào)和解決這些沖突,在需求說(shuō)明書中用戶要求的應(yīng)該是一致的、無(wú)二義性的。需求說(shuō)明書包括的內(nèi)容和書寫參考格式如下:一、概述二、數(shù)據(jù)描述·

數(shù)據(jù)流圖·

數(shù)據(jù)字典·

系統(tǒng)接口說(shuō)明·

內(nèi)部接口三、功能描述·

功能·

處理說(shuō)明·

設(shè)計(jì)的限制四、性能描述·

性能參數(shù)·

測(cè)試種類·

預(yù)期的軟件響應(yīng)·

應(yīng)考慮的特殊問(wèn)題五、參考文獻(xiàn)目錄

六、附錄概述是從系統(tǒng)的角度描述軟件的目的和任務(wù)。數(shù)據(jù)描述是對(duì)軟件系統(tǒng)所必須解決的問(wèn)題做出的詳細(xì)說(shuō)明。功能描述中描述了為解決用戶問(wèn)題所需要的每一項(xiàng)功能的過(guò)程細(xì)節(jié)。對(duì)每一項(xiàng)功能要給出處理說(shuō)明和在設(shè)計(jì)時(shí)需要考慮的限制條件。

在性能描述中說(shuō)明系統(tǒng)應(yīng)達(dá)到的性能和應(yīng)該滿足的條件,以及測(cè)試的方法和標(biāo)準(zhǔn),預(yù)期的軟件響應(yīng)和可能需要考慮的特殊問(wèn)題。參考文獻(xiàn)目錄中應(yīng)包括與該軟件有關(guān)的全部參考文獻(xiàn),其中包括前期的其它文檔、技術(shù)參考資料、產(chǎn)品目錄手冊(cè)以及標(biāo)準(zhǔn)等。附錄部分包括一些補(bǔ)充資料,如列表數(shù)據(jù)、算法的詳細(xì)說(shuō)明、框圖、圖表和其它材料。10.3.2結(jié)構(gòu)化分析方法結(jié)構(gòu)化分析(SA,StructuredAnalysis)方法是一種簡(jiǎn)單實(shí)用、使用很廣的方法。SA方法與設(shè)計(jì)階段的SD方法聯(lián)合使用,能夠較好地實(shí)現(xiàn)一個(gè)軟件系統(tǒng)的研制。SA方法的基本思想和步驟是采用“分解”和“抽象”的基本手段,自頂向下逐層分解,使分解工作有條不紊地進(jìn)行,使復(fù)雜的問(wèn)題有效地被控制。如圖10-2所示,系統(tǒng)A很復(fù)雜,為了理解它,可以將它分解成1,2,3幾個(gè)子系統(tǒng);如果子系統(tǒng)1和2仍然很復(fù)雜,把它們?cè)俜纸獬?.1,1.2,…等子系統(tǒng),如此繼續(xù)下去,直到子系統(tǒng)足夠簡(jiǎn)單,能夠清楚地被理解和表達(dá)為止。圖10-2分解和抽象

逐層分解體現(xiàn)了抽象的原則,使人們不至于糾纏于具體細(xì)節(jié)而是有控制地逐步地了解更多的細(xì)節(jié),直至最詳細(xì)的內(nèi)容。

SA方法在表達(dá)問(wèn)題時(shí)盡可能用圖形的方法,因?yàn)閳D形比較形象、直觀,容易理解。用SA方法來(lái)描述軟件將要處理的信息時(shí),使用數(shù)據(jù)流圖和數(shù)據(jù)字典等描述工具。數(shù)據(jù)流圖表示了軟件的信息流向和信息的加工,而數(shù)據(jù)字典是對(duì)這些信息和加工進(jìn)行更詳細(xì)的描述。還可以使用結(jié)構(gòu)化語(yǔ)言、判定表、判定樹對(duì)信息加工的加工邏輯進(jìn)行描述。

使用SA方法進(jìn)行軟件需求分析時(shí),可按如下步驟進(jìn)行:

(1)建立當(dāng)前系統(tǒng)的物理模型。即理解當(dāng)前的現(xiàn)實(shí)環(huán)境,獲得當(dāng)前系統(tǒng)的物理模型。當(dāng)前系統(tǒng)的物理模型就是現(xiàn)實(shí)環(huán)境的真實(shí)寫照,在理解了當(dāng)前系統(tǒng)是怎樣做的情況下,用數(shù)據(jù)流圖等形式將現(xiàn)實(shí)環(huán)境表達(dá)出來(lái)。

(2)建立當(dāng)前系統(tǒng)的邏輯模型。通過(guò)對(duì)物理模型的分析,找到本質(zhì)性的因素,抽象出當(dāng)前系統(tǒng)的功能和性能,建立當(dāng)前系統(tǒng)的邏輯模型。(3)建立目標(biāo)系統(tǒng)的邏輯模型。首先要清楚所建立的目標(biāo)系統(tǒng)的功能,進(jìn)一步分析與當(dāng)前系統(tǒng)邏輯模型的差別,將當(dāng)前系統(tǒng)的數(shù)據(jù)流圖分成兩部分,一部分是與目標(biāo)系統(tǒng)相同的部分,另一部分是與目標(biāo)系統(tǒng)不同的即變化的部分。將變化的部分重新分析和設(shè)計(jì),建立一個(gè)目標(biāo)系統(tǒng)的邏輯模型。(4)為目標(biāo)系統(tǒng)的邏輯模型作補(bǔ)充。為了對(duì)一個(gè)軟件系統(tǒng)作出完整的說(shuō)明,需對(duì)已得到的結(jié)果作一些補(bǔ)充。如說(shuō)明目標(biāo)系統(tǒng)的人機(jī)邊界,即確定系統(tǒng)的范圍。還要說(shuō)明系統(tǒng)邏輯模型中未詳細(xì)考慮的一些細(xì)節(jié)問(wèn)題,如出錯(cuò)處理,系統(tǒng)如何啟動(dòng)和結(jié)束,系統(tǒng)輸入輸出格式,系統(tǒng)性能方面的其它要求(如響應(yīng)時(shí)間、存儲(chǔ)容量)等等。10.3.3數(shù)據(jù)流圖數(shù)據(jù)流圖是描述系統(tǒng)中數(shù)據(jù)流程的圖形工具,它標(biāo)識(shí)了一個(gè)系統(tǒng)的邏輯輸入和邏輯輸出以及把邏輯輸入轉(zhuǎn)換為邏輯輸出所需要的加工。

1.?dāng)?shù)據(jù)流圖的組成數(shù)據(jù)流圖由四種基本成分組成,如圖10-3所示:圖10-3數(shù)據(jù)流圖的基本成分(1)數(shù)據(jù)流——用箭頭表示,箭頭旁邊用文字加以標(biāo)記;(2)加工——用圓圈表示,圓圈內(nèi)用文字加以標(biāo)記;(3)數(shù)據(jù)存儲(chǔ)——用雙線表示,雙線旁邊用文字加以標(biāo)記;(4)數(shù)據(jù)的源點(diǎn)和終點(diǎn)——用方框表示,方框內(nèi)用文字加以標(biāo)記。

四種基本成分的作用和組成:

(1)數(shù)據(jù)流。它是一條流水線,在這條流水線上有一組由一定成分組成的數(shù)據(jù)在流動(dòng)。如圖10-4中登記表由姓名、性別、出生日期、籍貫、畢業(yè)學(xué)校、黨團(tuán)員等組成。數(shù)據(jù)流的流向由箭頭方向指出,可從加工流向加工,也可以從加工流向數(shù)據(jù)存儲(chǔ)或從數(shù)據(jù)存儲(chǔ)流向加工,也可以從源點(diǎn)流向加工或從加工流向終點(diǎn)。每條數(shù)據(jù)流均有一個(gè)合適的名字,表明數(shù)據(jù)流的含義,但流入或流出數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)流可以不命名。

(2)加工。它是對(duì)數(shù)據(jù)進(jìn)行的操作。每個(gè)加工除了命名外,還有一個(gè)編號(hào),說(shuō)明這個(gè)加工在層次分解中的位置。

(3)數(shù)據(jù)存儲(chǔ)。它是數(shù)據(jù)流在加工過(guò)程中產(chǎn)生的臨時(shí)文件或加工過(guò)程中需要查找的信息。數(shù)據(jù)流反映了系統(tǒng)中流動(dòng)的數(shù)據(jù),表現(xiàn)出動(dòng)態(tài)數(shù)據(jù)的特征;數(shù)據(jù)存儲(chǔ)反映了系統(tǒng)中靜止的數(shù)據(jù),表現(xiàn)出靜態(tài)數(shù)據(jù)的特征。(4)源點(diǎn)和終點(diǎn)。它表示系統(tǒng)中數(shù)據(jù)的來(lái)龍去脈,通常存于系統(tǒng)之外的人和組織之中。源點(diǎn)和終點(diǎn)的表達(dá)不必很嚴(yán)格,它只是起到注釋作用,補(bǔ)充說(shuō)明系統(tǒng)與其它外界環(huán)境的聯(lián)系。圖10-4中的學(xué)生檔案管理系統(tǒng),說(shuō)明了數(shù)據(jù)流圖是如何由四種基本成分組成。圖10-4學(xué)生檔案管理系統(tǒng)數(shù)據(jù)流圖2.?dāng)?shù)據(jù)流圖的結(jié)構(gòu)一個(gè)實(shí)際的軟件系統(tǒng)是非常復(fù)雜的,為了描述它們的信息流向和加工,用一套分層的數(shù)據(jù)流圖來(lái)描述,有頂層、中間層、層底之分。

(1)頂層。決定系統(tǒng)的范圍,決定輸入輸出數(shù)據(jù)流,它說(shuō)明系統(tǒng)的邊界,把整個(gè)系統(tǒng)的功能抽象為一個(gè)加工。頂層數(shù)據(jù)流圖只有一張,如圖10-5所示。圖10-5頂層數(shù)據(jù)流圖(2)中間層。頂層之下是若干中間層,某一中間層既是它上一層加工的分解結(jié)果,又是它下一層若干加工的抽象,即它又可進(jìn)一步分解。

(3)層底。若一張數(shù)據(jù)流圖的加工不能進(jìn)一步分解,這張數(shù)據(jù)流圖就是底層的數(shù)據(jù)流圖。故底層數(shù)據(jù)流圖的加工是由基本加工構(gòu)成的,所謂基本加工是指不能再進(jìn)行分解的加工。3.分層數(shù)據(jù)流圖的畫法畫分層數(shù)據(jù)流圖時(shí),應(yīng)根據(jù)分解和抽象的原則自頂向下逐層分解畫出。在畫各層數(shù)據(jù)流圖時(shí),要注意父圖與子圖的平衡,各層數(shù)據(jù)流圖及其加工的編號(hào)和數(shù)據(jù)守恒問(wèn)題。

(1)父圖與子圖的平衡。在分層數(shù)據(jù)流圖直接相鄰的兩層中,上層是下層的父圖,下層是上層的子圖。一般來(lái)說(shuō),父圖中有幾個(gè)加工,下層就有幾個(gè)子圖,但子圖的個(gè)數(shù)也可以少于父圖中加工個(gè)數(shù),即父圖中有些加工可能是基本加工,它就沒(méi)有子圖。

父圖中某個(gè)加工的輸入輸出數(shù)據(jù)流應(yīng)該同相應(yīng)的子圖的輸入輸出流的數(shù)目相同,分層數(shù)據(jù)流圖的這種特性稱為父圖與子圖的平衡。

(2)子圖的編號(hào)規(guī)則。子圖的編號(hào)即為父圖相應(yīng)加工的編號(hào);子圖中加工的編號(hào)由子圖號(hào)、小數(shù)點(diǎn)、局部號(hào)構(gòu)成。頂層只有一張,只有一個(gè)加工,不必編號(hào)。第一層子圖的編號(hào)為0,圖中加工的編號(hào)為0.1,0.2,…,通常簡(jiǎn)化為1,2,…。對(duì)應(yīng)的子圖編號(hào)為1圖,2圖,…,這是第二層數(shù)據(jù)流圖的編號(hào),該層圖中加工的編號(hào)為1.1,1.2,…,2.1,2.1,…。這樣可以根據(jù)子圖編號(hào)中小數(shù)點(diǎn)個(gè)數(shù)來(lái)確定該子圖在哪一層上。(3)數(shù)據(jù)守恒。所謂數(shù)據(jù)守恒是指加工的輸入輸出數(shù)據(jù)流是否匹配,即一個(gè)加工既有輸入數(shù)據(jù)流又有輸出數(shù)據(jù)流。

4.完善數(shù)據(jù)流圖畫出了分層數(shù)據(jù)流圖后,應(yīng)進(jìn)一步完善,提高數(shù)據(jù)流圖的可理解性。

在對(duì)加工進(jìn)行分解時(shí),應(yīng)注意分解的均勻性,即分解為大小均勻的幾部分,應(yīng)避免不均勻的分解,即在某一張數(shù)據(jù)流圖中,某些加工已是基本加工,而另一些加工還可以進(jìn)一步分解為好幾層,這時(shí)應(yīng)重新分解。一個(gè)加工一次分解為多少個(gè)子加工為好?經(jīng)驗(yàn)證明不超過(guò)7個(gè)為宜。分解過(guò)少,可能有較多的層次,分解過(guò)多,使人難以理解。一般分解應(yīng)是自然的,概念上是合理的,清晰的。若一張子圖上的所有加工都是不可再分解的基本加工,這時(shí)分解過(guò)程就可結(jié)束了。10.3.4數(shù)據(jù)字典數(shù)據(jù)流圖描述軟件系統(tǒng)的信息流程和加工,但并沒(méi)有對(duì)各個(gè)成分進(jìn)行詳細(xì)說(shuō)明,SA方法使用數(shù)據(jù)字典對(duì)這些成分進(jìn)行詳細(xì)說(shuō)明。數(shù)據(jù)流圖中的數(shù)據(jù)流名、數(shù)據(jù)存儲(chǔ)名、數(shù)據(jù)項(xiàng)名、基本加工名的嚴(yán)格定義的集合構(gòu)成了數(shù)據(jù)字典。數(shù)據(jù)字典是SA方法重要工具之一,與數(shù)據(jù)流圖配套,缺一不可。數(shù)據(jù)流圖中的非基本加工不必描述,它們是基本加工的抽象,可用基本加工的組合來(lái)說(shuō)明,源點(diǎn)終點(diǎn)也不必在數(shù)據(jù)字典中描述。因此數(shù)據(jù)字典中有如下四種條目:數(shù)據(jù)流、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)項(xiàng)和基本加工。

數(shù)據(jù)字典的作用是建立一組一致的定義,便于用戶與分析員之間、用戶與程序員之間的通訊,使程序員用一致的數(shù)據(jù)項(xiàng)和數(shù)據(jù)存儲(chǔ)定義來(lái)描述數(shù)據(jù)庫(kù)和數(shù)據(jù)結(jié)構(gòu),避免了模塊接口和系統(tǒng)接口的不一致性。建立數(shù)據(jù)字典時(shí)要求無(wú)冗余,同一件事不能在幾處說(shuō)明,否則引起修改的麻煩。為避免冗余,需要建立一些約定。數(shù)據(jù)字典可用人工管理,也可用計(jì)算機(jī)管理。1.符號(hào)約定數(shù)據(jù)字典的描述方法可采用卡片格式。對(duì)數(shù)據(jù)流、數(shù)據(jù)存儲(chǔ)和數(shù)據(jù)項(xiàng)的描述可采用如下符號(hào):

(1)“+”表示與。例如:登記表=姓名+專業(yè)+班級(jí)+年齡+性別+籍貫;

(2)“|”表示或。例如:存期=[1|2|3|5],表示銀行存期可有1年,2年,3年,5年,而“[]”表示選擇項(xiàng)。

(3)?“{}”表示重復(fù)。例如:發(fā)票={發(fā)票行},表示一張發(fā)票有若干行。2.?dāng)?shù)據(jù)字典條目的描述數(shù)據(jù)字典各條目的詳細(xì)內(nèi)容及格式如圖10-6所示。對(duì)于數(shù)據(jù)流名、數(shù)據(jù)存儲(chǔ)名、數(shù)據(jù)項(xiàng)名的條目,有若干項(xiàng)是共同的。名字表示該條目的名稱;種類表示是數(shù)據(jù)流、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)項(xiàng)或基本加工中的某一種;簡(jiǎn)述是該條目的作用、含義的簡(jiǎn)單描述;別名是指該條目名的另一個(gè)名字;組成是指該條目由哪些數(shù)據(jù)成分構(gòu)成,可用上述的符號(hào)約定來(lái)描述。各種條目還有自己專有項(xiàng)目,在圖中已表示出來(lái)了。

基本加工條目中還有該基本加工的編號(hào)、激發(fā)條件、執(zhí)行頻率、加工邏輯等,加工邏輯是指用戶對(duì)這個(gè)加工的邏輯要求,而不是具體怎樣實(shí)現(xiàn),不要給出具體變量和控制流程的具體細(xì)節(jié),引入這些細(xì)節(jié)會(huì)給用戶閱讀需求說(shuō)明書帶來(lái)困難,另外,過(guò)早引入細(xì)節(jié)就限制了設(shè)計(jì)人員的自由。圖10-6數(shù)據(jù)字典(a)數(shù)據(jù)流條目;(b)數(shù)據(jù)存儲(chǔ)條目;(c)數(shù)據(jù)項(xiàng)條目;(d)基本加工條目3.加工邏輯的描述加工邏輯是基本加工條目中的一項(xiàng)重要內(nèi)容,有三種工具來(lái)描述加工邏輯:結(jié)構(gòu)化語(yǔ)言,判定表,判定樹。結(jié)構(gòu)化語(yǔ)言是描述加工邏輯的常用工具,它是介于自然語(yǔ)言和形式語(yǔ)言之間的一種語(yǔ)言,其結(jié)構(gòu)分為內(nèi)、外兩層,外層語(yǔ)法是比較具體的,內(nèi)層語(yǔ)法比較靈活。外層語(yǔ)法描述操作的控制結(jié)構(gòu),如順序、選擇和循還等,這些控制結(jié)構(gòu)將加工中的各個(gè)操作連起來(lái)。內(nèi)層語(yǔ)法通常由分析員根據(jù)系統(tǒng)的具體特點(diǎn)及用戶接受能力靈活決定,一般來(lái)說(shuō),只有祈使句一種,明確地表達(dá)“加工”要做什么,加工對(duì)象用的名詞都是數(shù)據(jù)字典中定義過(guò)的詞或自定義的詞,動(dòng)詞要避免用“處理”等抽象的詞匯,不用形容詞和副詞,允許引入運(yùn)算符和關(guān)系符。

在描述加工邏輯時(shí),如果有一系列邏輯判斷,用結(jié)構(gòu)化語(yǔ)言描述就不直觀,也不簡(jiǎn)捷,這時(shí)可用判定表或判定樹來(lái)描述。判定表是用表格的形式列出在什么條件下作什么處理,一目了然。判定樹是以一棵從左向右生長(zhǎng)的樹型表示來(lái)描述在各種條件下要作的事情,樹的各個(gè)分支表示某種條件,分支的端點(diǎn)表示該分支對(duì)應(yīng)的條件下要作的處理。

例10-1“檢查訂貨單”的加工邏輯是如果金額超過(guò)500元,又未過(guò)期,則發(fā)出批準(zhǔn)單和提貨單;如果金額超過(guò)500元,但過(guò)期了,則不發(fā)批準(zhǔn)單;如果金額低于500元,則不論是否過(guò)期都發(fā)出批準(zhǔn)單和提貨單,在未過(guò)期情況下不需發(fā)出通知單。可以用表10-1所示的判定表表示這個(gè)加工邏輯。表10-1判

表金額狀態(tài)>500且未過(guò)期>500且已過(guò)期≤500且未過(guò)期≤500且已過(guò)期發(fā)出批準(zhǔn)單發(fā)出提貨單發(fā)出通知單√√

√√√√√例10-2

針對(duì)上例的加工邏輯,也可以用判定樹描述如下:

已過(guò)期——不發(fā)批準(zhǔn)單 金額>500

未過(guò)期——發(fā)出批準(zhǔn)單、提貨單檢查訂購(gòu)單已過(guò)期——發(fā)出批準(zhǔn)單、提貨單和通知單金額≤500

未過(guò)期——發(fā)出批準(zhǔn)單、提貨單4.?dāng)?shù)據(jù)字典的用途數(shù)據(jù)字典作為分析階段的工具,有助于改進(jìn)分析人員和用戶間的通信,進(jìn)而消除很多的誤解,同時(shí)也有助于改進(jìn)不同的開發(fā)人員之間的通信。開發(fā)人員如果都能按數(shù)據(jù)字典描述的數(shù)據(jù)設(shè)計(jì)模塊,則能避免許多因數(shù)據(jù)不一致而造成的麻煩。此外,數(shù)據(jù)字典對(duì)于應(yīng)用系統(tǒng)中的數(shù)據(jù)庫(kù)設(shè)計(jì)也起著重要作用。10.4軟件的設(shè)計(jì)10.4.1軟件設(shè)計(jì)概述

1.目標(biāo)和任務(wù)需求分析階段是解決軟件系統(tǒng)“做什么”的問(wèn)題,設(shè)計(jì)階段是解決軟件系統(tǒng)“如何做”的問(wèn)題,也就是軟件系統(tǒng)的功能、性能如何實(shí)現(xiàn),最后應(yīng)得到軟件設(shè)計(jì)說(shuō)明書。設(shè)計(jì)階段是較為重要的階段,設(shè)計(jì)質(zhì)量的好壞直接影響到軟件系統(tǒng)的可靠性,因此,在設(shè)計(jì)階段要達(dá)到如下的目標(biāo):(1)提高可維護(hù)性。軟件工程按階段進(jìn)行,但各階段相互有影響,由于軟件維護(hù)費(fèi)用極高,因此在設(shè)計(jì)階段就需要考慮設(shè)計(jì)一個(gè)可維護(hù)的軟件,它體現(xiàn)在軟件可讀性、可擴(kuò)充性和可修改性上。

(2)提高可理解性??衫斫庑灾附Y(jié)構(gòu)清晰,層次分明,結(jié)構(gòu)程度高,文檔規(guī)范化、標(biāo)準(zhǔn)化。對(duì)軟件人員來(lái)說(shuō),要易讀易理解,對(duì)用戶來(lái)說(shuō)要易使用。(3)提高可靠性??煽啃园_性和健壯性兩個(gè)方面,正確性指軟件系統(tǒng)本身沒(méi)有錯(cuò)誤,健壯性指在輸入數(shù)據(jù)不合理或異常時(shí),軟件系統(tǒng)還能適應(yīng)工作,不造成嚴(yán)重的損害。軟件的可靠性是一個(gè)重要的目標(biāo),它涉及到軟件系統(tǒng)能否投入工作,使用后效率是否好的問(wèn)題。設(shè)計(jì)階段分為兩步:總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)。

2.設(shè)計(jì)方法和步驟軟件設(shè)計(jì)方法是軟件工程中最早發(fā)展的領(lǐng)域之一,其工作流程如圖10-7所示。圖10-7軟件設(shè)計(jì)流程圖

總體設(shè)計(jì)是為軟件系統(tǒng)定義一個(gè)邏輯上一致的結(jié)構(gòu):進(jìn)行模塊劃分,建立模塊層次結(jié)構(gòu)及模塊間的調(diào)用關(guān)系,設(shè)計(jì)全局?jǐn)?shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫(kù),設(shè)計(jì)系統(tǒng)接口及人機(jī)界面等??傮w設(shè)計(jì)的方法有許多種。在早期有模塊化方法,功能分解方法,這都是人們一般常用的方法,在20世紀(jì)60年代后期提出了面向數(shù)據(jù)流的設(shè)計(jì)方法,面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法,近年來(lái)又提出面向?qū)ο蟮脑O(shè)計(jì)方法等。

詳細(xì)設(shè)計(jì)是根據(jù)每個(gè)模塊的功能描述,設(shè)計(jì)出每個(gè)模塊的實(shí)現(xiàn)算法,以及這些算法的邏輯控制流程,并設(shè)計(jì)出這些模塊所需的局部數(shù)據(jù)結(jié)構(gòu)。詳細(xì)設(shè)計(jì)的方法主要有結(jié)構(gòu)程序設(shè)計(jì)方法。詳細(xì)設(shè)計(jì)的表示工具有圖形工具和語(yǔ)言工具,圖形工具有程序流程圖、PAD(ProblemAnalysisDiagram)圖、N–S圖,語(yǔ)言工具有偽碼和PDL(ProgramDesignLanguage)等。3.文檔設(shè)計(jì)階段結(jié)束要交付的文檔是設(shè)計(jì)說(shuō)明書。設(shè)計(jì)說(shuō)明書前面部分在總體設(shè)計(jì)后完成,后面部分是詳細(xì)設(shè)計(jì)后寫出。設(shè)計(jì)說(shuō)明書有兩個(gè)作用:對(duì)于編程和測(cè)試,它提供了一個(gè)指南;軟件交付使用后,為維護(hù)人員提供幫助。設(shè)計(jì)說(shuō)明書的框架和內(nèi)容如下:

(1)概述。描述設(shè)計(jì)工作總的范圍,包括系統(tǒng)目標(biāo)、功能、接口等。(2)系統(tǒng)結(jié)構(gòu)。用軟件結(jié)構(gòu)圖說(shuō)明本系統(tǒng)的模塊劃分,扼要說(shuō)明每個(gè)模塊的功能,分層次地給出各模塊之間的控制關(guān)系。

(3)數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫(kù)設(shè)計(jì)。對(duì)整個(gè)系統(tǒng)使用的數(shù)據(jù)結(jié)構(gòu)及數(shù)據(jù)庫(kù)進(jìn)行設(shè)計(jì),包括概念結(jié)構(gòu)設(shè)計(jì)、邏輯結(jié)構(gòu)設(shè)計(jì)、物理設(shè)計(jì)。用相應(yīng)的圖形和表格把設(shè)計(jì)結(jié)果描述出來(lái)。

(4)接口設(shè)計(jì)。要進(jìn)行人機(jī)界面設(shè)計(jì),說(shuō)明向用戶提供的命令以及系統(tǒng)的返回信息;要進(jìn)行外部接口設(shè)計(jì),說(shuō)明本系統(tǒng)與外界的所有接口安排,包括軟件與硬件之間的接口,本系統(tǒng)與支持軟件之間的接口關(guān)系。(5)模塊設(shè)計(jì)。這是詳細(xì)設(shè)計(jì)的結(jié)果,根據(jù)模塊的功能,用詳細(xì)設(shè)計(jì)表示工具描述每個(gè)模塊的流程,描述每個(gè)模塊用到的數(shù)據(jù)結(jié)構(gòu)。

4.設(shè)計(jì)復(fù)審開發(fā)中較早發(fā)現(xiàn)錯(cuò)誤,可減少錯(cuò)誤擴(kuò)大的機(jī)會(huì),考慮周到、計(jì)劃良好的復(fù)審與技術(shù)方法一樣重要。復(fù)審方法有兩種:一種是非正式的遍查,由一個(gè)通曉全部設(shè)計(jì)的高級(jí)技術(shù)人員實(shí)施,復(fù)查者與設(shè)計(jì)者一起開會(huì)來(lái)復(fù)查所有技術(shù)文檔;另一種是正式的結(jié)構(gòu)化審查,要組織一個(gè)審查小組,事先查看設(shè)計(jì)文檔,由設(shè)計(jì)者介紹情況,然后進(jìn)行評(píng)價(jià),使用正式的審查表,正式的錯(cuò)誤報(bào)告。10.4.2軟件設(shè)計(jì)準(zhǔn)則

1.軟件結(jié)構(gòu)的準(zhǔn)則軟件可以從結(jié)構(gòu)上和過(guò)程上進(jìn)行表示,這種表示上的差別是我們理解總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)的先決條件。軟件結(jié)構(gòu)表示軟件的系統(tǒng)結(jié)構(gòu),是一種層次體系,它不考慮時(shí)間的先后和執(zhí)行的順序,而只給出各軟件模塊之間的關(guān)系和相互作用。從圖10-8中可看出M調(diào)用A、B、C時(shí),沒(méi)有指明調(diào)用A、B、C的次序和條件,即軟件結(jié)構(gòu)不提供模塊間實(shí)現(xiàn)控制關(guān)系的操作細(xì)節(jié),更不提供模塊內(nèi)部的操作細(xì)節(jié)。圖10-8軟件結(jié)構(gòu)

軟件過(guò)程描述每個(gè)模塊的操作細(xì)節(jié),同時(shí)也包括一個(gè)模塊對(duì)下一層模塊控制的操作細(xì)節(jié)。過(guò)程的描述就是關(guān)于某個(gè)模塊算法的詳細(xì)描述,它應(yīng)該包括處理的順序、精確的判定位置、重復(fù)的操作以及數(shù)據(jù)組織和結(jié)構(gòu)等。為了描述軟件結(jié)構(gòu)的形態(tài)特征,下面介紹幾個(gè)術(shù)語(yǔ)。深度——軟件結(jié)構(gòu)中模塊的層數(shù)。寬度——軟件結(jié)構(gòu)中模塊的總跨度。扇出數(shù)——是一個(gè)模塊直接下層模塊的個(gè)數(shù)。扇入數(shù)——是一個(gè)模塊直接上層模塊的個(gè)數(shù)。

一個(gè)好的軟件結(jié)構(gòu)形態(tài)準(zhǔn)則:頂部寬度最小,中部寬度最大,底部寬度次之;在結(jié)構(gòu)頂部有較高的扇出數(shù),在底部有較高的扇入數(shù)。一個(gè)好的軟件結(jié)構(gòu)的第二個(gè)準(zhǔn)則是:模塊的作用域應(yīng)在模塊控制域之內(nèi),以減弱模塊間的耦合性。所謂作用域是指受該模塊判定條件影響的所有模塊數(shù),也就是直接調(diào)用的模塊數(shù)??刂朴蚴侵敢粋€(gè)模塊本身及所有下層模塊構(gòu)成的集合。如果作用域超出控制域,就要重新劃分調(diào)整。如圖10-8所示,B的作用域?yàn)镈、E,B的控制域?yàn)锽、D、E、F、G、H,則B的控制域包括了作用域,軟件結(jié)構(gòu)的劃分是合理的。2.模塊化準(zhǔn)則把軟件劃分為一些單獨(dú)命名和編程的元素,這些元素稱為模塊。模塊劃分的目的,一是進(jìn)行功能分解,把復(fù)雜的大的功能劃分成簡(jiǎn)單的小的子功能,盡量降低每個(gè)模塊的成本,二是盡量使模塊間的接口不能太多,太多會(huì)使接口成本增加。兼顧二者可取得最佳劃分狀態(tài),確保軟件總成本最低,如圖10-9所示。劃分模塊的過(guò)程就稱為模塊化。圖10-9模塊劃分與軟件成本關(guān)系3.模塊獨(dú)立性準(zhǔn)則把軟件劃分成模塊后,怎樣評(píng)價(jià)模塊結(jié)構(gòu)的好壞?為解決這一問(wèn)題,提出模塊獨(dú)立性概念。模塊獨(dú)立性是指模塊具有功能專一,模塊之間無(wú)過(guò)多相互作用的特性。具有獨(dú)立性的模塊,開發(fā)容易,模塊組合更容易,也容易修改,容易測(cè)試,并且能減少錯(cuò)誤的傳播。為了更好地定性度量模塊獨(dú)立性,引入了模塊的內(nèi)聚性和耦合性概念。內(nèi)聚性是模塊內(nèi)各部分之間聯(lián)系緊密程度的度量,耦合性是模塊之間聯(lián)系緊密程度的度量。(1)內(nèi)聚性。一個(gè)程序主要有兩部分,數(shù)據(jù)部分以及對(duì)數(shù)據(jù)的加工處理,而內(nèi)聚性是一個(gè)模塊內(nèi)各元素彼此的結(jié)合程度。內(nèi)聚性強(qiáng),標(biāo)志模塊的獨(dú)立性強(qiáng);內(nèi)聚性弱,標(biāo)志模塊的獨(dú)立性差。在一個(gè)理想的軟件系統(tǒng)中,每個(gè)模塊只做需求的一件事情,單一的功能,但在實(shí)現(xiàn)中一個(gè)模塊往往執(zhí)行若干結(jié)合在一起的任務(wù),這些任務(wù)組合方式不同就構(gòu)成了不同的內(nèi)聚性。偶然內(nèi)聚是將幾個(gè)無(wú)關(guān)系的任務(wù)組合在一起的模塊;邏輯內(nèi)聚是將幾個(gè)邏輯上相關(guān)的任務(wù)組合在一起的模塊;

時(shí)間內(nèi)聚是將在某一時(shí)刻同時(shí)要執(zhí)行的任務(wù)組合在一起的模塊;過(guò)程內(nèi)聚是指幾個(gè)相關(guān)聯(lián)的任務(wù)組合在一起的模塊;通信內(nèi)聚是指在同一數(shù)據(jù)結(jié)構(gòu)上進(jìn)行操作的幾個(gè)任務(wù)組合在一起的模塊;順序內(nèi)聚是指模塊的幾個(gè)任務(wù)總是前者的輸出即為后者的輸入,表現(xiàn)出按一定順序執(zhí)行;功能內(nèi)聚是指模塊只包含完成單一功能的任務(wù)。這些不同的內(nèi)聚,前面的內(nèi)聚性弱,后面的強(qiáng)。在進(jìn)行模塊設(shè)計(jì)時(shí),盡量爭(zhēng)取使模塊內(nèi)聚性強(qiáng)。(2)耦合性。耦合性是模塊間相互連接緊密程度的度量。耦合性強(qiáng),標(biāo)志互聯(lián)的強(qiáng),模塊獨(dú)立性差;耦合性弱,標(biāo)志互連的弱,模塊獨(dú)立性強(qiáng)。耦合強(qiáng)弱取決于劃分模塊造成模塊間接口的復(fù)雜程度。耦合性類型有如下幾種:數(shù)據(jù)耦合是指通過(guò)調(diào)用傳送簡(jiǎn)單數(shù)據(jù);特征耦合是指通過(guò)調(diào)用傳送數(shù)據(jù)結(jié)構(gòu)值;控制耦合是指通過(guò)調(diào)用傳送控制變量。

以上幾種耦合程度都較低。外部耦合是指模塊受軟件的外部環(huán)境的約束;公用耦合是指幾個(gè)模塊引用一個(gè)全程數(shù)據(jù)區(qū);內(nèi)容耦合是指一個(gè)模塊使用另一個(gè)模塊內(nèi)的數(shù)據(jù)或控制信息,或直接轉(zhuǎn)移到另一個(gè)模塊的內(nèi)部。后面這幾種耦合都是模塊間聯(lián)系較強(qiáng)的耦合性。設(shè)計(jì)階段開發(fā)軟件結(jié)構(gòu)要考慮模塊獨(dú)立性準(zhǔn)則,應(yīng)力求內(nèi)聚性高,耦合性低,既模塊是功能單一,通過(guò)調(diào)用語(yǔ)句傳送簡(jiǎn)單的局部數(shù)據(jù)值。10.4.3結(jié)構(gòu)化設(shè)計(jì)方法結(jié)構(gòu)化設(shè)計(jì)(SD,StructuredDesign)方法是由美國(guó)IBM公司的Constantine等人研究出來(lái)的,這是用于總體設(shè)計(jì)的一套方法,與SA方法聯(lián)合使用。SD方法的出發(fā)點(diǎn)是建立一個(gè)結(jié)構(gòu)良好的軟件系統(tǒng),基本思想來(lái)源于模塊化、自頂向下逐步求精的功能劃分,評(píng)價(jià)軟件結(jié)構(gòu)的準(zhǔn)則是模塊獨(dú)立性,既模塊內(nèi)聚性高、模塊之間的耦合性低。SD方法提供了從數(shù)據(jù)流圖導(dǎo)出軟件結(jié)構(gòu)的方法和規(guī)則,它采用軟件結(jié)構(gòu)圖來(lái)描述軟件結(jié)構(gòu)。SD方法應(yīng)用較為廣泛,它的基礎(chǔ)是數(shù)據(jù)流圖,幾乎所有軟件都能表示為數(shù)據(jù)流圖,所以在理論上可適用于任何軟件的開發(fā)工作。用SD方法進(jìn)行總體設(shè)計(jì)的過(guò)程大致如下:●精細(xì)化數(shù)據(jù)流圖,確定數(shù)據(jù)流圖的類型;●指出各種信息流的流界;●將數(shù)據(jù)流圖映射為軟件結(jié)構(gòu);●精細(xì)化軟件結(jié)構(gòu)圖;●開發(fā)接口描述和全程數(shù)據(jù)描述。1.?dāng)?shù)據(jù)流圖的類型數(shù)據(jù)流圖可分為兩大類型:變換型和事務(wù)型。大多數(shù)數(shù)據(jù)流圖可看成對(duì)輸入數(shù)據(jù)流進(jìn)行變換而得到輸出數(shù)據(jù)流,因此有輸入流、輸出流、變換流三部分。在輸入流中,信息由外部數(shù)據(jù)轉(zhuǎn)換為內(nèi)部形式進(jìn)入系統(tǒng);在變換流中,對(duì)內(nèi)部形式的信息進(jìn)行一系列加工處理,得到內(nèi)部形式的結(jié)果;在輸出流中,信息由內(nèi)部形式的結(jié)果轉(zhuǎn)換為外部形式數(shù)據(jù)流出系統(tǒng)。這就是變換型數(shù)據(jù)流圖的特點(diǎn)。圖10-10變換型和事務(wù)型的數(shù)據(jù)流圖形式

事務(wù)型數(shù)據(jù)流圖的特點(diǎn)是一個(gè)數(shù)據(jù)流經(jīng)過(guò)某個(gè)加工后,有若干平行數(shù)據(jù)流流出,那個(gè)輸入數(shù)據(jù)流稱為事務(wù)流,那個(gè)加工稱為事務(wù)中心,若干平行數(shù)據(jù)流稱為事務(wù)路徑。當(dāng)事務(wù)流中的事務(wù)送到事務(wù)中心后,事務(wù)中心分析每一事務(wù),確定其類型,根據(jù)事務(wù)類型選擇一個(gè)事務(wù)路徑繼續(xù)進(jìn)行處理。在一個(gè)大的數(shù)據(jù)流圖中,可能變換型和事務(wù)型均存在,總的來(lái)說(shuō)以變換為主,某個(gè)局部可能是事務(wù)型的。變換型和事務(wù)型的數(shù)據(jù)流圖形式如圖10-10所示。圖10-11軟件結(jié)構(gòu)圖2.軟件結(jié)構(gòu)圖軟件結(jié)構(gòu)用一種結(jié)構(gòu)圖來(lái)描述,它是設(shè)計(jì)說(shuō)明書的一部分。用方框表示模塊,方框中用文字標(biāo)記該模塊的名字,方框之間的連線表示關(guān)系,如圖10-11所示。A是B、C的直接上層模塊,B、C是A的直接下層模塊,表示控制關(guān)系的連線不加箭頭,模塊之間的小箭頭表示接口信息,小箭頭旁邊標(biāo)記的文字表示接口信息的名字,小箭頭的方向表示接口信息傳送的方向。模塊之間的菱形符號(hào)表示上層模塊有條件地調(diào)用下層模塊,弧形箭頭表示上層模塊重復(fù)地調(diào)用下層模塊。

3.變換分析使用變換分析技術(shù)可從典型的變換型數(shù)據(jù)流圖推導(dǎo)出相應(yīng)的軟件結(jié)構(gòu)圖,變換分析是一組設(shè)計(jì)步驟,可把數(shù)據(jù)流圖映射為一種標(biāo)準(zhǔn)結(jié)構(gòu)。有了標(biāo)準(zhǔn)結(jié)構(gòu)再根據(jù)軟件結(jié)構(gòu)的度量準(zhǔn)則、模塊化準(zhǔn)則、模塊獨(dú)立性準(zhǔn)則來(lái)修改完善軟件結(jié)構(gòu)圖,從而得到良好的軟件結(jié)構(gòu)。交換分析步驟為:確定數(shù)據(jù)流圖的類型;確定輸入流、中心加工和輸出流的流界;第一級(jí)分解,設(shè)計(jì)上層模塊;第二級(jí)分解,設(shè)計(jì)中下層模塊;進(jìn)一步精細(xì)化。(1)確定數(shù)據(jù)流圖的類型。一般從整體上看,一個(gè)系統(tǒng)總可分為輸入、處理、輸出三大部分,因此,總可以表示為變換型。但在某個(gè)局部的數(shù)據(jù)流圖中,可能遇到多分支,則是典型的事務(wù)型,故應(yīng)根據(jù)數(shù)據(jù)流圖的主要性質(zhì)來(lái)決定整個(gè)軟件系統(tǒng)的數(shù)據(jù)流圖特征。

(2)確定流界。這一步主要是找出輸入流、中心加工和輸出流三者之間的分界線。首先找出輸入流的終點(diǎn),輸入流是把物理輸入轉(zhuǎn)換為邏輯輸入;然后找出輸出流的起點(diǎn),輸出流是把邏輯輸出轉(zhuǎn)換為物理輸出;位于邏輯輸入和邏輯輸出之間的加工就是中心加工。(3)第一級(jí)分解,設(shè)計(jì)上層模塊,即設(shè)計(jì)頂層和第一層模塊。在中心加工位置上畫一個(gè)控制模塊CM,功能是控制整個(gè)軟件結(jié)構(gòu),這是頂層模塊。為每個(gè)輸入流設(shè)計(jì)一個(gè)輸入控制模塊CA,功能是協(xié)調(diào)輸入數(shù)據(jù)的處理工作,提供邏輯輸入信息。為每個(gè)輸出流設(shè)計(jì)一個(gè)輸出控制模塊CD和CE,功能是協(xié)調(diào)輸出數(shù)據(jù)的處理。為中心加工設(shè)計(jì)一個(gè)變換控制模塊CT,功能是將邏輯輸入變換為邏輯輸出。上層模塊設(shè)計(jì)結(jié)果如圖10-12所示。圖10-12頂層結(jié)構(gòu)圖(4)第二級(jí)分解,設(shè)計(jì)中下層模塊。自頂向下,逐步求精,為每個(gè)輸入流加工設(shè)計(jì)一個(gè)輸入模塊,向上層模塊提供輸入信息,而這個(gè)模塊又需要兩個(gè)下層模塊,一方面本身需要信息來(lái)源,另一方面又需將接收到的信息轉(zhuǎn)換為上層模塊所需的信息,即為“取信息模塊”和“轉(zhuǎn)換信息模塊”。如圖10-12中的數(shù)據(jù)流圖,C是邏輯輸入數(shù)據(jù)流,已經(jīng)設(shè)計(jì)CA模塊向模塊CM提供輸入信息C,而CA模塊又需要兩個(gè)下層模塊,首先要得到輸入信息B,然后將B轉(zhuǎn)換為C,即設(shè)計(jì)“取B”模塊和“轉(zhuǎn)換B”模塊。

也可以說(shuō)沿輸入流逆向分析,對(duì)每個(gè)加工設(shè)計(jì)兩個(gè)模塊,如圖10-12中的2號(hào)加工,設(shè)計(jì)“取B”和“轉(zhuǎn)換B”兩個(gè)模塊,對(duì)1號(hào)加工也設(shè)計(jì)兩個(gè)模塊,“取A”和“轉(zhuǎn)換A”模塊,“轉(zhuǎn)換A”的輸出信息是B,傳送到上層模塊“取B”,模塊“轉(zhuǎn)換B”的輸出信息是C,傳送到上層模塊CA,如圖10-13(a)所示。按此方法一直分解下去,直到遇到物理輸入為止。數(shù)據(jù)流A是物理輸入,所以分解到此為止。

為每個(gè)邏輯輸出流設(shè)計(jì)一個(gè)輸出模塊,圖10-12中有兩個(gè)邏輯輸出流D和E,已經(jīng)設(shè)計(jì)了CD模塊和CE模塊,下面以CD模塊為例進(jìn)行說(shuō)明。CD模塊的功能是要輸出CM模塊送來(lái)的數(shù)據(jù)流D,為此要設(shè)計(jì)兩個(gè)下層模塊,一個(gè)要把送來(lái)的信息進(jìn)行轉(zhuǎn)換,另一個(gè)要把轉(zhuǎn)換后的信息送走。也就是說(shuō)對(duì)每個(gè)邏輯輸出流,沿流向分析,對(duì)每個(gè)加工設(shè)計(jì)兩個(gè)模塊,一個(gè)是“轉(zhuǎn)換信息”模塊,另一個(gè)是“送信息”模塊。如圖10-12中的3號(hào)加工,設(shè)計(jì)“轉(zhuǎn)換D”和“送F”模塊;4號(hào)加工和5號(hào)加工,分別設(shè)計(jì)“轉(zhuǎn)換E”、“送G”、“轉(zhuǎn)換G”、“送H”模塊。如此分析下去,一直到遇到物理輸出為止。因?yàn)閿?shù)據(jù)流F和H是物理輸出數(shù)據(jù)流,所以分解到此為止。設(shè)計(jì)的中下層結(jié)構(gòu)如圖10-13(b)和(c)所示。為中心加工設(shè)計(jì)變換模塊,變換模塊的設(shè)計(jì)無(wú)規(guī)律性,一般可根據(jù)中心加工的子加工來(lái)建立模塊,現(xiàn)給圖10-12的數(shù)據(jù)流圖的邏輯輸入C和邏輯輸出D、E設(shè)計(jì)出相應(yīng)的變換模塊,如圖10-13(d)所示。圖10-13中下層結(jié)構(gòu)圖

上述設(shè)計(jì)中下層模塊的映射方法是將一個(gè)加工映射為兩個(gè)模塊,另一種設(shè)計(jì)中下層模塊的映射方法是將一個(gè)加工映射為一個(gè)模塊。

(5)進(jìn)一步精細(xì)。由上述步驟得到的軟件結(jié)構(gòu)圖是按映射規(guī)則得到的標(biāo)準(zhǔn)結(jié)構(gòu)圖,這只是一個(gè)初步的設(shè)計(jì),可能有不符合軟件設(shè)計(jì)準(zhǔn)則的地方,就要用前面介紹的軟件設(shè)計(jì)準(zhǔn)則來(lái)檢查軟件結(jié)構(gòu)圖,進(jìn)一步修改和完善這個(gè)結(jié)構(gòu)圖。例如有些模塊僅僅是傳送一些信息,沒(méi)有什么處理工作,這種模塊就可以取消;有些模塊功能很多,很復(fù)雜,需進(jìn)一步分解;有的模塊的作用域可能不在該模塊的控制域內(nèi),則要作適當(dāng)調(diào)整才行。4.事務(wù)分析當(dāng)數(shù)據(jù)流圖呈現(xiàn)出事務(wù)型特征時(shí),就要用事務(wù)分析技術(shù),將相應(yīng)的數(shù)據(jù)流圖映射為對(duì)應(yīng)的標(biāo)準(zhǔn)結(jié)構(gòu)圖,其步驟與變換分析相同。

(1)決定數(shù)據(jù)流圖類型。事務(wù)型數(shù)據(jù)流圖的顯著特點(diǎn)是有一事務(wù)流,經(jīng)過(guò)事務(wù)中心后,發(fā)散為若干事務(wù)路徑,某一事務(wù)只按其中一條事務(wù)路徑處理下去。(2)確定流界。首先識(shí)別事務(wù)流、事務(wù)中心和事務(wù)路徑。事務(wù)中心前是接受事務(wù),事務(wù)中心后是事務(wù)路徑。而事務(wù)中心本身有著顯著特點(diǎn),即一股數(shù)據(jù)流流入,有若干數(shù)據(jù)流流出。因此,事務(wù)型的流界比變換型的流界容易確定。

(3)第一級(jí)分解,設(shè)計(jì)上層模塊。事務(wù)分析把數(shù)據(jù)流圖映射成具有接受分支和發(fā)送分支的軟件結(jié)構(gòu),對(duì)應(yīng)事務(wù)中心,設(shè)計(jì)“事務(wù)控制”模塊;對(duì)應(yīng)事務(wù)流,設(shè)計(jì)“接受事務(wù)”模塊;對(duì)應(yīng)事務(wù)路徑,設(shè)計(jì)一個(gè)“發(fā)送事務(wù)”控制模塊。對(duì)應(yīng)的上層模塊如圖10-14所示。

圖10-14事務(wù)分析及標(biāo)準(zhǔn)結(jié)構(gòu)圖(4)第二級(jí)分解,設(shè)計(jì)中下層模塊。對(duì)于接受分支,可類似于變換型數(shù)據(jù)流圖中對(duì)輸入數(shù)據(jù)流的映射那樣設(shè)計(jì)中下層模塊。對(duì)于發(fā)送分支,在發(fā)送事務(wù)控制模塊下為每條事務(wù)路徑設(shè)計(jì)一個(gè)事務(wù)處理模塊,這一層模塊稱為事務(wù)層。在事務(wù)層模塊下,沿各事務(wù)路徑進(jìn)行分析,進(jìn)一步設(shè)計(jì)操作層模塊,然后再為操作模塊設(shè)計(jì)細(xì)節(jié)模塊。某些操作模塊和細(xì)節(jié)模塊可以被幾個(gè)上一層模塊共用。標(biāo)準(zhǔn)結(jié)構(gòu)圖如圖10-14所示。5.設(shè)計(jì)后處理進(jìn)行變換分析和事務(wù)分析之后,將數(shù)據(jù)流圖映射為標(biāo)準(zhǔn)結(jié)構(gòu)圖,然后再加以修改完善,最后還要對(duì)每個(gè)模塊的功能、接口信息、局部數(shù)據(jù)加以定義。要用自然語(yǔ)言來(lái)描述每個(gè)模塊的主要任務(wù)、主要功能、輸入信息、輸出信息等,這種定義起高一級(jí)的過(guò)程描述作用,以后在詳細(xì)設(shè)計(jì)期間還要進(jìn)一步精細(xì)。設(shè)計(jì)后處理可用兩種方法來(lái)描述,詳細(xì)描述可用IPO圖,一張IPO圖描述一個(gè)模塊;簡(jiǎn)單的描述可用一張表格,如圖10-15所示。圖10-15設(shè)計(jì)后模塊功能描述

軟件設(shè)計(jì),就是要確定軟件由哪些模塊組成及這些模塊之間的動(dòng)態(tài)調(diào)用關(guān)系,軟件結(jié)構(gòu)圖是描述軟件結(jié)構(gòu)的常用工具。在進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)時(shí),應(yīng)該遵循的最主要的準(zhǔn)則是模塊獨(dú)立性準(zhǔn)則,也就是說(shuō)軟件應(yīng)該由一組具有相對(duì)獨(dú)立功能的模塊組成,這些模塊彼此之供寶貴的提示。在進(jìn)行詳細(xì)的過(guò)程設(shè)計(jì)和編寫程序之前,首先進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì),其好處在于可以在軟件開發(fā)的早期從全局的角度對(duì)軟件結(jié)構(gòu)進(jìn)行優(yōu)化,在這個(gè)時(shí)期進(jìn)行優(yōu)化付出的代價(jià)不高,但卻可以使軟件質(zhì)量得到很大提高。

10.4.4詳細(xì)設(shè)計(jì)方法詳細(xì)設(shè)計(jì)的根本任務(wù)是確定每個(gè)模塊的內(nèi)部特征,即確定每個(gè)模塊內(nèi)部的執(zhí)行過(guò)程,也就是說(shuō)經(jīng)過(guò)這個(gè)階段的工作,應(yīng)該得出對(duì)目標(biāo)系統(tǒng)的精確描述,從而在編程階段可以把這個(gè)描述直接翻譯成用某種高級(jí)程序設(shè)計(jì)語(yǔ)言書寫的程序。

在總體設(shè)計(jì)中,不但建立了軟件結(jié)構(gòu),還為每個(gè)模塊確定了它應(yīng)完成的功能,定義了模塊與其它模塊的外部接口,設(shè)計(jì)了關(guān)鍵性的算法。詳細(xì)設(shè)計(jì)是以總體設(shè)計(jì)的設(shè)計(jì)說(shuō)明書為依據(jù),針對(duì)每個(gè)模塊進(jìn)行設(shè)計(jì),以實(shí)現(xiàn)指定的功能、算法和外部接口所要求的模塊內(nèi)部的數(shù)據(jù)結(jié)構(gòu)和程序邏輯結(jié)構(gòu)。詳細(xì)設(shè)計(jì)階段的產(chǎn)品——詳細(xì)設(shè)計(jì)規(guī)格說(shuō)明書是編程階段的依據(jù)。另外,詳細(xì)設(shè)計(jì)的目標(biāo)不僅僅是邏輯上正確地實(shí)現(xiàn)每個(gè)模塊的功能,更重要的是設(shè)計(jì)出的處理過(guò)程應(yīng)盡可能簡(jiǎn)明易懂。結(jié)構(gòu)化程序設(shè)計(jì)方法是實(shí)現(xiàn)上述目標(biāo)的關(guān)鍵技術(shù)。1.結(jié)構(gòu)化程序設(shè)計(jì)結(jié)構(gòu)化程序設(shè)計(jì)(SP,StructuredProgramming)的概念最早由E.W.Dijkstra提出。1966年Bohm和Jacopin證明了只用“順序”、“分支”、“重復(fù)”三種基本控制結(jié)構(gòu)就能實(shí)現(xiàn)任何單入口單出口的程序。1977年IBM公司的Mills進(jìn)一步指出程序應(yīng)該只有一個(gè)入口和一個(gè)出口。Bohm和Jacopin的證明給SP方法奠定了理論基礎(chǔ),Mills的工作補(bǔ)充了SP的規(guī)則。SP技術(shù)的要點(diǎn)是:●采用自頂向下、逐步求精的設(shè)計(jì)方法;●求精過(guò)程只使用順序、分支、重復(fù)三種控制結(jié)構(gòu);●一個(gè)程序只有一個(gè)入口一個(gè)出口。使用SP方法有如下的好處:

(1)自頂向下、逐步求精的方法符合人們解決復(fù)雜問(wèn)題的普遍規(guī)律,可以顯著提高軟件系統(tǒng)的成功率和生產(chǎn)率;(2)用先全局后局部、先整體后細(xì)節(jié)、先抽象后具體的逐步求精過(guò)程開發(fā)的程序有清晰的層次結(jié)構(gòu),容易理解和閱讀;

(3)不使用GOTO語(yǔ)句,只使用單入口單出口的控制結(jié)構(gòu),使程序靜態(tài)結(jié)構(gòu)和它的動(dòng)態(tài)執(zhí)行情況相一致,容易理解和閱讀,開發(fā)出的程序容易修改、維護(hù);

(4)控制結(jié)構(gòu)有確定的邏輯模式,編寫程序代碼只限于很少幾種直截了當(dāng)?shù)姆绞健?.基本控制結(jié)構(gòu)

(1)順序結(jié)構(gòu)。按順序執(zhí)行。

(2)分支結(jié)構(gòu)。一種是兩分支的IF-THEN-ELSE結(jié)構(gòu),條件成立執(zhí)行THEN分支,條件不成立執(zhí)行ELSE分支。它有一種退化形式,即IF-THEN結(jié)構(gòu),條件成立執(zhí)行THEN分支,條件不成立什么也不作。另一種是多分支的CASE結(jié)構(gòu)。(3)重復(fù)結(jié)構(gòu)。有兩種重復(fù)結(jié)構(gòu),一種是WHILE型,當(dāng)條件成立時(shí)執(zhí)行循環(huán)體,條件不成立時(shí)離開循環(huán)體,先判別條件,后執(zhí)行循環(huán)體;另一種是UNTIL型,它是先執(zhí)行循環(huán)一次,才去判定條件。還有一種FOR步長(zhǎng)型,它的執(zhí)行過(guò)程可用WHILE來(lái)表示。3.詳細(xì)設(shè)計(jì)的描述方法詳細(xì)設(shè)計(jì)的描述方法也稱為詳細(xì)設(shè)計(jì)工具,可以分為圖形、語(yǔ)言和表格三類,不論是哪類工具,對(duì)它們的基本要求都是能夠提供對(duì)設(shè)計(jì)的無(wú)二義的描述,同時(shí)應(yīng)該指明控制流程、處理功能、數(shù)據(jù)組織以及其它方面的實(shí)現(xiàn)細(xì)節(jié),并能在編程時(shí)將設(shè)計(jì)的描述直接翻譯成程序代碼。下面簡(jiǎn)述幾種詳細(xì)設(shè)計(jì)的工具。(1)程序流程圖。也稱程序框圖,它是歷史悠久使用最廣泛的描述詳細(xì)設(shè)計(jì)的工具,然而也是用得最混亂的一種工具。它用方框表示一個(gè)處理步驟,菱形表示一個(gè)邏輯條件,箭頭表示控制流向。圖10-16給出了幾種不同的基本控制結(jié)構(gòu),其中S、S1、S2、…表示各種處理,e、e1、e2、…表示各種邏輯判斷條件。圖10-16程序流程圖的基本控制結(jié)構(gòu)(2)?PAD圖。問(wèn)題分析圖(PAD,ProblemAnalysisDiagram)是一種改進(jìn)的圖形描述方式,可以用來(lái)取代程序流程圖。PAD圖是日本日立制作所中央研究所主任研究員二村良彥于1979年提出的,它是一種二維展開的圖形,比程序流程圖直觀,結(jié)構(gòu)更清晰,最大的優(yōu)點(diǎn)是能夠反映和描述自頂向下逐步求精的歷史和過(guò)程。首先可以描述出一個(gè)模塊由幾部分構(gòu)成,然后再求精每一個(gè)部分是什么結(jié)構(gòu),再進(jìn)一步描述每種結(jié)構(gòu)的細(xì)節(jié)部分,直至求精結(jié)束。而程序流程圖做不到這一點(diǎn),所看到的程序流程圖已是最后結(jié)果,中間的求精過(guò)程無(wú)法保存,無(wú)法描述。PAD圖的基本控制結(jié)構(gòu)如圖10-17所示。其中S、S1、S2、…為處理;e、e1、…為邏輯判定條件。分支結(jié)構(gòu)有兩部分,帶鋸齒的框?yàn)闂l件判定,每一個(gè)鋸齒表示該判定中的一種條件,與該齒相連的處理框表示該分支要執(zhí)行的處理。重復(fù)結(jié)構(gòu)由兩部分組成,左邊框的右部多一道豎線,表示循環(huán)的類型和終止條件,右邊的部分表示要重復(fù)執(zhí)行的循環(huán)體。

圖10-17PAD圖的基本控制結(jié)構(gòu)(3)偽碼和PDL語(yǔ)言。偽碼(PseudoCode)屬于文字形式的表達(dá)工具,類似于結(jié)構(gòu)化語(yǔ)言,但比結(jié)構(gòu)化語(yǔ)言表示更規(guī)范完整。PDL語(yǔ)言是在偽碼的基礎(chǔ)上,擴(kuò)充了數(shù)據(jù)描述,輸入輸出描述,定義和調(diào)用模塊的描述。PDL語(yǔ)言的控制結(jié)構(gòu)描述,仍采用偽碼的描述。這種語(yǔ)言描述工具不同于高級(jí)語(yǔ)言,計(jì)算機(jī)是不能識(shí)別和執(zhí)行的,控制結(jié)構(gòu)的框架采用了高級(jí)語(yǔ)言的關(guān)鍵字(如:IF-THEN-ELSE等),但各種條件和處理描述采用的是自然語(yǔ)言。用它來(lái)描述詳細(xì)設(shè)計(jì),工作量比畫圖小,又較易轉(zhuǎn)換為真正的代碼。

以上介紹的幾種工具,都可以用來(lái)描述模塊的邏輯過(guò)程。由于圖形表達(dá)工具繪圖費(fèi)時(shí),又不易修改,許多人寧愿用PDL代替流程圖來(lái)進(jìn)行詳細(xì)設(shè)計(jì),惟有PAD圖由于其簡(jiǎn)明而靈活的結(jié)構(gòu)表達(dá)能力,仍然深受廣大軟件設(shè)計(jì)人員的歡迎。通過(guò)詳細(xì)設(shè)計(jì)的描述工具,把每個(gè)模塊的控制流程都描述出來(lái)了,這些控制結(jié)構(gòu)是統(tǒng)一的、一致的,而且描述出來(lái)的結(jié)構(gòu)都是準(zhǔn)確無(wú)二義性的,均有高級(jí)語(yǔ)言的語(yǔ)句和它們對(duì)應(yīng),到編程階段只要按照對(duì)應(yīng)關(guān)系寫出語(yǔ)句即可。10.4.5面向?qū)ο蟮某绦蛟O(shè)計(jì)方法面向?qū)ο?ObjectOriented)程序設(shè)計(jì)方法簡(jiǎn)稱為OO方法。面向?qū)ο蟮某绦蛟O(shè)計(jì)是以對(duì)象為基礎(chǔ),以消息驅(qū)動(dòng)對(duì)象執(zhí)行的程序設(shè)計(jì)技術(shù)。OO方法的思想最早出現(xiàn)于挪威奧斯陸大學(xué)和挪威計(jì)算中心共同研制的仿真語(yǔ)言Simula67中。1980年美國(guó)加州的Xerox研究中心推出SmallTalk80語(yǔ)言,使得OO方法得以較完善地實(shí)現(xiàn)。20世紀(jì)90年代初,OO方法和OO程序設(shè)計(jì)語(yǔ)言開始成熟。

OO方法迅速發(fā)展的最直接動(dòng)力是社會(huì)對(duì)軟件日益增長(zhǎng)的需求和軟件生產(chǎn)低效率的矛盾所致。隨著計(jì)算機(jī)科學(xué)的發(fā)展,其應(yīng)用拓寬到各個(gè)領(lǐng)域,軟件承擔(dān)了越來(lái)越重要的工作。從大到宇宙空間的探索研究,小到日常生活的衣食住行;從金融、交通、國(guó)防等重要部門,到各行各業(yè),都離不開軟件。因此,當(dāng)軟件出現(xiàn)問(wèn)題時(shí)所付出的代價(jià)將是昂貴的。這就要求軟件產(chǎn)品具有更高的可靠性、更好的可維護(hù)性和更多的可重用性。傳統(tǒng)的結(jié)構(gòu)化設(shè)計(jì)方法根本無(wú)法滿足這些要求,致使計(jì)算機(jī)界一直經(jīng)受著軟件危機(jī)的困擾。當(dāng)OO的思想和方法一經(jīng)出現(xiàn),就引起計(jì)算機(jī)界的極大關(guān)注,使得OO技術(shù)的研究和應(yīng)用得到了迅速發(fā)展。

OO技術(shù)為軟件開發(fā)提供了一種新的方法,引入了許多新的概念。這些概念是理解和使用OO技術(shù)的基礎(chǔ)。

1.OO的基本概念

OO方法是通過(guò)分析、研究實(shí)際應(yīng)用中的實(shí)體、實(shí)體的屬性及其相互關(guān)系,從中抽象出要解決問(wèn)題的對(duì)象。再對(duì)具有相同屬性和功能的對(duì)象進(jìn)行更高級(jí)的抽象得到能夠求解的對(duì)象類。最后求解對(duì)象類,得到問(wèn)題的解答。1)實(shí)體和對(duì)象實(shí)體是客觀存在的事物??陀^世界中的問(wèn)題都是由實(shí)體及其相互之間的關(guān)系構(gòu)成的。OO技術(shù)就是從找實(shí)體開始,去認(rèn)識(shí)、分析問(wèn)題,從而構(gòu)成其獨(dú)特的方法基礎(chǔ)。在需求分析階段找出的實(shí)體越多,在設(shè)計(jì)階段對(duì)問(wèn)題的描述就越準(zhǔn)確。1)實(shí)體和對(duì)象實(shí)體是客觀存在的事物。客觀世界中的問(wèn)題都是由實(shí)體及其相互之間的關(guān)系構(gòu)成的。OO技術(shù)就是從找實(shí)體開始,去認(rèn)識(shí)、分析問(wèn)題,從而構(gòu)成其獨(dú)特的方法基礎(chǔ)。在需求分析階段找出的實(shí)體越多,在設(shè)計(jì)階段對(duì)問(wèn)題的描述就越準(zhǔn)確。

在計(jì)算機(jī)解題過(guò)程中,首先要把客觀世界中的實(shí)際問(wèn)題轉(zhuǎn)換為能用計(jì)算機(jī)表示的形式,才能進(jìn)行編程處理。即要把客觀問(wèn)題域中的實(shí)體抽象為計(jì)算機(jī)求解域中的對(duì)象。因此,對(duì)象是邏輯化的實(shí)體。對(duì)象具有自己的數(shù)據(jù)結(jié)構(gòu)(也稱為屬性),用于描述對(duì)象的狀態(tài)(例如,用一個(gè)字符串、整數(shù)和邏輯性字段組成的記錄描述教師對(duì)象的姓名、年齡和婚姻狀況)。對(duì)象的狀態(tài)通過(guò)各自的行為方法(操作)可以改變。而操作是通過(guò)向目標(biāo)對(duì)象傳遞消息來(lái)實(shí)現(xiàn)的。所以,也可以說(shuō)對(duì)象是封裝了數(shù)據(jù)和操作的邏輯實(shí)體。OO方法是以“對(duì)象為中心”的解題過(guò)程,它將數(shù)據(jù)抽象和功能抽象有機(jī)地結(jié)合為一體,使對(duì)象具有較強(qiáng)的獨(dú)立性和自治性,從而具有很好的模塊化的特點(diǎn)。2)方法和消息對(duì)象的處理稱為操作或方法。每個(gè)對(duì)象都有自己的屬性和方法,對(duì)象自己不能改變自身的屬性和實(shí)現(xiàn)自己的方法,這些行為是通過(guò)其它對(duì)象來(lái)實(shí)現(xiàn)的。消息是對(duì)象之間進(jìn)行聯(lián)系和通信的惟一方式,為了實(shí)現(xiàn)對(duì)象的方法,消息中必須包括:目標(biāo)對(duì)象名稱、方法名稱和變量、調(diào)用與選定方法對(duì)應(yīng)的程序等信息。這種機(jī)制有些類似于結(jié)構(gòu)化程序設(shè)計(jì)語(yǔ)言中的過(guò)程調(diào)用,但與傳統(tǒng)方法的重要區(qū)別在于:消息傳遞可以動(dòng)態(tài)聯(lián)編到目標(biāo)對(duì)象中去。換句話說(shuō),傳遞消息可以在編譯時(shí)執(zhí)行,也可以在運(yùn)行時(shí)執(zhí)行。

表示消息的形式是消息模式。一個(gè)消息模式定義對(duì)象的一種方法,所有消息模式及其相對(duì)應(yīng)的方法定義了對(duì)象的外部特征(使用者可以調(diào)用的方法)。我們用學(xué)生檔案管理為例說(shuō)明對(duì)象方法和消息之間的關(guān)系,如圖10-18所示。圖10-18學(xué)生對(duì)象和消息傳遞示意圖

學(xué)生對(duì)象在計(jì)算機(jī)中實(shí)現(xiàn)后具有自己的數(shù)據(jù)結(jié)構(gòu)(例如姓名、學(xué)號(hào)、專業(yè)等)和操作(例如增加、修改、刪除和查找學(xué)生記錄)。具體操作時(shí),通過(guò)學(xué)生對(duì)象的接口向?qū)ο蟀l(fā)送消息Find_student($student);消息中包括操作名稱Find_student(?)、操作變量$student,該變量中指出要找的某個(gè)學(xué)生名字、學(xué)號(hào)和班級(jí)。通過(guò)內(nèi)部調(diào)用,執(zhí)行查找指定學(xué)生的操作。對(duì)于同一模式的不同消息,同一對(duì)象所做的解釋和處理是相同的,但處理結(jié)果是不同的。例如,發(fā)出消息Delete_student($student),處理結(jié)果是刪除指定的學(xué)生記錄。3)對(duì)象類、類層次和類格從對(duì)象的觀點(diǎn)看,對(duì)象類(簡(jiǎn)稱類)就是具有共同屬性、共同操作性質(zhì)的對(duì)象的集合。一個(gè)類實(shí)質(zhì)上定義了一種對(duì)象類型,它描述了屬于該類型的所有對(duì)象的性質(zhì)。而每個(gè)不同的對(duì)象則是所屬類的一個(gè)實(shí)例(Instance)。一個(gè)類可以包含許多不同的但性質(zhì)相同的對(duì)象。在OO程序設(shè)計(jì)語(yǔ)言中可以直接定義、求解并實(shí)現(xiàn)類。類包含兩方面的內(nèi)容:外部特性和內(nèi)部實(shí)現(xiàn)。

外部特性即類的外部接口描述,它定義了一組使外界可以識(shí)別的操作符(每個(gè)操作符由操作名稱和操作對(duì)象組成),用消息模式的形式來(lái)解釋,也可以說(shuō)類的外部接口描述定義了一組消息模式及其相應(yīng)的處理能力。通過(guò)外部特性,使用戶可以了解這樣一個(gè)類是什么,能夠做什么事情。

內(nèi)部實(shí)現(xiàn)即類的內(nèi)部表示及類定義的具體實(shí)現(xiàn)方法,它定義了一組內(nèi)部實(shí)現(xiàn)處理能力的程序以及由這組程序所識(shí)別的變量。如“學(xué)生類”實(shí)現(xiàn)示意圖如圖10-19所示。類的內(nèi)部實(shí)現(xiàn)對(duì)用戶來(lái)說(shuō)是不透明的,用戶只需了解該類能夠做什么事情就足夠了,至于怎樣做這些事情,那是系統(tǒng)開發(fā)人員在系統(tǒng)設(shè)計(jì)和編程時(shí)所考慮和解決的問(wèn)題,這絲毫不影響用戶實(shí)現(xiàn)類的有關(guān)操作。圖10-19“學(xué)生類”實(shí)現(xiàn)示意圖

類具有動(dòng)態(tài)性,這是類和類型的顯著區(qū)別之一。類好比一個(gè)加工廠,它可以生產(chǎn)出許多不同的對(duì)象,但這些對(duì)象都是按相同“類型”模式制作的,它們都具有相同的性質(zhì)。然而,同類生成的對(duì)象并非完全一模一樣,它們還有其不同的內(nèi)部狀態(tài)。例如,學(xué)生類中的不同學(xué)生,有的通過(guò)英語(yǔ)四級(jí)考試,有的因病休學(xué)一年,顯然它們是不一樣的。這正是對(duì)象和類的優(yōu)點(diǎn),真實(shí)地描述了實(shí)體的客觀性和特殊性,因而具有很強(qiáng)的實(shí)用性。類并不是只能獨(dú)立地描述一個(gè)點(diǎn)的問(wèn)題,它可以把研究領(lǐng)域擴(kuò)大到一個(gè)方面,這就是所謂的類層次的概念。

一個(gè)類可以有它的上層類或是下層類,上層類稱為超類(Superclass),下層類稱為子類(Subclass)。由此而產(chǎn)生出類的層次結(jié)構(gòu),并稱其為類層次。越上層的類越具有概括性,越下層的類越具體化。一般情況下類層次結(jié)構(gòu)呈樹型結(jié)構(gòu)。一個(gè)超類對(duì)應(yīng)多個(gè)子類,一個(gè)子類對(duì)應(yīng)一個(gè)超類,但也有呈網(wǎng)狀結(jié)構(gòu)的,例如圖10-20中的研究生,其超類有2個(gè)。將子類具有一個(gè)以上超類的類層次結(jié)構(gòu)稱為類格結(jié)構(gòu)。例如,在研究生子類中,有在職研究生,他們?cè)诠プx學(xué)位的同時(shí),還要承擔(dān)教學(xué)任務(wù)。類格結(jié)構(gòu)用來(lái)描述具有多重隸屬關(guān)系(多重屬性)的求解對(duì)象類。圖10-20“人”類層次結(jié)構(gòu)示意圖2.OO方法的特點(diǎn)

OO方法是一種與傳統(tǒng)方法截然不同的、面貌全新的方法,它的出發(fā)點(diǎn)和基本目標(biāo)是使求解問(wèn)題所選用的方法與人類認(rèn)識(shí)問(wèn)題的方法盡可能接近,即使描述問(wèn)題的定義域與解決問(wèn)題的方法域在結(jié)構(gòu)上盡可能一致。由于OO方法對(duì)問(wèn)題域進(jìn)行自然分割,以更接近人類思維的方式設(shè)計(jì)、建立問(wèn)題域模型,以便對(duì)客觀實(shí)體進(jìn)行結(jié)構(gòu)和行為模擬,從而使設(shè)計(jì)出的系統(tǒng)盡可能直接地描述并解決實(shí)際問(wèn)題。OO方法所產(chǎn)生的系統(tǒng)模塊具有可重用性、可擴(kuò)充性和可維護(hù)性,所以較好地解決了因軟件危機(jī)而產(chǎn)生的矛盾。OO方法也因此受到越來(lái)越多的專業(yè)軟件開發(fā)者的厚愛。OO方法的特點(diǎn)體現(xiàn)在以下幾個(gè)方面:(1)?OO方法的抽象技術(shù);(2)?OO方法的規(guī)范化原則;(3)?OO方法的封裝技術(shù);(4)?OO方法的繼承機(jī)制;(5)?OO方法的解題過(guò)程;(6)?OO方法便于用戶參與。1)?OO方法的抽象技術(shù)抽象是對(duì)復(fù)雜的客觀事物進(jìn)行簡(jiǎn)化并概括。OO方法比其它已有方法從應(yīng)用設(shè)計(jì)到解決方案有更高的抽象性和更好的對(duì)應(yīng)性,主要體現(xiàn)在以下幾個(gè)方面。

(1)對(duì)象具有極強(qiáng)的抽象表達(dá)能力。OO方法采用對(duì)象來(lái)表達(dá)一切事物實(shí)體。由于對(duì)象可具有不同的屬性,使得OO方法具有很強(qiáng)的建模能力。

(2)對(duì)象實(shí)現(xiàn)了抽象的數(shù)據(jù)類型。在對(duì)對(duì)象抽象的基礎(chǔ)上,OO方法更進(jìn)一步提出對(duì)象類的概念,從而實(shí)現(xiàn)了更高層的抽象。對(duì)象類將數(shù)據(jù)結(jié)構(gòu)上的抽象與功能上的抽象相結(jié)合,實(shí)現(xiàn)了類定義。它不僅可由系統(tǒng)來(lái)定義類所具有的數(shù)據(jù)類型,還可以由用戶按需要靈活地定義類的數(shù)據(jù)類型。這種允許用戶定義類的數(shù)據(jù)類型的機(jī)制被稱為“抽象的數(shù)據(jù)類型”,它使得OO方法具有更強(qiáng)的解決復(fù)雜問(wèn)題的能力。(3)規(guī)范化的抽象方法。OO方法的抽象技術(shù)不像其它方法那樣有很大的隨意性,它更接近于人類認(rèn)識(shí)客觀事物的思維方法。其方法主要步驟為:①尋找需要研究的實(shí)體。②研究每個(gè)實(shí)體的屬性、特征和功能。③根據(jù)這些實(shí)體的屬性、特征和功能,將它們組合形成不同的模塊,最后形成整個(gè)應(yīng)用系統(tǒng)。

OO方法的抽象技術(shù)是從最實(shí)際、具體的實(shí)體開始,規(guī)范化地按步驟進(jìn)行,從而減少了隨意性。而其它方法則著眼于問(wèn)題的解決方案,差異和主觀性也隨之產(chǎn)生。2)?OO方法的規(guī)范化原則

OO方法的設(shè)計(jì)思想是建立在嚴(yán)謹(jǐn)?shù)囊?guī)范化原則基礎(chǔ)上,并將這種原則貫穿其需求分析、設(shè)計(jì)和實(shí)現(xiàn)的操作過(guò)程中。

OO方法把其設(shè)計(jì)分成兩個(gè)層次:一個(gè)是應(yīng)用域,對(duì)應(yīng)問(wèn)題的現(xiàn)實(shí)空間;一個(gè)是求解域,對(duì)應(yīng)問(wèn)題的邏輯空間。如圖10-21所示。圖10-21邏輯問(wèn)題空間OO方法明確地規(guī)定:設(shè)計(jì)從在應(yīng)用域中尋找具體的實(shí)體開始,對(duì)實(shí)體進(jìn)行抽象得到類型;通過(guò)分析實(shí)體的結(jié)構(gòu)屬性和行為方法,在求解域中可以找到與實(shí)體對(duì)應(yīng)的對(duì)象,再經(jīng)抽象得到種類;最后用編程工具去實(shí)現(xiàn)種類。OO方法的這種從具體到抽象、從應(yīng)用域到求解域的一一對(duì)應(yīng)的規(guī)范設(shè)計(jì)方法在其它方法中是沒(méi)有的。3)?OO方法的封裝技術(shù)所謂封裝技術(shù)是一種信息隱藏技術(shù),其目的是將對(duì)象的設(shè)計(jì)者和對(duì)象的使用者分開。對(duì)象的封裝性體現(xiàn)在:

(1)對(duì)象具有清楚的邊界,對(duì)象內(nèi)部的數(shù)據(jù)結(jié)構(gòu)和操作限定在這個(gè)邊界之內(nèi)。

(2)對(duì)象具有統(tǒng)一的外部接口,外部接口也稱為消息模式,它描述了該對(duì)象和其它對(duì)象之間的關(guān)系。(3)對(duì)象的內(nèi)部實(shí)現(xiàn)是不公開的。對(duì)象的內(nèi)部實(shí)現(xiàn)給出了對(duì)象提供的功能細(xì)節(jié),而這些功能細(xì)節(jié)用戶和外部對(duì)象是不能使用的,但對(duì)設(shè)計(jì)開發(fā)人員是開放的。這樣做更便于用戶能集中精力去考慮系統(tǒng)以及各模塊間的相互關(guān)系等重大問(wèn)題;而軟件開發(fā)人員則主要研究和保證模塊的質(zhì)量與可靠性。

信息隱藏是軟件開發(fā)過(guò)程中強(qiáng)調(diào)的一個(gè)重要概念,對(duì)象的封裝性很好地體現(xiàn)了這一概念。封裝性向開發(fā)人員和用戶屏蔽了軟件的復(fù)雜性和實(shí)現(xiàn)細(xì)節(jié),從而降低了應(yīng)用系統(tǒng)開發(fā)和維護(hù)的難度,提高了開發(fā)效率、質(zhì)量和可靠性。這也正是軟件工程追求的一個(gè)目標(biāo)。

4)?OO方法的繼承機(jī)制繼承性是OO方法獨(dú)有的,因此,繼承性是OO方法區(qū)別于其它方法的重要標(biāo)志之一。所謂“繼承性”是指:任何一個(gè)對(duì)象都是某一個(gè)類的實(shí)例,并繼承該類定義的數(shù)據(jù)結(jié)構(gòu)和操作。將能夠?qū)︻?包括對(duì)象)的數(shù)據(jù)結(jié)構(gòu)及操作進(jìn)行描述的特性稱之為語(yǔ)義特性。繼承性是自動(dòng)共享類及對(duì)象的語(yǔ)義特性,這種共享機(jī)制包括:(1)新產(chǎn)生的對(duì)象自動(dòng)繼承該類的語(yǔ)義特性;

(2)子類自動(dòng)繼承其超類的語(yǔ)義特性;對(duì)多層類層次結(jié)構(gòu),下層子類可以繼承其上各層超類的語(yǔ)義特性(繼承傳遞性);

(3)子類可以從它的多個(gè)超類中繼承它們的語(yǔ)義特性(多重繼承)。繼承性是現(xiàn)代軟件工程中的重要概念。軟件的可重用性、程序成分的可重用性是通過(guò)繼承(共享)類中的數(shù)據(jù)結(jié)構(gòu)和操作而實(shí)現(xiàn)的。5)?OO方法的解題過(guò)程

OO方法的解題過(guò)程與其它方法的主要區(qū)別在于:OO方法在解決問(wèn)題的一開始就提出“做什么”這樣最實(shí)質(zhì)性的問(wèn)題,而其它方法則是極力找出“怎樣做”的模型。顯然這是兩種截然不同的設(shè)計(jì)思想。OO方法是在尋找“做什么”的指導(dǎo)思想支配下,在需

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論