




已閱讀5頁(yè),還剩75頁(yè)未讀, 繼續(xù)免費(fèi)閱讀
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1,第二部分、開(kāi)發(fā)階段,系統(tǒng)設(shè)計(jì)總體設(shè)計(jì)體系結(jié)構(gòu)設(shè)計(jì)模塊設(shè)計(jì)詳細(xì)設(shè)計(jì)用戶(hù)界面設(shè)計(jì)數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)系統(tǒng)實(shí)現(xiàn)編碼和單元測(cè)試綜合測(cè)試,體系結(jié)構(gòu)就如同人的骨架。如果某個(gè)家伙的骨架是猴子,那么無(wú)論怎樣喂養(yǎng)和美容,他始終都是猴子,不會(huì)成為人。,模塊就如同人的器官,具有特定的功能。人體中最出色的模塊設(shè)計(jì)之一是手,手只有幾種動(dòng)作,卻能做無(wú)限多的事情。人體中最糟糕的模塊設(shè)計(jì)之一是嘴巴,嘴巴將最有價(jià)值但毫無(wú)相干的幾種功能如吃飯、說(shuō)話混為一體,使之無(wú)法并行處理,真乃人類(lèi)之不幸。,用戶(hù)界面就如同人的外表,最容易讓人一見(jiàn)鐘情或一見(jiàn)惡心。象人類(lèi)追求心靈美和外表美那樣,軟件系統(tǒng)也追求(內(nèi)在的)功能強(qiáng)大和(外表的)界面友好。但隨著生活節(jié)奏的加快,人們已少有興趣去品味深藏不露的內(nèi)在美。如果把Unix系統(tǒng)比作是健壯的漢子和婦人,那么Windows系統(tǒng)就象嫵媚的小白臉和狐貍精。想不到Windows系統(tǒng)竟然能興風(fēng)作浪,占去大半市場(chǎng)。,數(shù)據(jù)結(jié)構(gòu)與算法就如同人的血脈和神經(jīng),它讓器官具有生命并能發(fā)揮功能。數(shù)據(jù)結(jié)構(gòu)與算法分布在體系結(jié)構(gòu)和模塊中,它將協(xié)調(diào)系統(tǒng)的各個(gè)功能。人的耳朵和嘴巴雖然是相對(duì)獨(dú)立的器官,但如果耳朵失聰了,嘴巴就只能發(fā)出“啊”“嗚”的聲音,等于喪失了說(shuō)話的功能,可人們卻又能用手勢(shì)代替說(shuō)話。人體的數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)真是十分神奇并且十分可笑。,2,第5章總體設(shè)計(jì),本章主要內(nèi)容:軟件設(shè)計(jì)的概念與原則;總體設(shè)計(jì)的步驟和方法;面向數(shù)據(jù)流的設(shè)計(jì)方法;總體設(shè)計(jì)的文檔與評(píng)審。本章重點(diǎn):總體設(shè)計(jì)的步驟和方法;面向數(shù)據(jù)流的設(shè)計(jì)方法本章難點(diǎn):軟件設(shè)計(jì)的原則,內(nèi)聚和耦合,系統(tǒng)結(jié)構(gòu)圖。,第五章總體設(shè)計(jì),5.1設(shè)計(jì)過(guò)程5.2設(shè)計(jì)原理5.3啟發(fā)規(guī)則5.4描繪軟件結(jié)構(gòu)的圖形工具5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,4,總體設(shè)計(jì)的基本目的總體設(shè)計(jì)的基本目的就是回答“概括地說(shuō),系統(tǒng)應(yīng)該如何實(shí)現(xiàn)?”這個(gè)問(wèn)題??傮w設(shè)計(jì)又稱(chēng)為概要設(shè)計(jì)或初步設(shè)計(jì)??傮w設(shè)計(jì)階段的任務(wù)通過(guò)這個(gè)階段的工作將劃分出組成系統(tǒng)的物理元素程序、文件、數(shù)據(jù)庫(kù)、人工過(guò)程和文檔等等,但是每個(gè)物理元素仍然處于黑盒子級(jí),這些黑盒子里的具體內(nèi)容將在以后仔細(xì)設(shè)計(jì)??傮w設(shè)計(jì)階段的另一項(xiàng)重要任務(wù)是設(shè)計(jì)軟件的結(jié)構(gòu),也就是要確定系統(tǒng)中每個(gè)程序是由哪些模塊組成的,以及這些模塊相互間的關(guān)系。總體設(shè)計(jì)的意義在詳細(xì)設(shè)計(jì)之前進(jìn)行總體設(shè)計(jì)可以站在全局高度上,花較少成本,從較抽象的層次上分析對(duì)比多種可能的系統(tǒng)實(shí)現(xiàn)方案和軟件結(jié)構(gòu),從中選出最佳方案和最合理的軟件結(jié)構(gòu),從而用較低成本開(kāi)發(fā)出較高質(zhì)量的軟件系統(tǒng)。,把對(duì)象當(dāng)作一個(gè)黑盒子,不需要知道里面是怎么處理的。,5,5.1總體設(shè)計(jì)的過(guò)程,總體設(shè)計(jì)過(guò)程通常由兩個(gè)主要階段組成:系統(tǒng)設(shè)計(jì):確定系統(tǒng)的具體實(shí)現(xiàn)方案。結(jié)構(gòu)設(shè)計(jì):確定軟件結(jié)構(gòu)。9個(gè)步驟:設(shè)想供選擇的方案選取合理的方案推薦最佳方案功能分解設(shè)計(jì)軟件結(jié)構(gòu)設(shè)計(jì)數(shù)據(jù)庫(kù)制定測(cè)試計(jì)劃書(shū)寫(xiě)文檔審查和復(fù)審,6,5.1.1設(shè)想供選擇的方案,在總體設(shè)計(jì)階段分析員應(yīng)該考慮各種可能的實(shí)現(xiàn)方案,并且力求從中選出最佳方案。需求分析階段得出的數(shù)據(jù)流圖是總體設(shè)計(jì)的極好的出發(fā)點(diǎn)。數(shù)據(jù)流圖中的某些處理可以邏輯地歸并在一個(gè)自動(dòng)化邊界內(nèi)作為一組,另一些處理可以放在另一個(gè)自動(dòng)化邊界內(nèi)作為另一組。這些自動(dòng)化邊界通常意味著某種實(shí)現(xiàn)策略。設(shè)想把數(shù)據(jù)流圖中的處理分組的各種可能的方法,拋棄在技術(shù)上行不通的分組方法(例如,組內(nèi)不同處理的執(zhí)行時(shí)間不相容),余下的分組方法代表可能的實(shí)現(xiàn)策略,并且可以啟示供選擇的物理系統(tǒng)。在總體設(shè)計(jì)的該步驟中分析員僅僅一個(gè)邊界一個(gè)邊界地設(shè)想并且列出供選擇的方案,并不評(píng)價(jià)這些方案。,5.1總體設(shè)計(jì)的過(guò)程,7,8,5.1.2選取若干個(gè)合理的方案,至少選取低成本、中等成本和高成本三種方案。每種方案準(zhǔn)備四份資料:系統(tǒng)流程圖;組成系統(tǒng)的物理元素清單;成本/效益分析;實(shí)現(xiàn)這個(gè)系統(tǒng)的進(jìn)度計(jì)劃。,5.1總體設(shè)計(jì)的過(guò)程,9,5.1.3推薦最佳方案,分析員應(yīng)該綜合分析對(duì)比各種合理方案的利弊,推薦一個(gè)最佳的方案,并且為推薦的方案制定詳細(xì)的實(shí)現(xiàn)計(jì)劃。在使用部門(mén)的負(fù)責(zé)人接受了分析員所推薦的方案之后,將進(jìn)入總體設(shè)計(jì)過(guò)程的下一個(gè)重要階段結(jié)構(gòu)設(shè)計(jì)。,5.1總體設(shè)計(jì)的過(guò)程,10,5.1.4功能分解,程序(特別是復(fù)雜的大型程序)的設(shè)計(jì),通常分為兩個(gè)階段完成:結(jié)構(gòu)設(shè)計(jì):結(jié)構(gòu)設(shè)計(jì)是總體設(shè)計(jì)階段的任務(wù)。結(jié)構(gòu)設(shè)計(jì)確定程序由哪些模塊組成,以及這些模塊之間的關(guān)系。過(guò)程設(shè)計(jì):過(guò)程設(shè)計(jì)是詳細(xì)設(shè)計(jì)階段的任務(wù)。過(guò)程設(shè)計(jì)確定每個(gè)模塊的處理過(guò)程。為確定軟件結(jié)構(gòu),首先需要從實(shí)現(xiàn)角度把復(fù)雜的功能進(jìn)一步分解。一般說(shuō)來(lái),經(jīng)過(guò)分解之后應(yīng)該使每個(gè)功能對(duì)大多數(shù)程序員而言都是明顯易懂的。功能分解導(dǎo)致數(shù)據(jù)流圖的進(jìn)一步細(xì)化,同時(shí)還應(yīng)該用IPO圖或其他適當(dāng)?shù)墓ぞ吆?jiǎn)要描述細(xì)化后每個(gè)處理的算法,5.1總體設(shè)計(jì)的過(guò)程,11,5.1.5設(shè)計(jì)軟件結(jié)構(gòu),通常程序中的一個(gè)模塊完成一個(gè)適當(dāng)?shù)淖庸δ?。?yīng)該把模塊組織成良好的層次系統(tǒng),頂層模塊調(diào)用它的下層模塊以實(shí)現(xiàn)程序的完整功能,每個(gè)下層模塊再調(diào)用更下層的模塊,從而完成程序的一個(gè)子功能,最下層的模塊完成最具體的功能。軟件結(jié)構(gòu)(即由模塊組成的層次系統(tǒng))可以用層次圖或結(jié)構(gòu)圖來(lái)描繪。(5.4節(jié)),5.1總體設(shè)計(jì)的過(guò)程,12,5.1.6數(shù)據(jù)庫(kù)設(shè)計(jì),如需使用數(shù)據(jù)庫(kù),分析員應(yīng)該在需求分析階段對(duì)系統(tǒng)數(shù)據(jù)要求所做的分析的基礎(chǔ)上進(jìn)一步設(shè)計(jì)數(shù)據(jù)庫(kù)。包括下述四個(gè)步驟:模式設(shè)計(jì):模式設(shè)計(jì)的目的是確定物理數(shù)據(jù)庫(kù)結(jié)構(gòu)。子模式設(shè)計(jì):子模式是用戶(hù)使用的數(shù)據(jù)視圖。完整性和安全性設(shè)計(jì)。優(yōu)化:主要目的是改進(jìn)模式和子模式以?xún)?yōu)化數(shù)據(jù)的存取。,5.1總體設(shè)計(jì)的過(guò)程,13,5.1.7制定測(cè)試計(jì)劃,在軟件開(kāi)發(fā)的早期階段考慮測(cè)試問(wèn)題,能促使軟件設(shè)計(jì)人員在設(shè)計(jì)時(shí)注意提高軟件的可測(cè)試性。,5.1總體設(shè)計(jì)的過(guò)程,14,5.1.8書(shū)寫(xiě)文檔,系統(tǒng)說(shuō)明用系統(tǒng)流程圖描繪的系統(tǒng)構(gòu)成方案;組成系統(tǒng)的物理元素清單;成本效益分析;對(duì)最佳方案的概括描述;精化的數(shù)據(jù)流圖;用層次圖或結(jié)構(gòu)圖描繪的軟件結(jié)構(gòu);用IPO圖或其他工具(例如,PDL語(yǔ)言)簡(jiǎn)要描述的各個(gè)模塊的算法;模塊間的接口關(guān)系;需求、功能和模塊三者之間的交叉參照關(guān)系等等。用戶(hù)手冊(cè)修改更正在需求分析階段產(chǎn)生的初步的用戶(hù)手冊(cè)。測(cè)試計(jì)劃包括測(cè)試策略,測(cè)試方案,預(yù)期的測(cè)試結(jié)果,測(cè)試進(jìn)度計(jì)劃等等。詳細(xì)的實(shí)現(xiàn)計(jì)劃數(shù)據(jù)庫(kù)設(shè)計(jì)結(jié)果,5.1總體設(shè)計(jì)的過(guò)程,15,5.1.9審查和復(fù)審,最后應(yīng)該對(duì)總體設(shè)計(jì)的結(jié)果進(jìn)行嚴(yán)格的技術(shù)審查,在技術(shù)審查通過(guò)之后再由使用部門(mén)的負(fù)責(zé)人從管理角度進(jìn)行復(fù)審。,5.1總體設(shè)計(jì)的過(guò)程,16,5.2軟件設(shè)計(jì)原理*,在軟件設(shè)計(jì)過(guò)程中應(yīng)該遵循的基本原理和相關(guān)概念模塊化抽象逐步求精信息隱蔽和局部化模塊獨(dú)立,17,5.2.1模塊化,模塊是數(shù)據(jù)說(shuō)明、可執(zhí)行語(yǔ)句等程序?qū)ο蟮募希菃为?dú)命名的而且可通過(guò)名字來(lái)訪問(wèn),例如,過(guò)程、函數(shù)、子程序、宏等等都可作為模塊。模塊化就是把程序劃分成若干個(gè)模塊,每個(gè)模塊完成一個(gè)子功能,把這些模塊集中起來(lái)組成一個(gè)整體,可以完成指定的功能,滿(mǎn)足問(wèn)題的要求。模塊化的根據(jù)不等式C(P1P2)C(P1)C(P2)E(P1P2)E(P1)E(P2)“各個(gè)擊破”的結(jié)論把復(fù)雜的問(wèn)題分解成許多容易解決的小問(wèn)題,原來(lái)的問(wèn)題也就容易解決了,5.2軟件設(shè)計(jì)原理*,18,最適當(dāng)?shù)哪K數(shù)目,5.2軟件設(shè)計(jì)原理*,19,模塊化的優(yōu)點(diǎn),可以使軟件結(jié)構(gòu)清晰,不僅容易設(shè)計(jì)也容易閱讀和理解;可以使軟件容易測(cè)試和調(diào)試,因而有助于提高軟件的可靠性;能夠提高軟件的可修改性;有助于軟件開(kāi)發(fā)工程的組織管理。,5.2軟件設(shè)計(jì)原理*,20,5.2.2抽象,抽象就是抽出事物的本質(zhì)特性而暫時(shí)不考慮它們的細(xì)節(jié)。處理復(fù)雜系統(tǒng)的唯一有效的方法是用層次的方式構(gòu)造和分析它。一個(gè)復(fù)雜的動(dòng)態(tài)系統(tǒng)首先可以用一些高級(jí)的抽象概念構(gòu)造和理解,這些高級(jí)概念又可以用一些較低級(jí)的概念構(gòu)造和理解,如此進(jìn)行下去,直至最低層次的具體元素。,5.2軟件設(shè)計(jì)原理*,上下級(jí)關(guān)系的層次結(jié)構(gòu)順序相鄰關(guān)系的層次結(jié)構(gòu),21,5.2.3逐步求精,逐步求精是許多軟件工程技術(shù)(如規(guī)格說(shuō)明技術(shù)、設(shè)計(jì)和實(shí)現(xiàn)技術(shù))的基礎(chǔ)為了能集中精力解決主要問(wèn)題而盡量延遲對(duì)問(wèn)題細(xì)節(jié)的考慮抽象和求精是一對(duì)互補(bǔ)的概念抽象使得設(shè)計(jì)者能夠說(shuō)明過(guò)程和數(shù)據(jù)、同時(shí)卻忽略底層細(xì)節(jié)可以把抽象看成一種通過(guò)忽略多余的細(xì)節(jié)同時(shí)強(qiáng)調(diào)有關(guān)的細(xì)節(jié),而實(shí)現(xiàn)逐步求精的方法,5.2軟件設(shè)計(jì)原理*,22,5.2.4信息隱蔽和局部化,信息隱蔽原理:應(yīng)該這樣設(shè)計(jì)和確定模塊,使得一個(gè)模塊內(nèi)包含的信息(過(guò)程和數(shù)據(jù))對(duì)于不需要這些信息的模塊來(lái)說(shuō),是不能訪問(wèn)的。“隱蔽”意味著模塊彼此間僅僅交換那些為了完成系統(tǒng)功能而必須交換的信息。“局部化”是指把一些關(guān)系密切的軟件元素物理地放得彼此靠近。局部化有助于實(shí)現(xiàn)信息隱蔽。信息隱蔽和局部化的優(yōu)點(diǎn)測(cè)試期間和軟件維護(hù)期間需要修改軟件,使用信息隱蔽原理作為模塊化系統(tǒng)設(shè)計(jì)的標(biāo)準(zhǔn)就會(huì)帶來(lái)極大好處。因?yàn)榻^大多數(shù)數(shù)據(jù)和過(guò)程對(duì)于軟件的其他部分而言是隱蔽的(也就是“看”不見(jiàn)的),在修改期間由于疏忽而引入的錯(cuò)誤就很少可能傳播到軟件的其他部分。,5.2軟件設(shè)計(jì)原理*,23,5.2.5模塊獨(dú)立,模塊獨(dú)立的概念是模塊化、抽象、信息隱蔽和局部化概念的直接結(jié)果。為什么模塊的獨(dú)立性很重要呢?有效的模塊化(即具有獨(dú)立的模塊)的軟件比較容易開(kāi)發(fā)出來(lái)。獨(dú)立的模塊比較容易測(cè)試和維護(hù)。模塊的獨(dú)立程度可以由兩個(gè)定性標(biāo)準(zhǔn)度量,這兩個(gè)標(biāo)準(zhǔn)分別稱(chēng)為耦合和內(nèi)聚。,5.2軟件設(shè)計(jì)原理*,24,耦合性(Coupling),耦合性是對(duì)一個(gè)軟件結(jié)構(gòu)中不同模塊之間互連程度的度量。模塊間的耦合程度強(qiáng)烈影響系統(tǒng)的可理解性、可測(cè)試性、可靠性和可維護(hù)性。,5.2軟件設(shè)計(jì)原理*,25,(1)非直接耦合,如果兩個(gè)模塊之間沒(méi)有直接關(guān)系,它們之間的聯(lián)系完全是通過(guò)主模塊的控制和調(diào)用來(lái)實(shí)現(xiàn)的,這就是非直接耦合。這種耦合的模塊獨(dú)立性最強(qiáng)。,5.2軟件設(shè)計(jì)原理*,26,(2)數(shù)據(jù)耦合,如果一個(gè)模塊訪問(wèn)另一個(gè)模塊時(shí),彼此之間是通過(guò)數(shù)據(jù)參數(shù)(不是控制參數(shù)、公共數(shù)據(jù)結(jié)構(gòu)或外部變量)來(lái)交換輸入、輸出信息的,則稱(chēng)這種耦合為數(shù)據(jù)耦合。按數(shù)據(jù)耦合開(kāi)發(fā)的程序界面簡(jiǎn)單、安全可靠。數(shù)據(jù)耦合是松散的耦合,模塊之間的獨(dú)立性比較強(qiáng)。在軟件程序結(jié)構(gòu)中至少必須有這類(lèi)耦合。,5.2軟件設(shè)計(jì)原理*,27,(3)標(biāo)記耦合,如果一組模塊通過(guò)參數(shù)表傳遞記錄信息,就是標(biāo)記耦合。事實(shí)上,這組模塊共享了這個(gè)記錄,它是某一數(shù)據(jù)結(jié)構(gòu)的子結(jié)構(gòu),而不是簡(jiǎn)單變量。這要求這些模塊都必須清楚該記錄的結(jié)構(gòu),并按結(jié)構(gòu)要求對(duì)此記錄進(jìn)行操作。如果采取“信息隱蔽”的方法,把在數(shù)據(jù)結(jié)構(gòu)上的操作全部集中在一個(gè)模塊中,就可以消除這種耦合。,5.2軟件設(shè)計(jì)原理*,28,(4)控制耦合,如果一個(gè)模塊通過(guò)傳送開(kāi)關(guān)、標(biāo)志、名字等控制信息,明顯地控制選擇另一模塊的功能,就是控制耦合。這種耦合的實(shí)質(zhì)是在單一接口上選擇多功能模塊中的某項(xiàng)功能。對(duì)所控制模塊的任何修改,都會(huì)影響控制模塊。另外,控制耦合也意味著控制模塊必須知道所控制模塊內(nèi)部的一些邏輯關(guān)系,這些都會(huì)降低模塊的獨(dú)立性。,5.2軟件設(shè)計(jì)原理*,29,(5)外部耦合,一組模塊都訪問(wèn)同一全局簡(jiǎn)單變量而不是同一全局?jǐn)?shù)據(jù)結(jié)構(gòu),而且不是通過(guò)參數(shù)表傳遞該全局變量的信息,則稱(chēng)之為外部耦合。外部耦合引起的問(wèn)題類(lèi)似于公共耦合,區(qū)別在于在外部耦合中不存在依賴(lài)于一個(gè)數(shù)據(jù)結(jié)構(gòu)內(nèi)部各項(xiàng)的物理安排。,5.2軟件設(shè)計(jì)原理*,30,(6)公共耦合,若一組模塊都訪問(wèn)同一個(gè)公共數(shù)據(jù)環(huán)境,則它們之間的耦合就稱(chēng)為公共耦合。公共的數(shù)據(jù)環(huán)境可以是全局?jǐn)?shù)據(jù)結(jié)構(gòu)、共享的通信區(qū)、內(nèi)存的公共覆蓋區(qū)等。這種耦合會(huì)引起下列問(wèn)題:所有公共耦合模塊都與某一個(gè)公共數(shù)據(jù)環(huán)境內(nèi)部各項(xiàng)的物理安排有關(guān),若修改某個(gè)數(shù)據(jù)的大小,將會(huì)影響到所有的模塊。無(wú)法控制各個(gè)模塊對(duì)公共數(shù)據(jù)的存取,嚴(yán)重影響軟件模塊的可靠性和適應(yīng)性。公共數(shù)據(jù)名的使用,明顯降低了程序的可讀性。,5.2軟件設(shè)計(jì)原理*,31,(7)內(nèi)容耦合,如果出現(xiàn)以下情形,兩個(gè)模塊之間就發(fā)生了內(nèi)容耦合:一個(gè)模塊訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù)。一個(gè)模塊不通過(guò)正常入口轉(zhuǎn)到另一個(gè)模塊的內(nèi)部。兩個(gè)模塊有一部分代碼重疊(只可能出現(xiàn)在匯編程序中)。一個(gè)模塊有多個(gè)入口(這意味著一個(gè)模塊有幾種功能)。模塊化的原則模塊化設(shè)計(jì)的最終目標(biāo),是希望建立模塊間耦合盡可能松散的系統(tǒng)。在這樣一個(gè)系統(tǒng)中,我們?cè)O(shè)計(jì)、編碼、測(cè)試和維護(hù)其中任何一個(gè)模塊,就不需要對(duì)系統(tǒng)中其他模塊有很多的了解。此外,由于模塊間聯(lián)系簡(jiǎn)單,發(fā)生在某一處的錯(cuò)誤傳播到整個(gè)系統(tǒng)的可能性很小。,5.2軟件設(shè)計(jì)原理*,32,內(nèi)聚性(Cohesion),內(nèi)聚性標(biāo)志一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度。模塊內(nèi)的高內(nèi)聚往往意味著模塊間的松耦合。內(nèi)聚和耦合都是模塊化設(shè)計(jì)的有力工具,但是實(shí)踐表明內(nèi)聚更重要,應(yīng)該把更多注意力集中到提高模塊的內(nèi)聚程度上。,5.2軟件設(shè)計(jì)原理*,33,(1)巧合內(nèi)聚,巧合內(nèi)聚又稱(chēng)為偶然內(nèi)聚。當(dāng)模塊內(nèi)各部分之間沒(méi)有聯(lián)系,或者即使有聯(lián)系,這種聯(lián)系也很松散,則稱(chēng)這種模塊為巧合內(nèi)聚模塊,它是內(nèi)聚程度最低的模塊。這種模塊的缺點(diǎn)首先是不易修改和維護(hù)。其次是這種模塊的內(nèi)容不易理解,很難描述它所完成的功能,增加了程序的模糊性。,5.2軟件設(shè)計(jì)原理*,34,(2)邏輯內(nèi)聚,這種模塊把幾種相關(guān)的功能組合在一起,每次調(diào)用時(shí),由傳送給模塊的判定參數(shù)來(lái)確定該模塊應(yīng)執(zhí)行哪一種功能。這種模塊是單入口多功能模塊。類(lèi)似的有錯(cuò)誤處理模塊。它接收出錯(cuò)信號(hào),對(duì)不同類(lèi)型的錯(cuò)誤打印出不同的出錯(cuò)信息。邏輯內(nèi)聚模塊比巧合內(nèi)聚模塊的內(nèi)聚程度要高。邏輯內(nèi)聚的缺點(diǎn)它所執(zhí)行的不是一種功能,而是執(zhí)行若干功能中的一種,因此它不易修改。另外,當(dāng)調(diào)用時(shí)需要進(jìn)行控制參數(shù)的傳遞,這就增加了模塊間的耦合程度。而將未用的部分也調(diào)入內(nèi)存,這就降低了系統(tǒng)的效率。,5.2軟件設(shè)計(jì)原理*,35,(3)時(shí)間內(nèi)聚,時(shí)間內(nèi)聚又稱(chēng)為經(jīng)典內(nèi)聚。這種模塊大多為多功能模塊,但模塊的各個(gè)功能的執(zhí)行與時(shí)間有關(guān),通常要求所有功能必須在同一時(shí)間段內(nèi)執(zhí)行。例如初始化模塊和終止模塊。初始化模塊要為所有變量賦初值,對(duì)所有介質(zhì)上的文件置初態(tài),初始化寄存器和棧等,因此要求在程序開(kāi)始執(zhí)行的最初一段時(shí)間內(nèi),模塊中所有功能全部執(zhí)行一遍。,5.2軟件設(shè)計(jì)原理*,36,(4)過(guò)程內(nèi)聚,如果一個(gè)模塊內(nèi)的處理是相關(guān)的,而且必須以特定次序執(zhí)行,則稱(chēng)這個(gè)模塊為過(guò)程內(nèi)聚模塊。使用流程圖做為工具設(shè)計(jì)程序的時(shí)候,常常通過(guò)流程圖來(lái)確定模塊劃分。把流程圖中的某一部分劃出組成模塊,就得到過(guò)程內(nèi)聚模塊。例如,我們把流程圖中的循環(huán)部分、判定部分、計(jì)算部分分成三個(gè)模塊,這三個(gè)模塊都是過(guò)程內(nèi)聚模塊。,5.2軟件設(shè)計(jì)原理*,37,(5)通信內(nèi)聚,如果一個(gè)模塊內(nèi)各功能部分都使用了相同的輸入數(shù)據(jù),或產(chǎn)生了相同的輸出數(shù)據(jù),則稱(chēng)之為通信內(nèi)聚模塊。通信內(nèi)聚模塊是通過(guò)數(shù)據(jù)流圖來(lái)定義的。,5.2軟件設(shè)計(jì)原理*,38,(6)信息內(nèi)聚,這種模塊完成多個(gè)功能,各個(gè)功能都在同一數(shù)據(jù)結(jié)構(gòu)上操作,每一項(xiàng)功能有一個(gè)唯一的入口點(diǎn)。,5.2軟件設(shè)計(jì)原理*,39,(8)功能內(nèi)聚,一個(gè)模塊中各個(gè)部分都是完成某一具體功能必不可少的組成部分,或者說(shuō)該模塊中所有部分都是為了完成一項(xiàng)具體功能而協(xié)同工作,緊密聯(lián)系,不可分割的。則稱(chēng)該模塊為功能內(nèi)聚模塊。功能內(nèi)聚模塊的優(yōu)點(diǎn)是它們?nèi)菀仔薷暮途S護(hù),因?yàn)樗鼈兊墓δ苁敲鞔_的,模塊間的耦合是簡(jiǎn)單的。,5.2軟件設(shè)計(jì)原理*,(7)順序內(nèi)聚如果一個(gè)模塊內(nèi)的處理元素和同一個(gè)功能密切相關(guān),而且這些處理必須順序執(zhí)行(通常一個(gè)處理元素的輸出數(shù)據(jù)作為下一個(gè)處理元素的輸入數(shù)據(jù)),40,5.3啟發(fā)式規(guī)則*,啟發(fā)式規(guī)則多數(shù)是經(jīng)驗(yàn)規(guī)律,對(duì)改進(jìn)設(shè)計(jì),提高軟件質(zhì)量,往往有重要的參考價(jià)值;但是,它們既不是設(shè)計(jì)的目標(biāo)也不是設(shè)計(jì)時(shí)普遍遵循的原則。,41,1改進(jìn)軟件結(jié)構(gòu)提高模塊獨(dú)立性,設(shè)計(jì)出軟件的初步結(jié)構(gòu)以后,應(yīng)該審查分析這個(gè)結(jié)構(gòu),通過(guò)模塊分解或合并,力求降低耦合提高內(nèi)聚。例如,多個(gè)模塊公有的一個(gè)子功能可以獨(dú)立成一個(gè)模塊,由這些模塊調(diào)用;有時(shí)可以通過(guò)分解或合并模塊以減少控制信息的傳遞及對(duì)全局?jǐn)?shù)據(jù)的引用,并且降低接口的復(fù)雜程度。,5.3啟發(fā)式規(guī)則*,42,2模塊規(guī)模應(yīng)該適中,經(jīng)驗(yàn)表明,一個(gè)模塊的規(guī)模不應(yīng)過(guò)大。過(guò)大的模塊往往是由于分解不充分,但是分解后不應(yīng)該降低模塊獨(dú)立性。過(guò)小的模塊開(kāi)銷(xiāo)大于有效操作,而且模塊數(shù)目過(guò)多將使系統(tǒng)接口復(fù)雜。因此過(guò)小的模塊有時(shí)不值得單獨(dú)存在,特別是只有一個(gè)模塊調(diào)用它時(shí),通??梢园阉喜⒌缴霞?jí)模塊中去而不必單獨(dú)存在。,5.3啟發(fā)式規(guī)則*,43,3深度、寬度、扇入和扇出都應(yīng)適當(dāng),深度表示軟件結(jié)構(gòu)中控制的層數(shù),它往往能粗略地標(biāo)志一個(gè)系統(tǒng)的大小和復(fù)雜程度。如果層數(shù)過(guò)多則應(yīng)該考慮是否有許多管理模塊過(guò)分簡(jiǎn)單了,能否適當(dāng)合并。寬度是軟件結(jié)構(gòu)內(nèi)同一個(gè)層次上的模塊總數(shù)的最大值。一般說(shuō)來(lái),寬度越大系統(tǒng)越復(fù)雜。對(duì)寬度影響最大的因素是模塊的扇出。扇出是一個(gè)模塊直接控制(調(diào)用)的模塊數(shù)目。扇出過(guò)大意味著模塊過(guò)分復(fù)雜,需要控制和協(xié)調(diào)過(guò)多的下級(jí)模塊;扇出過(guò)小也不好。一個(gè)設(shè)計(jì)得好的典型系統(tǒng)的平均扇出通常是3或4。扇出太大一般是因?yàn)槿狈χ虚g層次,應(yīng)該適當(dāng)增加中間層次的控制模塊。扇出太小時(shí)可以把下級(jí)模塊進(jìn)一步分解成若干個(gè)子功能模塊,或者合并到它的上級(jí)模塊中去。,5.3啟發(fā)式規(guī)則*,44,3深度、寬度、扇入和扇出都應(yīng)適當(dāng),一個(gè)模塊的扇入表明有多少個(gè)上級(jí)模塊直接調(diào)用它。扇入越大則共享該模塊的上級(jí)模塊數(shù)目越多,這是有好處的。但是,不能違背模塊獨(dú)立原理單純追求高扇入。觀察大量軟件系統(tǒng)后發(fā)現(xiàn),設(shè)計(jì)得很好的軟件結(jié)構(gòu)通常頂層扇出比較高,中層扇出較少,底層扇入到公共的實(shí)用模塊中去(底層模塊有高扇入)。,5.3啟發(fā)式規(guī)則*,45,4模塊的作用域應(yīng)該在控制域之內(nèi),模塊的作用域定義為受該模塊內(nèi)一個(gè)判定影響的所有模塊的集合。模塊的控制域是這個(gè)模塊本身以及所有直接或間接從屬于它的模塊的集合。,5.3啟發(fā)式規(guī)則*,46,修改軟件結(jié)構(gòu)使作用域是控制域的子集的方法,一個(gè)方法是把做判定的點(diǎn)往上移,例如,把判定從模塊A中移到模塊M中。另一個(gè)方法是把那些在作用域內(nèi)但不在控制域內(nèi)的模塊移到控制域內(nèi),例如,把模塊G移到模塊A的下面,成為它的直屬下級(jí)模塊。,5.3啟發(fā)式規(guī)則*,47,5力爭(zhēng)降低模塊接口的復(fù)雜程度,模塊接口復(fù)雜是軟件發(fā)生錯(cuò)誤的一個(gè)主要原因。應(yīng)該仔細(xì)設(shè)計(jì)模塊接口,使得信息傳遞簡(jiǎn)單并且和模塊的功能一致。接口復(fù)雜或不一致(即看起來(lái)傳遞的數(shù)據(jù)之間沒(méi)有聯(lián)系),是緊耦合或低內(nèi)聚的征兆,應(yīng)該重新分析這個(gè)模塊的獨(dú)立性。例如,求一元二次方程的根的模塊QUADROOT(TBL,X),其中用數(shù)組TBL傳送方程的系數(shù),用數(shù)組X回送求得的根。這種傳遞信息的方法不利于對(duì)這個(gè)模塊的理解,不僅在維護(hù)期間容易引起混淆,在開(kāi)發(fā)期間也可能發(fā)生錯(cuò)誤。下面這種接口可能是比較簡(jiǎn)單的:QUADROOT(A,B,C,ROOT1,ROOT2)其中A、B、C是方程的系數(shù),ROOT1和ROOT2是算出的兩個(gè)根。,5.3啟發(fā)式規(guī)則*,48,6設(shè)計(jì)單入口單出口的模塊,不要出現(xiàn)內(nèi)容耦合。從頂部進(jìn)入模塊,從底部退出模塊。易理解,易維護(hù)。,5.3啟發(fā)式規(guī)則*,49,7模塊功能應(yīng)該可以預(yù)測(cè),如果一個(gè)模塊可以當(dāng)做一個(gè)黑盒子,也就是說(shuō),只要輸入的數(shù)據(jù)相同就產(chǎn)生同樣的輸出,這個(gè)模塊的功能就是可以預(yù)測(cè)的。帶有內(nèi)部“存儲(chǔ)器”的模塊的功能可能是不可預(yù)測(cè)的,因?yàn)樗妮敵隹赡苋Q于內(nèi)部存儲(chǔ)器(例如某個(gè)標(biāo)記)的狀態(tài)。由于內(nèi)部存儲(chǔ)器對(duì)于上級(jí)模塊而言是不可見(jiàn)的,所以這樣的模塊既不易理解又難于測(cè)試和維護(hù)。,5.3啟發(fā)式規(guī)則*,50,5.4圖形工具,介紹在總體設(shè)計(jì)階段可能會(huì)使用的幾種圖形工具。,*5.1.5,51,5.4.1層次圖,層次圖用來(lái)描繪軟件的層次結(jié)構(gòu)。雖然層次圖的形式和第三章中介紹的描述數(shù)據(jù)結(jié)構(gòu)的層次方框圖相同,但是表現(xiàn)的內(nèi)容卻完全不同。層次圖中的一個(gè)方框代表一個(gè)模塊,方框間的連線表示調(diào)用關(guān)系。層次圖很適合在自頂向下設(shè)計(jì)軟件的過(guò)程中使用。,5.4圖形工具,52,5.4.1HIPO圖,HIPO圖是美國(guó)IBM公司發(fā)明的“層次圖加輸入處理輸出圖”的英文縮寫(xiě)。為了能使HIPO圖具有可追蹤性,在H圖(層次圖)里除了最頂層的方框之外,每個(gè)方框都加了編號(hào)。,5.4圖形工具,53,5.4.1HIPO圖,和H圖中每個(gè)方框相對(duì)應(yīng),應(yīng)該有一張IPO圖描繪這個(gè)方框代表的模塊的處理過(guò)程。(P59)HIPO圖中的每張IPO圖內(nèi)都應(yīng)該明顯地標(biāo)出它所描繪的模塊在H圖中的編號(hào),以便追蹤了解這個(gè)模塊在軟件結(jié)構(gòu)中的位置。,5.4圖形工具,5.4.2結(jié)構(gòu)圖,Yourdon提出的結(jié)構(gòu)圖是進(jìn)行軟件結(jié)構(gòu)設(shè)計(jì)的另一個(gè)有力工具。方框代表一個(gè)模塊,框內(nèi)注明模塊的名字或主要功能;方框之間的箭頭(或直線)表示模塊的調(diào)用關(guān)系。帶注釋的箭頭表示模塊調(diào)用過(guò)程中來(lái)回傳遞的信息;尾部是空心圓表示傳遞的是數(shù)據(jù),實(shí)心圓表示傳遞的是控制信息。,5.4圖形工具,55,5.4.2結(jié)構(gòu)圖,層次圖和結(jié)構(gòu)圖并不嚴(yán)格表示模塊的調(diào)用次序。此外,層次圖和結(jié)構(gòu)圖并不指明什么時(shí)候調(diào)用下層模塊。事實(shí)上,層次圖和結(jié)構(gòu)圖只表明一個(gè)模塊調(diào)用那些模塊,至于模塊內(nèi)還有沒(méi)有其它成分則完全沒(méi)有表示。一些附加的符號(hào),可以表示模塊的選擇調(diào)用或循環(huán)調(diào)用。,5.4圖形工具,56,通常用層次圖作為描述軟件結(jié)構(gòu)的文檔。結(jié)構(gòu)圖作為文檔并不很合適,因?yàn)閳D上包含的信息太多有時(shí)反而降低了清晰程度。但是,利用IPO圖或數(shù)據(jù)字典中的信息得到模塊調(diào)用時(shí)的信息,從由層次圖導(dǎo)出結(jié)構(gòu)圖的過(guò)程,可以作為檢查設(shè)計(jì)正確性和評(píng)價(jià)模塊獨(dú)立性的好方法。,5.4圖形工具,57,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,通常所說(shuō)的結(jié)構(gòu)化設(shè)計(jì)方法(簡(jiǎn)稱(chēng)SD方法),也就是基于數(shù)據(jù)流的設(shè)計(jì)方法。面向數(shù)據(jù)流的設(shè)計(jì)方法的目標(biāo)是給出設(shè)計(jì)軟件結(jié)構(gòu)的一個(gè)系統(tǒng)化的途徑。,58,5.5.1概念,面向數(shù)據(jù)流的設(shè)計(jì)方法把信息流映射成軟件結(jié)構(gòu),信息流的類(lèi)型決定了映射的方法。信息流有下述兩種類(lèi)型:變換流事務(wù)流,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,59,變換流,信息沿輸入通路進(jìn)入系統(tǒng),同時(shí)由外部形式變換成內(nèi)部形式,進(jìn)入系統(tǒng)的信息通過(guò)變換中心,經(jīng)加工處理后再沿輸出通路變換成外部形式離開(kāi)軟件系統(tǒng)。當(dāng)數(shù)據(jù)流圖具有這些特性時(shí),這種信息流就叫做變換流。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,外部表示,內(nèi)部表示,信息,變換流,信息流,時(shí)間,60,事務(wù)流,基本系統(tǒng)模型意味著變換流,因此,原則上所有信息流都可以歸結(jié)為變換流。但是,當(dāng)數(shù)據(jù)流圖的數(shù)據(jù)流是“以事務(wù)為中心的”,也就是說(shuō),數(shù)據(jù)沿輸入通路到達(dá)一個(gè)處理T,這個(gè)處理根據(jù)輸入數(shù)據(jù)的類(lèi)型在若干個(gè)動(dòng)作序列中選出一個(gè)來(lái)執(zhí)行。這類(lèi)數(shù)據(jù)流應(yīng)該劃為一類(lèi)特殊的數(shù)據(jù)流,稱(chēng)為事務(wù)流。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,圖中的處理T稱(chēng)為事務(wù)中心,它完成下述任務(wù):接收輸入數(shù)據(jù)(輸入數(shù)據(jù)又稱(chēng)為事務(wù));分析每個(gè)事務(wù)以確定它的類(lèi)型;根據(jù)事務(wù)類(lèi)型選取一條活動(dòng)通路。,61,設(shè)計(jì)過(guò)程,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,62,5.5.2變換分析,變換分析是一系列設(shè)計(jì)步驟的總稱(chēng),經(jīng)過(guò)這些步驟把具有變換流特點(diǎn)的數(shù)據(jù)流圖按預(yù)先確定的模式映射成軟件結(jié)構(gòu)例子通過(guò)模-數(shù)轉(zhuǎn)換實(shí)現(xiàn)傳感器和微處理機(jī)接口。在發(fā)光二極管面板上顯示數(shù)據(jù)。指示行駛的速度(每小時(shí)英里數(shù)mph),行駛的總里程,每加侖油可以行駛的英里數(shù)(mpg)。指示汽車(chē)是在加速還是在減速。超速警告:如果車(chē)速超過(guò)55英里/小時(shí),則發(fā)出超速警告鈴聲。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,63,設(shè)計(jì)步驟,復(fù)查基本系統(tǒng)模型。確保系統(tǒng)的輸入數(shù)據(jù)和輸出數(shù)據(jù)符合實(shí)際。復(fù)查并精化數(shù)據(jù)流圖。確保數(shù)據(jù)流圖給出了目標(biāo)系統(tǒng)正確的邏輯模型,而且應(yīng)該使數(shù)據(jù)流圖中每個(gè)處理都代表一個(gè)規(guī)模適中相對(duì)獨(dú)立的子功能。確定數(shù)據(jù)流圖具有變換特性還是事務(wù)特性。從圖中可以看出,數(shù)據(jù)沿兩條輸入通路進(jìn)入系統(tǒng),然后沿五條通路離開(kāi)。沒(méi)有明顯的事務(wù)中心,可以認(rèn)為這個(gè)信息流具有變換流的特征。確定輸入流和輸出流邊界,從而孤立出變換中心。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,數(shù)據(jù)流圖,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,具有邊界的數(shù)據(jù)流圖,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,66,設(shè)計(jì)步驟,完成“第一級(jí)分解”。軟件結(jié)構(gòu)代表對(duì)控制的自頂向下的分配,所謂分解就是分配控制的過(guò)程。應(yīng)該在能夠完成控制并且保持好的耦合和內(nèi)聚的前提下,盡量使第一級(jí)控制中的模塊數(shù)目最少。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,第一級(jí)分解的方法,67,第一級(jí)分解的方法,位于軟件結(jié)構(gòu)最頂層的控制模塊Cm協(xié)調(diào)下述從屬的控制功能:輸入信息處理控制模塊Ca,協(xié)調(diào)對(duì)所有輸入數(shù)據(jù)的接收;變換中心控制模塊Ct,管理對(duì)內(nèi)部形式的數(shù)據(jù)的所有操作;輸出信息處理控制模塊Ce,協(xié)調(diào)輸出信息的產(chǎn)生過(guò)程。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,68,第一級(jí)分解得出的軟件結(jié)構(gòu),每個(gè)控制模塊的名字表明了為它所控制的那些模塊的功能。,5.5面向數(shù)據(jù)流的設(shè)計(jì)方法,69,設(shè)計(jì)步驟,完成“第二級(jí)分解”。所謂第二級(jí)分解就是把數(shù)據(jù)流圖中的每個(gè)處理映射成軟件結(jié)構(gòu)中一個(gè)適當(dāng)?shù)哪K。第二級(jí)分解的方法從變換中心的邊界開(kāi)始沿著輸入通路向外移動(dòng),把輸入通路中每個(gè)處理映射
溫馨提示
- 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. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 彈弓指 的護(hù)理及運(yùn)動(dòng)
- 2025至2030巴基斯坦基礎(chǔ)建設(shè)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 商業(yè)綜合體的安全管理及風(fēng)險(xiǎn)控制策略研究報(bào)告
- 中藥與腸道微生態(tài)的關(guān)聯(lián)研究
- 2025至2030維生素口嚼片行業(yè)項(xiàng)目調(diào)研及市場(chǎng)前景預(yù)測(cè)評(píng)估報(bào)告
- 2025至2030中國(guó)自由飛行服行業(yè)市場(chǎng)占有率及投資前景評(píng)估規(guī)劃報(bào)告
- 2025至2030中國(guó)自動(dòng)裝配機(jī)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 2025至2030中國(guó)自主無(wú)人機(jī)無(wú)線充電和基礎(chǔ)設(shè)施行業(yè)市場(chǎng)占有率及投資前景評(píng)估規(guī)劃報(bào)告
- 2025至2030中國(guó)腕式潛水電腦行業(yè)發(fā)展趨勢(shì)分析與未來(lái)投資戰(zhàn)略咨詢(xún)研究報(bào)告
- 2025至2030中國(guó)能源行業(yè)市場(chǎng)發(fā)展分析及投資前景與投資策略報(bào)告
- 生物膜技術(shù)革新:MBBR與IFAS工藝中功能性生物膜掛膜馴化的深入探討
- 心肺復(fù)蘇課件
- 2025至2030全球及中國(guó)企業(yè)文件共享和同步(EFSS)行業(yè)產(chǎn)業(yè)運(yùn)行態(tài)勢(shì)及投資規(guī)劃深度研究報(bào)告
- 上海金山區(qū)屬?lài)?guó)有企業(yè)招聘筆試真題2024
- 金屬與石材幕墻工程技術(shù)規(guī)范-JGJ133-2013含條文說(shuō)
- 物業(yè)公司戰(zhàn)略合作協(xié)議范本
- 電網(wǎng)公司項(xiàng)目管理標(biāo)準(zhǔn)手冊(cè)
- 衛(wèi)生值日表格源碼文件可編輯可修改
- ASTM B344-20 電加熱元件用拉制或軋制鎳鉻及鎳鉻鐵合金標(biāo)準(zhǔn)規(guī)范
- 《石油化工企業(yè)儲(chǔ)運(yùn)罐區(qū)罐頂油氣連通安全技術(shù)要求》
- 人教版七年級(jí)數(shù)學(xué)下冊(cè)計(jì)算類(lèi)專(zhuān)項(xiàng)訓(xùn)練卷【含答案】
評(píng)論
0/150
提交評(píng)論