2015年計(jì)算機(jī)三級(jí)信息管理考試要點(diǎn)
在明確了用戶的需求以后,下一步的任務(wù)就是對(duì)未來(lái)的軟件系統(tǒng)進(jìn)行設(shè)計(jì)。軟件設(shè)計(jì)通常可分為概要設(shè)計(jì)和詳細(xì)設(shè)計(jì)。概要設(shè)計(jì)的任務(wù)是確定軟件系統(tǒng)的結(jié)構(gòu),進(jìn)行模塊劃分,確定每個(gè)模塊的功能、接口以及模塊間的調(diào)用關(guān)系。詳細(xì)設(shè)計(jì)的任務(wù)是為每個(gè)模塊設(shè)計(jì)實(shí)現(xiàn)的細(xì)節(jié)。此外,在概要設(shè)計(jì)階段還應(yīng)對(duì)全局?jǐn)?shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)計(jì),詳細(xì)設(shè)計(jì)階段還應(yīng)對(duì)局部數(shù)據(jù)結(jié)構(gòu)進(jìn)行設(shè)計(jì)。有的設(shè)計(jì)方法不區(qū)分概要設(shè)計(jì)和詳細(xì)設(shè)計(jì),統(tǒng)稱為軟件設(shè)計(jì)。
人們?cè)陂_(kāi)發(fā)過(guò)程中,總結(jié)出許多軟件設(shè)計(jì)的概念和原則,這些概念和原則對(duì)提高軟件的設(shè)計(jì)質(zhì)量有很大的幫助。
1.抽象
抽象是指忽視一個(gè)主題中與當(dāng)前目標(biāo)無(wú)關(guān)的那些方面,以便更充分地注意與當(dāng)前目標(biāo)有關(guān)的方面。抽象是認(rèn)識(shí)復(fù)雜問(wèn)題的過(guò)程中人類使用的最有力的思維工具,它抽取出事物的本質(zhì)特性而暫時(shí)不考慮它的細(xì)節(jié)。
軟件工程中從軟件定義到軟件開(kāi)發(fā)要經(jīng)歷多個(gè)階段,在這個(gè)過(guò)程中每前進(jìn)一步都可看作是對(duì)軟件的抽象層次的一次細(xì)化。抽象的最低層次就是實(shí)現(xiàn)該軟件的源程序代碼。在進(jìn)行模塊化設(shè)計(jì)時(shí)可以有多個(gè)抽象層次,最高抽象層次的模塊用概括的方式敘述問(wèn)題的解法,較低抽象層次的模塊是對(duì)較高的抽象層次模塊對(duì)問(wèn)題解決描述的細(xì)化。過(guò)程抽象和數(shù)據(jù)抽象是常用的兩種主要抽象手段。
過(guò)程抽象是指任何一個(gè)完成明確功能的操作都可被使用者當(dāng)作單個(gè)的實(shí)體看待,盡管這個(gè)操作實(shí)際上可能由一系列更低級(jí)的操作來(lái)完成。過(guò)程抽象常常也稱為功能/子功能抽象。例如函數(shù)、子程序。
數(shù)據(jù)抽象定義了數(shù)據(jù)類型和施加于該類型的操作,并限定了對(duì)象值的范圍,只能通過(guò)使用這些操作修改和觀察這些數(shù)據(jù),例如抽象數(shù)據(jù)類型。
2.模塊化
模塊化是指將一個(gè)待開(kāi)發(fā)的軟件分解成若干個(gè)小的簡(jiǎn)單的部分———模塊,每個(gè)模塊可獨(dú)立地開(kāi)發(fā)、測(cè)試,最后組裝成完整的程序。這是一種復(fù)雜問(wèn)題的“分而治之”的原則,模塊化的目的是使程序的結(jié)構(gòu)清晰,容易閱讀,容易理解,容易測(cè)試,容易修改。
模塊是指執(zhí)行某一特定任務(wù)(也可以是實(shí)現(xiàn)某一特定的抽象數(shù)據(jù)類型)的數(shù)據(jù)結(jié)構(gòu)和程序代碼。一個(gè)模塊有它的外部特征和內(nèi)部特征。外部特征包括模塊的接口(即它的輸入/輸出參數(shù),引用的全局變量和它需調(diào)用的其他模塊)和模塊的功能,內(nèi)部特征包括模塊的局部數(shù)據(jù)和實(shí)現(xiàn)該模塊的程序代碼。調(diào)用一個(gè)模塊只需知道它的外部特征,而不必了解其內(nèi)部特征。
3.信息隱蔽
信息隱蔽是開(kāi)發(fā)整體程序結(jié)構(gòu)時(shí)使用的法則,即將每個(gè)程序的成分隱蔽或封裝在一個(gè)單一的設(shè)計(jì)模塊中,定義每一個(gè)模塊時(shí)盡可能少地顯露其內(nèi)部的處理。
在設(shè)計(jì)時(shí)首先列出一些可能發(fā)生變化的因素,在劃分模塊時(shí)將一個(gè)可能發(fā)生變化的因素隱蔽在某個(gè)模塊的內(nèi)部,使其他模塊與這個(gè)因素?zé)o關(guān)。在這個(gè)因素發(fā)生變化時(shí),我們只需修改含有這個(gè)因素的模塊,而與其他模塊無(wú)關(guān)。
隱蔽的對(duì)象可以有:什么樣的決策、可能修改的決策、數(shù)據(jù)結(jié)構(gòu)的內(nèi)部連接以及對(duì)它所做的操作細(xì)節(jié)、內(nèi)部特征碼、與計(jì)算機(jī)硬件有關(guān)的細(xì)節(jié)等。
信息隱蔽原則對(duì)提高軟件的可修改性、可測(cè)試性和可移植性都有重要的作用。
4.模塊獨(dú)立
模塊獨(dú)立是指每個(gè)模塊完成一個(gè)相對(duì)獨(dú)立的特定子功能,并且與其他模塊之間的聯(lián)系簡(jiǎn)單。衡量模塊獨(dú)立程序的度量標(biāo)準(zhǔn)有兩個(gè):耦合和內(nèi)聚。耦合是指模塊之間聯(lián)系的緊密程度。耦合度越高則模塊的獨(dú)立性越差。內(nèi)聚是指模塊內(nèi)部各元素之間聯(lián)系的緊密程度。例如一個(gè)完成多個(gè)功能的模塊的內(nèi)聚度就比完成單一功能的模塊的內(nèi)聚度低。內(nèi)聚度越低模塊的獨(dú)立性越差。因此,模塊獨(dú)立就是希望每個(gè)模塊都是高內(nèi)聚低耦合的。
(1)耦合
兩個(gè)模塊之間的耦合方式通常有如下7種,下面按它們的耦合度從低到高的次序依次作介紹。①非直接耦合:非直接耦合是指兩個(gè)模塊沒(méi)有直接的聯(lián)系,它們中的任一個(gè)都能不依賴于對(duì)方而獨(dú)立地工作。
②數(shù)據(jù)耦合:數(shù)據(jù)耦合是指兩個(gè)模塊借助于參數(shù)表傳遞簡(jiǎn)單數(shù)據(jù)。
③標(biāo)記耦合(stamp coupling):當(dāng)一個(gè)數(shù)據(jù)結(jié)構(gòu)的一部分(如記錄的一部分)借助于模塊接口被傳遞時(shí)就發(fā)生標(biāo)記耦合。
④控制耦合:控制耦合指兩個(gè)模塊間傳遞的信息中包含用于控制模塊內(nèi)部邏輯的控制信息。⑤外部耦合:當(dāng)模塊與軟件以外的環(huán)境有關(guān)時(shí)就發(fā)生外部耦合。例如,輸入/輸出把一個(gè)模塊與特定的設(shè)備、格式、通信協(xié)議耦合在一起。
⑥公共耦合:多個(gè)模塊引用一全局?jǐn)?shù)據(jù)區(qū)的模式稱為公共耦合。例如FORTRAN語(yǔ)言中的COMMON語(yǔ)句、C語(yǔ)言中的external數(shù)據(jù)類型、一個(gè)磁盤文件等都是全局?jǐn)?shù)據(jù)區(qū)。⑦內(nèi)容耦合:內(nèi)容耦合指兩上模塊之間出現(xiàn)了下列情況之一:
·一個(gè)模塊訪問(wèn)另一個(gè)模塊的內(nèi)部數(shù)據(jù);
·一個(gè)模塊不通過(guò)正常入口轉(zhuǎn)到另一模塊的內(nèi)部;·兩個(gè)模塊有一部分程序代碼重疊;
·一個(gè)模塊有多個(gè)入口。
(2)內(nèi)聚
模塊的內(nèi)聚種類通常可分成7種,下面按內(nèi)聚度從低到高的次序依次作介紹。
①偶然內(nèi)聚:如果一個(gè)模塊完成一組任務(wù),這組任務(wù)彼此間即使有關(guān)系,其關(guān)系也是很松散的,這個(gè)模塊屬于偶然內(nèi)聚。
②邏輯內(nèi)聚:如果一個(gè)模塊完成邏輯上相關(guān)的一組任務(wù),這個(gè)模塊是邏輯內(nèi)聚的。例如,產(chǎn)生與類型無(wú)關(guān)的全部輸出的模塊。
③瞬時(shí)內(nèi)聚(temporal cohesion):如果一個(gè)模塊所包含的任務(wù)必須在同一時(shí)間間隔內(nèi)執(zhí)行,這個(gè)模塊屬于瞬時(shí)內(nèi)聚。例如初始化模塊。
④過(guò)程內(nèi)聚:如果一個(gè)模塊的處理元素是相關(guān)的,而且必須按特定的次序執(zhí)行,這個(gè)模塊屬于過(guò)程內(nèi)聚。
⑤通信內(nèi)聚:如果一個(gè)模塊的所有處理元素集中在一個(gè)數(shù)據(jù)結(jié)構(gòu)的區(qū)域上,該模塊屬于通信內(nèi)聚。例如,一個(gè)模塊中的所有處理元素使用同一輸入數(shù)據(jù)。
⑥順序內(nèi)聚:如果一個(gè)模塊的處理元素是相關(guān)的,而且必須順序執(zhí)行,這個(gè)模塊屬于順序內(nèi)聚。⑦功能內(nèi)聚:如果一個(gè)模塊完成一個(gè)單一的功能,模塊中的各部分在此目標(biāo)下協(xié)同工作,而且都是為完成這一功能而不可缺少的,那么這個(gè)模塊是功能內(nèi)聚的。
5.模塊分解時(shí)應(yīng)遵循的準(zhǔn)則
(1)滿足信息隱蔽原則。
(2)盡量使得模塊的內(nèi)聚度高,模塊間的耦合度低。
(3)模塊的大小適中(通常一個(gè)模塊以50~100個(gè)語(yǔ)句行為適宜)。
(4)模塊的調(diào)用深度不宜過(guò)大。一個(gè)模塊A可以調(diào)用另一模塊B,模塊B還可調(diào)用模塊C,稱模塊A直接調(diào)用模塊B,模塊A間接調(diào)用模塊C,被間接調(diào)用的模塊還可調(diào)其他模塊,這樣可形成一棵調(diào)用樹(shù),我們把以某個(gè)模塊為根結(jié)點(diǎn)的調(diào)用樹(shù)的深度稱為該模塊的調(diào)用深度。
(5)模塊的扇入應(yīng)盡量大,扇出不宜過(guò)大。一個(gè)模塊的扇入是指直接調(diào)用該模塊的上級(jí)模塊個(gè)數(shù)。一個(gè)模塊的扇出是指該模塊直接調(diào)用的下級(jí)模塊的個(gè)數(shù)。扇入大表示模塊的復(fù)用程度高,扇出大表示模塊的復(fù)雜度高。
(6)設(shè)計(jì)單入口和單出口的模塊。
(7)模塊的作用域應(yīng)在控制域之內(nèi)。模塊的作用域是指受該模塊內(nèi)一個(gè)判定影響的所在模塊的集合。模塊的控制域是指該模塊本身以及被該模塊直接或間接調(diào)用的所有模塊的集合。在設(shè)計(jì)時(shí),作用域應(yīng)是控制域的子集,作用域最好是做出判定的模塊本身以及它的直屬下級(jí)模塊(直接調(diào)用的模塊)。
(8)模塊的功能應(yīng)是可以預(yù)測(cè)的,功能可預(yù)測(cè)是指對(duì)相同的輸入數(shù)據(jù)能產(chǎn)生相同的輸出。