軟件工程概要設(shè)計(jì).ppt_第1頁(yè)
軟件工程概要設(shè)計(jì).ppt_第2頁(yè)
軟件工程概要設(shè)計(jì).ppt_第3頁(yè)
軟件工程概要設(shè)計(jì).ppt_第4頁(yè)
軟件工程概要設(shè)計(jì).ppt_第5頁(yè)
已閱讀5頁(yè),還剩51頁(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)介

第七講 概要設(shè)計(jì),了解軟件設(shè)計(jì)工程及其研究?jī)?nèi)容 理解概要設(shè)計(jì)的主要內(nèi)容 理解概要設(shè)計(jì)的過(guò)程 掌握概要設(shè)計(jì)主要原則 理解體系結(jié)構(gòu)設(shè)計(jì) 掌握模塊劃分特征 掌握層次圖,軟件生命周期,設(shè)計(jì)人員把分析的結(jié)果設(shè)計(jì)圖紙 程序員拿著設(shè)計(jì)圖紙編寫(xiě)代碼,需求規(guī)格說(shuō)明書(shū),概要設(shè)計(jì),設(shè)計(jì)圖紙-軟件結(jié)構(gòu)圖,模塊4設(shè)計(jì),詳細(xì)設(shè)計(jì),需求分析成果,軟件設(shè)計(jì)工程,設(shè)計(jì)工程就是把需求分析過(guò)程中確定下來(lái)的用戶需求定義書(shū)(What=做什么)變?yōu)槟軌蜻M(jìn)行實(shí)際操作的設(shè)計(jì)說(shuō)明書(shū)(How=怎樣做)的工程。 設(shè)計(jì)工程是一個(gè)將系統(tǒng)的需求規(guī)格轉(zhuǎn)換成軟件系統(tǒng)的說(shuō)明過(guò)程。 從多個(gè)可能的思路中找到最佳的解決方案。其任務(wù)包括構(gòu)建系統(tǒng)框架,設(shè)計(jì)系統(tǒng)功能,描述系統(tǒng)流程,建立系統(tǒng)的數(shù)據(jù)模型、接口模型及界面模型,形成系統(tǒng)的邏輯結(jié)構(gòu),告訴程序員軟件系統(tǒng)應(yīng)該“怎樣做”。,從工程管理角度來(lái)看,軟件設(shè)計(jì)分兩步完成:概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。 概要設(shè)計(jì) 將軟件需求轉(zhuǎn)化為軟件體系結(jié)構(gòu) 確定系統(tǒng)級(jí)接口 全局?jǐn)?shù)據(jù)結(jié)構(gòu)或數(shù)據(jù)庫(kù)模式。 詳細(xì)設(shè)計(jì) 確立每個(gè)模塊的實(shí)現(xiàn)算法和局部數(shù)據(jù)結(jié)構(gòu) 用適當(dāng)方法表示算法和數(shù)據(jù)結(jié)構(gòu)的細(xì)節(jié),軟件設(shè)計(jì)是后續(xù)開(kāi)發(fā)步驟及軟件維護(hù)工作的基礎(chǔ)。如果沒(méi)有設(shè)計(jì),只能建立一個(gè)不穩(wěn)定的系統(tǒng)結(jié)構(gòu)。,Windows NT的一位系統(tǒng)設(shè)計(jì)師擁有8輛法拉利跑車,讓Microsoft公司的一些程序員十分眼紅。但你只能羨慕而不能憤恨,因?yàn)椴⒉皇敲總€(gè)程序員都有本事成為復(fù)雜軟件系統(tǒng)的設(shè)計(jì)師。系統(tǒng)設(shè)計(jì)要比純粹的編程困難得多。即便你清楚客戶的需求,卻未必知道應(yīng)該設(shè)計(jì)什么樣的軟件系統(tǒng)既能掙最多的錢又能讓客戶滿意,研究?jī)?nèi)容,主要內(nèi)容:體系結(jié)構(gòu)設(shè)計(jì)、模塊設(shè)計(jì)、數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計(jì)、用戶界面設(shè)計(jì) 體系結(jié)構(gòu)就如同人的骨架。如果某個(gè)家伙的骨架是猴子,那么無(wú)論怎樣喂養(yǎng)和美容,這家伙始終都是猴子,不會(huì)成為人。 模塊就如同人的器官,具有特定的功能。人體中最出色的模塊設(shè)計(jì)之一是手,手只有幾種動(dòng)作,卻能做無(wú)限多的事情。,研究?jī)?nèi)容,數(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ō)話。 用戶界面就如同人的外表,最容易讓人一見(jiàn)鐘情或一見(jiàn)惡心。象人類追求心靈美和外表美那樣,軟件系統(tǒng)也追求(內(nèi)在的)功能強(qiáng)大和(外表的)界面友好。,研究?jī)?nèi)容,在進(jìn)行系統(tǒng)設(shè)計(jì)時(shí),我們要深情地關(guān)注軟件的質(zhì)量因素,如正確性與精確性、性能與效率、易用性、可理解性與簡(jiǎn)法性、可復(fù)用性與可擴(kuò)充性等等。 即使把系統(tǒng)設(shè)計(jì)做好了,也并不意味著就能產(chǎn)生好的軟件系統(tǒng)。在程序設(shè)計(jì)、測(cè)試、維護(hù)等環(huán)節(jié)還要做大量的工作,無(wú)論哪個(gè)環(huán)節(jié)出了差錯(cuò),都會(huì)把好事搞砸了。 據(jù)說(shuō)上帝把所有的女士都設(shè)計(jì)成天使,可是天使們?cè)谙路矔r(shí)有些雙腳先著地,有些臉先著地。上帝的這一疏忽讓很多女孩傷透了心。 我們?cè)陂_(kāi)發(fā)軟件時(shí),一定要吸取這個(gè)教訓(xùn)。,概要設(shè)計(jì),概要設(shè)計(jì)的主要任務(wù)是把需求分析得到的模型轉(zhuǎn)換為軟件結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。 設(shè)計(jì)軟件結(jié)構(gòu)的具體任務(wù)是:將一個(gè)復(fù)雜系統(tǒng)按功能進(jìn)行模塊劃分、建立模塊的層次結(jié)構(gòu)及調(diào)用關(guān)系、確定模塊間的接口及人機(jī)界面等。 數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)包括數(shù)據(jù)特征的描述、確定數(shù)據(jù)的結(jié)構(gòu)特性、以及數(shù)據(jù)庫(kù)的設(shè)計(jì)。 概要設(shè)計(jì)建立的是目標(biāo)系統(tǒng)的邏輯模型,與計(jì)算機(jī)無(wú)關(guān)。,1.主要內(nèi)容,1)軟件的總體結(jié)構(gòu)和模塊外部設(shè)計(jì)。 2)軟件處理流程設(shè)計(jì)。 3)確定軟件的功能并分配。 4)數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)。 5)網(wǎng)絡(luò)及接口設(shè)計(jì)。 6)運(yùn)行設(shè)計(jì)。 7)出錯(cuò)處理設(shè)計(jì)。 8)性能可靠性及安全保密設(shè)計(jì)。 9)維護(hù)設(shè)計(jì)。,2.設(shè)計(jì)過(guò)程,3.設(shè)計(jì)原則,總體設(shè)計(jì)的總原則是:由宏觀到微觀、逐步求精的原則,定性定量分析相結(jié)合、分解與協(xié)調(diào)相結(jié)合和模型化方法,并要兼顧系統(tǒng)的一般性、關(guān)聯(lián)性、整體性和層次性。 根據(jù)系統(tǒng)的總體結(jié)構(gòu)、功能、任務(wù)和目標(biāo)的要求分解系統(tǒng),使各子系統(tǒng)之間互相協(xié)調(diào)配合,實(shí)現(xiàn)系統(tǒng)的整體優(yōu)化。 具體原則如下:,3.1模塊化,把整個(gè)系統(tǒng)劃分成若干個(gè)模塊,每個(gè)模塊完成一個(gè)子功能,將多個(gè)模塊組織起來(lái)實(shí)現(xiàn)整個(gè)系統(tǒng)的功能。 模塊的三個(gè)屬性:功能-即指該模塊實(shí)現(xiàn)什么樣的功能。邏輯-即描述模塊內(nèi)部怎么做。狀態(tài)-是指該模塊使用時(shí)的環(huán)境和條件。 模塊化設(shè)計(jì)方法強(qiáng)調(diào)清楚地定義每個(gè)模塊的功能和它的輸入/輸出參數(shù),而模塊的實(shí)現(xiàn)細(xì)節(jié)隱藏在各自的模塊之中,與其它模塊之間的關(guān)系可以是調(diào)用關(guān)系,因此模塊化程序易于調(diào)試和修改。,隨著模塊規(guī)模的減小,模塊的開(kāi)發(fā)成本減少,但是模塊之間的接口變得復(fù)雜起來(lái),使得模塊的集成成本增加。,3.2抽象和逐步求精,抽象是指抓住事物的本質(zhì)特性而暫時(shí)不考慮其細(xì)節(jié)的方法。 逐步求精是指為了集中精力解決主要問(wèn)題而盡量推遲并逐步考慮細(xì)節(jié)問(wèn)題的方法,是人類解決復(fù)雜問(wèn)題時(shí)采用的一種基本策略,也是軟件工程技術(shù)的基礎(chǔ)。,3.3信息隱藏,每個(gè)模塊的實(shí)現(xiàn)細(xì)節(jié)對(duì)于其他模塊來(lái)說(shuō)是隱藏的。 模塊中所包含的信息是不允許其他不需要這些信息的模塊使用的。,3.4內(nèi)聚和耦合,在軟件設(shè)計(jì)中應(yīng)該保持模塊的獨(dú)立性原則。反映模塊獨(dú)立性的有兩個(gè)標(biāo)準(zhǔn):內(nèi)聚和耦合。 內(nèi)聚:標(biāo)志一個(gè)模塊內(nèi)各個(gè)元素彼此結(jié)合的緊密程度,是信息隱蔽和局部化概念的自然擴(kuò)展。設(shè)計(jì)時(shí)應(yīng)該力求做到高內(nèi)聚。 耦合:是對(duì)軟件結(jié)構(gòu)內(nèi)不同模塊之間互連程度的度量,是影響軟件復(fù)雜程度的一個(gè)重要因素。模塊間的耦合程度將影響系統(tǒng)的可理解性、可測(cè)試性、可靠性和可維護(hù)性。設(shè)計(jì)時(shí)應(yīng)該力求做到低耦合。,練習(xí)一:確定內(nèi)聚類型,內(nèi)聚類型,功能內(nèi)聚 :一個(gè)模塊中各個(gè)部分都是完成某一具體功能必不可少的組成部分,或者說(shuō)該模塊中所有部分都是為了完成一項(xiàng)具體功能而協(xié)同工作,緊密聯(lián)系,不可分割的。則稱該模塊為功能內(nèi)聚模塊。 順序內(nèi)聚如果一個(gè)模塊中的處理元素和同一個(gè)功能密切相關(guān),并且這些處理必須是順序執(zhí)行的,那么這個(gè)模塊具有順序內(nèi)聚。 通信內(nèi)聚:一個(gè)模塊內(nèi)各功能部分都針對(duì)相同輸入/輸出數(shù)據(jù)進(jìn)行處理。,過(guò)程內(nèi)聚:模塊執(zhí)行的若干動(dòng)作,相互關(guān)聯(lián)并且有順序關(guān)系。例如,從錄入界面讀取數(shù)據(jù),然后更新數(shù)據(jù)庫(kù)記錄。它仍然是將多個(gè)相關(guān)的功能放在一個(gè)模塊中實(shí)現(xiàn)。 時(shí)間內(nèi)聚:模塊的各個(gè)功能的執(zhí)行與時(shí)間有關(guān),通常要求所有功能必須在同一時(shí)間段內(nèi)執(zhí)行。例如初始化模塊和終止模塊。 邏輯內(nèi)聚:一個(gè)模塊完成的任務(wù)在邏輯上相同/相似 巧合內(nèi)聚又稱為偶然內(nèi)聚。當(dāng)模塊內(nèi)各部分之間沒(méi)有聯(lián)系,或者即使有聯(lián)系,這種聯(lián) 系也很松散。,練習(xí)二:確定耦合類型,說(shuō)明:模塊p、t和u 更新同一個(gè)數(shù)據(jù)庫(kù),模塊接口描述,耦合類型,如果模塊間必須存在耦合,就盡量使用數(shù)據(jù)耦合,少用控制耦合,限制公共耦合的范圍,堅(jiān)決避免使用內(nèi)容耦合。,內(nèi)容耦合:如果一個(gè)模塊直接引用另一個(gè)模塊的內(nèi)容。 公共耦合多個(gè)模塊都訪問(wèn)同一個(gè)公共數(shù)據(jù)環(huán)境,則稱它們是公共耦合。 控制耦合模塊A向模塊B傳遞一個(gè)控制信息,稱這兩個(gè)模塊是控制耦合的。 數(shù)據(jù)耦合如果兩個(gè)模塊傳遞的是數(shù)據(jù)項(xiàng),則這兩個(gè)模塊是數(shù)據(jù)耦合。 特征耦合:傳遞整個(gè)數(shù)據(jù)結(jié)構(gòu),但是只需要使用一部分?jǐn)?shù)據(jù)元素 非直接耦合:兩個(gè)模塊之間沒(méi)有直接關(guān)系,它們之間的聯(lián)系是通過(guò)主模塊的控制和調(diào)用,4 體系結(jié)構(gòu)設(shè)計(jì),體系結(jié)構(gòu)是軟件系統(tǒng)中最本質(zhì)的東西。 (1)體系結(jié)構(gòu)是對(duì)復(fù)雜事物的一種抽象。良好的體系結(jié)構(gòu)是普遍適用的,它可以高效地處理多種多樣的個(gè)體需求。 一提起“房子”,我們的腦中馬上就會(huì)出現(xiàn)房子的印象(而不是地洞的印象)。“房子”是人們對(duì)住宿或辦公環(huán)境的一種抽象。 (2)體系結(jié)構(gòu)在一定的時(shí)間內(nèi)保持穩(wěn)定。軟件開(kāi)發(fā)最怕的就是需求變化,但“需求會(huì)發(fā)生變化”是個(gè)無(wú)法逃避的現(xiàn)實(shí)。人們希望在需求發(fā)生變化時(shí),最好只對(duì)軟件做些皮皮毛毛的修改,可千萬(wàn)別改動(dòng)軟件的體系結(jié)構(gòu)。 就如人們對(duì)住宿的需求也會(huì)變動(dòng),你可以經(jīng)常改變房間的裝璜和擺設(shè),但不會(huì)在每次變動(dòng)時(shí)都要去折墻、拆柱、挖地基。,良好的體系結(jié)構(gòu)意味著普適、高效和穩(wěn)定。本節(jié)將論述兩種非常通用的軟件體系結(jié)構(gòu): 層次結(jié)構(gòu) 客戶機(jī)/服務(wù)器(Client/Server)結(jié)構(gòu),4.1層次結(jié)構(gòu),層次結(jié)構(gòu)表達(dá)了這么一種常識(shí):有些事情比較復(fù)雜,我們沒(méi)法一口氣干完,就把事情分為好幾層,一層一層地去做。高層的工作總是建立在低層的工作之上。 層次關(guān)系主要有兩種:上下級(jí)關(guān)系和順序相鄰關(guān)系。,一、上下級(jí)關(guān)系的層次結(jié)構(gòu) 我們從小學(xué)一直讀到博士研究生畢業(yè),要讀20多年,可以分為五個(gè)層次。而范進(jìn)的知識(shí)結(jié)構(gòu)只有兩層:“私塾”和“秀才”,但讀了五十多年。 一般地處于較高層次的學(xué)生應(yīng)該懂得所有低層次的知識(shí),而處于低層次學(xué)生無(wú)法懂得所有高層次的知識(shí)。 上層子系統(tǒng)可以使用下層子系統(tǒng)的功能,而下層子系統(tǒng)不能夠使用上層子系統(tǒng)的功能。,二、順序相鄰關(guān)系的層次結(jié)構(gòu) 順序相鄰關(guān)系的層次結(jié)構(gòu)表明通訊只能在相鄰兩層之間發(fā)生,信息只能被一層一層地順序傳遞。這種層次結(jié)構(gòu)的經(jīng)典之作是計(jì)算機(jī)網(wǎng)絡(luò)的OSI參考模型。 為了減少設(shè)計(jì)的復(fù)雜性,大多數(shù)網(wǎng)絡(luò)都按層(Layer)或級(jí)(Level)的方式組織。每一層的目的都是向它的上一層提供一定的服務(wù),而把如何實(shí)現(xiàn)這一服務(wù)的細(xì)節(jié)對(duì)上一層加以屏蔽。 一臺(tái)機(jī)器上的第n層與另一臺(tái)機(jī)器上的第n層進(jìn)行對(duì)話。通話的規(guī)則就是第n層的協(xié)議。數(shù)據(jù)不是從一臺(tái)機(jī)器的第n層直接傳送到另一臺(tái)機(jī)器的第n層。發(fā)送方把數(shù)據(jù)和控制信息逐層向下傳遞。最低層是物理介質(zhì),它進(jìn)行實(shí)際的通訊。接收方則將數(shù)據(jù)和控制信息逐層向上傳遞。,4.2 客戶機(jī)/服務(wù)器結(jié)構(gòu),讓我們先回顧一下早期的電話系統(tǒng)。貝爾(Alexander Graham Bell)于1876年申請(qǐng)了電話專利。 那時(shí)期的電話必須一對(duì)一對(duì)地賣,用戶自己在兩個(gè)電話之間拉一根線。如果一個(gè)電話用戶想和其它幾個(gè)電話用戶通話,他必須拉n根單獨(dú)的線到每個(gè)人的房子里。于是在很短的時(shí)間內(nèi),城市里到處都是穿過(guò)房屋和樹(shù)木的混亂的電話線。很明顯,企圖把所有的電話完全互聯(lián)(如圖所示a)是行不通的。,a,b,貝爾電話公司在1878年開(kāi)辦了第一個(gè)交換局。 公司為每個(gè)客戶架設(shè)一條線。打電話時(shí),客戶搖動(dòng)電話的曲柄使電話公司辦公室的鈴響起來(lái),操作員聽(tīng)到鈴聲以后根據(jù)要求將呼叫方和被呼叫方用跳線手工連接起來(lái)。這種集中交換式的模型如圖b所示。 很快地,貝爾系統(tǒng)的交換局就出現(xiàn)在各地。人們又要求能打城市間的長(zhǎng)途電話,就出現(xiàn)了二級(jí)交換局,以后進(jìn)一步發(fā)展為多個(gè)二級(jí)交換局。Tanenbaum 1998,如果將圖b中的電話看成是客戶程序,將中心的交換局看成是服務(wù)程序,那么圖b就是典型的客戶機(jī)/服務(wù)器結(jié)構(gòu)。 注意這里客戶機(jī)和服務(wù)器都是指軟件而不是指硬件。 客戶機(jī)/服務(wù)器結(jié)構(gòu)存在兩個(gè)顯然的優(yōu)點(diǎn): (1)以集中的方式高效率地管理通訊。前面講電話系統(tǒng)的故事就是要說(shuō)明這一點(diǎn)。 (2)可以共享資源。比如在信息管理系統(tǒng)中,服務(wù)器將信息集中起來(lái),任何客戶機(jī)都可以通過(guò)訪問(wèn)服務(wù)器而獲得所需的信息。,客戶機(jī)和服務(wù)器之間的通訊以“請(qǐng)求響應(yīng)”的方式進(jìn)行。客戶機(jī)先向服務(wù)器發(fā)起“請(qǐng)求”(Request),服務(wù)器再響應(yīng)(Response)這個(gè)請(qǐng)求。,客戶機(jī),服務(wù)器,請(qǐng)求,響應(yīng),在Internet/Intranet領(lǐng)域,目前“瀏覽器Web 服務(wù)器數(shù)據(jù)庫(kù)服務(wù)器” 結(jié)構(gòu)是一種非常流行的客戶機(jī)/服務(wù)器結(jié)構(gòu)。 這種結(jié)構(gòu)最大的優(yōu)點(diǎn)是:客戶機(jī)統(tǒng)一采用瀏覽器,這不僅讓用戶使用方便,而且使得客戶機(jī)端不存在維護(hù)的問(wèn)題。當(dāng)然,軟件開(kāi)發(fā)布和維護(hù)的工作不是自動(dòng)消失了,而是轉(zhuǎn)移到了Web 服務(wù)器端。在Web 服務(wù)器端,程序員要用腳本語(yǔ)言編寫(xiě)響應(yīng)頁(yè)面。,5 層次結(jié)構(gòu)設(shè)計(jì),軟件體系結(jié)構(gòu)設(shè)計(jì)的三要素是程序構(gòu)件(模塊)的層次結(jié)構(gòu)、構(gòu)件之間交互的方式以及數(shù)據(jù)的結(jié)構(gòu)。子系統(tǒng)及模塊劃分還應(yīng)考慮: (1)模塊大小適當(dāng)。 (2)模塊的層次結(jié)構(gòu)。 結(jié)構(gòu)圖(Structure Chart,SC)是精確表達(dá)軟件結(jié)構(gòu)的圖形表示方法,可反映模塊之間的層次調(diào)用關(guān)系和聯(lián)系。常用特定符號(hào)表示模塊、模塊間調(diào)用關(guān)系及其信息傳遞。模塊間用單向箭頭連結(jié),箭頭從調(diào)用模塊指向被調(diào)用模塊,如下圖所示。,圖a 模塊調(diào)用關(guān)系 圖b 模塊間接口表示 圖c 模塊的條件和循環(huán)調(diào)用關(guān)系,有的結(jié)構(gòu)圖對(duì)這兩種信息不加以區(qū)別,一律用注有信息名的短箭頭“”來(lái)表示,【案例1】打印報(bào)告的軟件結(jié)構(gòu)圖。其調(diào)用次序?yàn)樯蠈诱{(diào)用下層,同層按照數(shù)據(jù)傳遞關(guān)系確定,一般從左到右執(zhí)行。執(zhí)行過(guò)程即按照數(shù)據(jù)流向進(jìn)行。如圖1所示。,(3)軟件層次結(jié)構(gòu)。層次圖如圖2所示。有關(guān)指標(biāo)為: 深度。表示了模塊間控制的層數(shù),表明軟件的復(fù)雜程度,深度越深,軟件越復(fù)雜。 寬度。表示同一層次上模塊的總數(shù),寬度越寬,表示軟件越復(fù)雜。 扇出。表示一模塊直接控制其他模塊的數(shù)量。如圖3(a)和(b)。模塊劃分時(shí),一般扇出平均3-4上限為5-8。 扇入。表示模塊直接受到多少其他模塊控制,扇入越大表明共享該模塊的上級(jí)模塊數(shù)越多,雖有一定好處,但不宜片面追求高扇入,如圖3(c)和(d)。,圖2軟件的層次,圖3 軟件的扇出和扇入控制,6 模塊設(shè)計(jì),在設(shè)計(jì)好軟件的體系結(jié)構(gòu)后,就已經(jīng)在宏觀上明確了各個(gè)模塊應(yīng)具有什么功能,應(yīng)放在體系結(jié)構(gòu)的哪個(gè)位置。 保持“功能獨(dú)立”是模塊化設(shè)計(jì)的基本原則。因?yàn)?,“功能?dú)立”的模塊可以降低開(kāi)發(fā)、測(cè)試、維護(hù)等階段的代價(jià)。 但是“功能獨(dú)立”并不意味著模塊之間保持絕對(duì)的孤立。一個(gè)系統(tǒng)要完成某項(xiàng)任務(wù),需要各個(gè)模塊相互配合才能實(shí)現(xiàn),此時(shí)模塊之間就要進(jìn)行信息交流。 手和腳是兩個(gè)“功能獨(dú)立”的模塊。沒(méi)有腳,手照樣能干活。沒(méi)有手,腳仍可以走路。如果希望跑得快,那么邁左腳時(shí)一定要伸右臂甩左臂,邁右腳時(shí)則要伸左臂甩右臂。,在設(shè)計(jì)一個(gè)模塊時(shí)不僅要考慮“這個(gè)模塊就該提供什么樣的功能”,還要考慮“這個(gè)模塊應(yīng)該怎樣與其它模塊交流信息”。 評(píng)價(jià)模塊設(shè)計(jì)優(yōu)劣的三個(gè)特征因素:“信息隱藏”、“內(nèi)聚與耦合”和“封閉開(kāi)放性”,6.1信息隱藏,為了盡量避免某個(gè)模塊的行為去干擾同一系統(tǒng)中的其它模塊,在設(shè)計(jì)模塊時(shí)就要注意信息隱藏。應(yīng)該讓模塊僅僅公開(kāi)必須要讓外界知道的內(nèi)容,而隱藏其它一切內(nèi)容。 模塊的信息隱藏可以通過(guò)接口設(shè)計(jì)來(lái)實(shí)現(xiàn)。一個(gè)模塊僅提供有限個(gè)接口(Interface),執(zhí)行模塊的功能或與模塊交流信息必須且只須通過(guò)調(diào)用公有接口來(lái)實(shí)現(xiàn)。,6.2內(nèi)聚和耦合,內(nèi)聚(Cohesion)是一個(gè)模塊內(nèi)部各成分之間相關(guān)聯(lián)程度的度量。 耦合(Coupling)是模塊之間依賴程度的度量。 內(nèi)聚和耦合是密切相關(guān)的,與其它模塊存在強(qiáng)耦合的模塊通常意味著弱內(nèi)聚,而強(qiáng)內(nèi)聚的模塊通常意味著與其它模塊之間存在弱耦合。 模塊設(shè)計(jì)追求強(qiáng)內(nèi)聚,弱耦合。,6.3封閉開(kāi)放性,一個(gè)模塊可以作為一個(gè)獨(dú)立體被其它程序引用,則稱模塊具有封閉性。一個(gè)模塊可以被擴(kuò)充,則稱模塊具有開(kāi)放性。 從字面上看,讓模塊具有“封閉開(kāi)放性”是矛盾的,但這種特征在軟件開(kāi)發(fā)過(guò)程中是客觀存在的。 著手一個(gè)新問(wèn)題時(shí),很難一次性解決問(wèn)題。應(yīng)該先縱觀問(wèn)題的一些重要方面,同時(shí)作好以后補(bǔ)充的準(zhǔn)備。因此讓模塊存在“開(kāi)放性”并不是壞事情?!胺忾]性”也是需要的,不能等到完全掌握解決問(wèn)題的信息后再把程序做成別人能用的模塊。 模塊的“封閉開(kāi)放性”實(shí)際上對(duì)應(yīng)于軟件質(zhì)量因素中的可復(fù)用性和可擴(kuò)充性。采用面向過(guò)程的方法進(jìn)行程序設(shè)計(jì),很難開(kāi)發(fā)出既具有封閉性又具有開(kāi)放性的模塊。采用面向?qū)ο笤O(shè)計(jì)方法可以較好地解決這個(gè)問(wèn)題。,7 設(shè)計(jì)方法,軟件設(shè)計(jì)方法可以分為三大類。 一是面向數(shù)據(jù)流的設(shè)計(jì),也稱為過(guò)程驅(qū)動(dòng)設(shè)計(jì) 二是面向數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì),也稱為數(shù)據(jù)驅(qū)動(dòng)的設(shè)計(jì) 三是面向?qū)ο笤O(shè)計(jì),7.1 結(jié)構(gòu)化設(shè)計(jì)方法,1)結(jié)構(gòu)化設(shè)計(jì)方法概述 結(jié)構(gòu)化設(shè)計(jì)(Structured Design,SD)方法是一種典型的面向數(shù)據(jù)流的設(shè)計(jì)方法,是結(jié)構(gòu)化開(kāi)發(fā)方法的核心和關(guān)鍵,主要完成軟件系統(tǒng)的總體結(jié)構(gòu)設(shè)計(jì)。 軟件具有層次性和過(guò)程性特征:軟件的層次性

溫馨提示

  • 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)論