結(jié)構(gòu)化系統(tǒng)設(shè)計.P_第1頁
結(jié)構(gòu)化系統(tǒng)設(shè)計.P_第2頁
結(jié)構(gòu)化系統(tǒng)設(shè)計.P_第3頁
結(jié)構(gòu)化系統(tǒng)設(shè)計.P_第4頁
結(jié)構(gòu)化系統(tǒng)設(shè)計.P_第5頁
已閱讀5頁,還剩204頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第7章 結(jié)構(gòu)化系統(tǒng)設(shè)計 7.1 系統(tǒng)設(shè)計的任務(wù)要求 7.2 結(jié)構(gòu)化設(shè)計的根本概念 7.3 從數(shù)據(jù)流圖導(dǎo)出結(jié)構(gòu)圖 7.4 一體化設(shè)計方法7.5 代碼設(shè)計 7.6 輸出設(shè)計 7.7 輸入設(shè)計 7.8 人機對話設(shè)計 7.9 計算機處理過程的設(shè)計 7.10 計算機系統(tǒng)的選擇 7.11 系統(tǒng)設(shè)計說明書 習題7 7.1 系統(tǒng)設(shè)計的任務(wù)要求 系統(tǒng)分析階段要答復(fù)的中心問題是系統(tǒng)“做什么,即明確系統(tǒng)的功能。這個階段的成果是系統(tǒng)的邏輯模型。系統(tǒng)設(shè)計要答復(fù)的中心問題是系統(tǒng)“怎么做,即如何實現(xiàn)系統(tǒng)說明書規(guī)定的系統(tǒng)功能。這一階段,要根據(jù)實際的技術(shù)條件、經(jīng)濟條件和社會條件,確定系統(tǒng)的實施方案,即確定系統(tǒng)的物理模型。 7.

2、1.1 系統(tǒng)設(shè)計的目標 根據(jù)一個邏輯模型,可以提出多個物理模型。我們怎樣評價、選擇這些物理模型呢?面向管理的信息系統(tǒng),其優(yōu)劣程度取決于它為管理工作提供信息效勞的質(zhì)量。具體講,我們可以從以下六個方面來衡量。 1. 信息系統(tǒng)的功能 這當然是最根本的一條。它包括系統(tǒng)是否解決了用戶希望解決的問題,是否有較強的數(shù)據(jù)校驗功能,能否進行所需要的運算,能否提供符合用戶需要的信息輸出等等。 2. 系統(tǒng)的效率 這是與時間有關(guān)的指標。例如,聯(lián)機處理系統(tǒng)的響應(yīng)時間,即從發(fā)出要求到得到應(yīng)答信號的時間,又如批處理系統(tǒng)的處理速度,即處理單個業(yè)務(wù)的平均時間等。在實時錄入、成批處理的事務(wù)處理系統(tǒng)中,常用處理能力(標準時間內(nèi)處理

3、的業(yè)務(wù)個數(shù))來表示系統(tǒng)的工作效率。 影響系統(tǒng)效率的因素很多,包括系統(tǒng)的硬件及其組織結(jié)構(gòu)、人機接口設(shè)計是否合理、計算機處理過程的設(shè)計質(zhì)量等等。這里強調(diào)的是整個系統(tǒng)的效率,而不是某一局部的效率。例如,商場的收款系統(tǒng),衡量其效率的標準是顧客等待時間的長短。它包括人的操作時間和計算機的運算時間。一般來講,計算機的運算時間比人操作的時間要少得多。因此,人機界面設(shè)計是否便于操作,操作人員是否熟練,是這類系統(tǒng)至關(guān)重要的因素。 3. 系統(tǒng)的可靠性 系統(tǒng)的可靠性,指系統(tǒng)在運行過程中抵御各種干擾,保證系統(tǒng)正常工作的能力。它包括檢查錯誤、糾正錯誤的能力及系統(tǒng)一旦發(fā)生故障后重新恢復(fù)、重新啟動的能力。 系統(tǒng)在運行過程中

4、難免會遇到各種干擾。這些干擾有人為的,如病毒、無意的錯誤操作等;有自然的,如地震、火災(zāi)、突然停電等。提高系統(tǒng)的可靠性也有種種途徑,例如可以選擇可靠性較高的設(shè)備,采用硬件結(jié)構(gòu)冗余設(shè)計(如雙機結(jié)構(gòu)),設(shè)置故障檢測、恢復(fù)處理及各種平安措施等。 4. 系統(tǒng)的工作質(zhì)量 系統(tǒng)的工作質(zhì)量指系統(tǒng)提供的信息的準確程度,使用的方便性,輸出表格的實用性和清晰性等。很明顯,系統(tǒng)的工作質(zhì)量直接影響系統(tǒng)的使用效果,因此,必須引起注意。同樣,這里講的工作質(zhì)量是整個系統(tǒng)的工作質(zhì)量,而不是某個局部的質(zhì)量。管理信息系統(tǒng)是一個人機系統(tǒng),除了程序正確之外,還要保證輸入計算機的數(shù)據(jù)是正確無誤的。即使輸入是正確的,計算結(jié)果顯示在屏幕上也

5、是正確的,但人還可能看錯,如把“3看成“8。 這就要求設(shè)計人員在各個環(huán)節(jié),如輸入設(shè)計、輸出設(shè)計、代碼設(shè)計、人機接口設(shè)計等環(huán)節(jié)都要精心設(shè)計。設(shè)計時既要考慮應(yīng)用的要求,還要考慮使用者的能力與心理的反響。 5. 系統(tǒng)的可變更性 系統(tǒng)的可變更性是指修改和維護系統(tǒng)的難易程度。系統(tǒng)實施過程中,需要測試、修改。系統(tǒng)交付使用之后,也會發(fā)現(xiàn)某些錯誤或缺乏之處。另外,隨著系統(tǒng)環(huán)境的變化,用戶會對系統(tǒng)提出某些新的要求。因此,系統(tǒng)的修改是否方便直接關(guān)系到系統(tǒng)生存期的長短。一個可變更性好的系統(tǒng),維護相對容易,生命周期就長。 6. 系統(tǒng)的經(jīng)濟性 系統(tǒng)的經(jīng)濟性是指系統(tǒng)收益與支出之比。這是確定設(shè)計方案的一個重要因素。 系統(tǒng)的

6、效率、效勞質(zhì)量、可靠性、可變更性、經(jīng)濟性等指標是相互聯(lián)系又彼此制約的,在一定程度上是相互矛盾的。例如,為了提高系統(tǒng)的可靠性,就要采取一些校驗和控制措施,系統(tǒng)的效率就要受到一定的影響。但從另一個角度看,由于系統(tǒng)可靠性的提高,抗干擾能力強了,系統(tǒng)能不間斷運行,中斷時間的減少又提高了系統(tǒng)的效率。某些系統(tǒng)對可靠性要求很高,需要選取可靠性高的設(shè)備,甚至采用雙機結(jié)構(gòu),這樣系統(tǒng)本錢要大幅度增加,經(jīng)濟性下降。 再如,為了增強系統(tǒng)的可變更性,采用模塊化結(jié)構(gòu),系統(tǒng)的效率也會有所降低。這種彼此制約的關(guān)系說明,在系統(tǒng)設(shè)計時,應(yīng)根據(jù)系統(tǒng)的具體情況有所側(cè)重:對于可靠性要求高的系統(tǒng),如涉及財務(wù)及某些高度機密的信息,首先要保

7、證系統(tǒng)可靠,不惜增加本錢,在一定程度上可降低效率;對于實時性要求高的系統(tǒng),如飛機訂票系統(tǒng),首先保證效率,不妨增加一些存儲空間的開銷。 但是,從系統(tǒng)開發(fā)的角度看,系統(tǒng)的可變更性是首先應(yīng)考慮的因素。這是因為,無論對系統(tǒng)研制過程還是今后的運行,它都有直接的影響。據(jù)統(tǒng)計,在系統(tǒng)的整體生命周期中,各種經(jīng)費開銷所占比例如下: 研制占20%其中:分析與設(shè)計35%編寫程序15%調(diào)試50%維護占80% 這里的維護包括排除開發(fā)階段的錯誤,適應(yīng)環(huán)境變化增加新的功能等工作。 由此可見,修改系統(tǒng)的經(jīng)費開銷占了整個經(jīng)費的90%(20%50%80%),如果系統(tǒng)的可變更性好,就可以大大節(jié)約人力、財力,延長系統(tǒng)生命期。事實上,

8、一個信息系統(tǒng)不管事先怎樣精心設(shè)計,系統(tǒng)投入運行后,總會進行某些修改或補充。這可能是經(jīng)過一段時間后,發(fā)現(xiàn)某些地方效率還可以提高,或者還要增加某些可靠性措施,或者還要增加某些新的功能,或者對工作質(zhì)量提出新的要求等等。 如果可變更性好,就比較容易滿足這些要求??偠灾?,可變更性好的系統(tǒng),效率不高可以提高效率,質(zhì)量不好可以改進質(zhì)量,可靠性差可以加強可靠性。反之,可變更性差,修改不如重做,系統(tǒng)壽命自然就短。 從上面的分析可以看出:系統(tǒng)設(shè)計必須從保證系統(tǒng)的變更性入手,設(shè)計出一個易于理解,容易維護的系統(tǒng)。 為了分析具備什么特點的系統(tǒng)易于修改,必須先找出修改一個系統(tǒng)的困難來自何處。對系統(tǒng)的修改,往往是對某一個

9、模塊或某個子系統(tǒng)的細節(jié)作一些變動,或者對子系統(tǒng)的組合關(guān)系作某些變動。更常見的是修改某一局部的數(shù)據(jù)結(jié)構(gòu)或執(zhí)行語句。這種修改的本身并不困難,困難在于找出需要修改的地方和這一修改對其他局部的影響。 我們知道,系統(tǒng)各個局部之間存在控制、調(diào)用、數(shù)據(jù)交換等種種聯(lián)系。對某一局部的修改,可能直接或間接地影響到系統(tǒng)的其他局部。對A的修改涉及B,而對B的修改又可以影響到C、E。人們把這種影響形象地叫做“水波效應(yīng)。因此對系統(tǒng)某一個局部的修改,必須十分小心地追蹤這一修改所涉及的各個局部。這是系統(tǒng)難于修改的主要原因。為了使系統(tǒng)容易修改和容易理解,需要注意以下幾個問題: (1) 把系統(tǒng)劃分為這樣一些局部,其中每一局部的功

10、能簡單明確,內(nèi)容簡明易懂,易于修改。我們把這樣的局部稱為模塊。即劃分模塊。 (2) 系統(tǒng)分成模塊的工作按層次進行。首先,把整個系統(tǒng)看成一個模塊,然后按功能分解成假設(shè)干個第一層模塊,這些模塊互相配合,共同完成整個系統(tǒng)的功能。按功能再分解第一層的各個模塊。依次下去,直到每個模塊都十分簡單。 (3) 每一個模塊應(yīng)盡可能獨立,即應(yīng)盡可能減少模塊間的調(diào)用關(guān)系和數(shù)據(jù)交換關(guān)系。當然,系統(tǒng)中的模塊不可能與其他模塊沒有聯(lián)系,只是要求這種聯(lián)系盡可能少。 (4) 模塊間的關(guān)系要說明,這樣,在修改時可以追蹤和控制。 總之,一個易于修改的系統(tǒng)應(yīng)該由一些相對獨立,功能單一的模塊按照層次結(jié)構(gòu)組成。這些模塊之間不必要的聯(lián)系都

11、已去掉,而且它們的功能及相互關(guān)系都已說明。這就是結(jié)構(gòu)化設(shè)計的根本思想。 7.1.2 系統(tǒng)設(shè)計的內(nèi)容 系統(tǒng)設(shè)計階段的任務(wù)是提出實施方案,該方案是這個階段工作成果的表達。這個方案以書面的正式文件系統(tǒng)設(shè)計說明書提出,它被批準后將成為系統(tǒng)實現(xiàn)階段的工作依據(jù)。 系統(tǒng)設(shè)計的根本任務(wù)大體上可以分為兩個方面。 1. 把總?cè)蝿?wù)分解成許多根本的、具體的任務(wù) 這些具體任務(wù)合理地組織起來構(gòu)成總?cè)蝿?wù)??傮w設(shè)計的根本任務(wù)是: (1) 將系統(tǒng)劃分成模塊; (2) 決定每個模塊的功能; (3) 決定模塊的調(diào)用關(guān)系; (4) 決定模塊的界面,即模塊間信息的傳遞。 總體設(shè)計是系統(tǒng)開發(fā)過程中關(guān)鍵的一步。系統(tǒng)的質(zhì)量及一些整體特性根本

12、上是由這一步?jīng)Q定的。系統(tǒng)越大,總體設(shè)計的影響越大。認為各個局部都很好,組合起來就一定好的想法是不實際的。我們知道:整體大于局部之和。 2. 為各個具體任務(wù)選擇適當?shù)募夹g(shù)手段和處理方法 它包括: (1) 代碼設(shè)計; (2) 數(shù)據(jù)庫設(shè)計; (3) 輸入設(shè)計; (4) 輸出設(shè)計; (5) 人機對話設(shè)計; (6) 處理過程設(shè)計。7.2 結(jié)構(gòu)化設(shè)計的根本概念 7.2.1 模塊 模塊(module)一詞使用很廣泛,通常是指用一個名字就可以調(diào)用的一段程序語句??梢詫⑺斫鉃轭愃啤白映绦虻母拍?,例如PASCAL程序設(shè)計中的函數(shù)、過程,F(xiàn)ORTRAN程序設(shè)計中的函數(shù)和子程序。 圖7.1 模塊的表示方法 模塊具有

13、輸入和輸出、邏輯功能、運行程序、內(nèi)部數(shù)據(jù)程序代碼四種屬性。模塊的輸入、輸出是模塊與外部的信息交換。一個模塊從它的調(diào)用者那里獲得輸入,把產(chǎn)生的結(jié)果再傳遞給調(diào)用者。模塊的邏輯功能是指它能做什么事,它是如何把輸入轉(zhuǎn)換成輸出的。輸入、邏輯功能、輸出構(gòu)成一個模塊的外部特性。內(nèi)部數(shù)據(jù)和程序代碼那么是模塊的內(nèi)部特性,是看不見的。模塊用程序代碼完成它的邏輯功能。內(nèi)部數(shù)據(jù)是僅供該模塊本身引用的數(shù)據(jù)。 在總體設(shè)計階段,我們主要關(guān)心模塊的外部特性。模塊的內(nèi)部屬性是以后要解決的問題。 模塊用長方形表示。模塊的名字寫在長方形內(nèi),如圖7.1所示。模塊的名字由一個動詞和一個作賓語的名詞表示。模塊的名字應(yīng)恰如其分地表達這一個

14、模塊的功能。 7.2.2 結(jié)構(gòu)圖 結(jié)構(gòu)化設(shè)計采用結(jié)構(gòu)圖(structured chart)描述系統(tǒng)的模塊結(jié)構(gòu)及模塊間的聯(lián)系。圖7.2是結(jié)構(gòu)圖的一個例子。圖7.2 結(jié)構(gòu)圖例如 結(jié)構(gòu)圖中的主要成分有: (1) 模塊,用長方形表示。 (2) 調(diào)用,用從一個模塊指向另一模塊的箭頭表示前一個模塊調(diào)用后一個模塊。箭尾的菱形表示有條件地調(diào)用,弧形箭頭表示循環(huán)調(diào)用。 (3) 數(shù)據(jù),用帶圓圈的小箭頭表示從一個模塊傳遞給另一個模塊的數(shù)據(jù)。 (4) 控制信息,用帶小黑點的小箭頭表示一個模塊傳送給另一個模塊的控制信息。 結(jié)構(gòu)圖的層數(shù)稱為深度。一個層次上的模塊總數(shù)稱為寬度。深度和寬度反映了系統(tǒng)的大小和復(fù)雜程度。 結(jié)構(gòu)圖

15、是系統(tǒng)設(shè)計階段最主要的表達和交流工具。這種圖應(yīng)當簡明易懂,既要便于設(shè)計人員表達自己的設(shè)想,又要便于編寫程序的人員了解實現(xiàn)要求,還要便于和管理人員商討。 模塊結(jié)構(gòu)圖可以由數(shù)據(jù)流圖轉(zhuǎn)換而來。但是,結(jié)構(gòu)圖與數(shù)據(jù)流圖有著本質(zhì)的差異:數(shù)據(jù)流圖著眼于數(shù)據(jù)流,反映系統(tǒng)的邏輯功能,即系統(tǒng)“做什么;結(jié)構(gòu)圖著眼于控制,反映系統(tǒng)的物理模型,即怎樣逐步實現(xiàn)系統(tǒng)的總功能。從時間上來說,數(shù)據(jù)流圖在前,控制結(jié)構(gòu)圖在后。 數(shù)據(jù)流圖是繪制結(jié)構(gòu)圖的依據(jù)??傮w設(shè)計階段的任務(wù),就是要對數(shù)據(jù)流圖規(guī)定的功能,設(shè)計一套實現(xiàn)方法。因此,繪制結(jié)構(gòu)圖的過程就是完成這個任務(wù)的過程。 結(jié)構(gòu)圖也不同于程序框圖(flowchart)。后者說明程序的步驟

16、,即先做什么,再做什么。結(jié)構(gòu)圖描述各模塊的“責任(responsibility),如一個公司的組織機構(gòu)圖,就用來描述各個部門的隸屬關(guān)系與職能。 7.2.3 模塊間的聯(lián)系 結(jié)構(gòu)化設(shè)計的根本思想,就是把系統(tǒng)設(shè)計成由相對獨立、功能單一的模塊組成的層次結(jié)構(gòu)。為了衡量模塊的相對獨立性,提出了模塊間的耦合(coupling)與模塊的內(nèi)聚(cohesion)這兩個概念。它們從不同側(cè)面反映了模塊的獨立性。耦合反映模塊之間連接的緊密程度,而內(nèi)聚指一個模塊內(nèi)各元素彼此結(jié)合的緊密程度。如果所有模塊的內(nèi)聚都很強,模塊之間的耦合自然就低,模塊的獨立性就強。反之亦然。 為了進一步說明這兩個概念,我們先看一段小程序:Beg

17、in n:=0; total:=0.0; read (value); WHILE value=0.0 DOBegin n:=n+1 total:=total+value; readln(value)End;average:=total/n;writeln (n, ,average)End. 我們用箭頭表示各程序行之間的聯(lián)系。這種聯(lián)系往往是程序的某個局部(這里是程序行)引用其他地方定義的數(shù)據(jù)時產(chǎn)生的,即程序中幾個地方都引用了存儲器中的同一位置。在一個大的程序中,這種聯(lián)系是非常多的。因此把一個系統(tǒng)分解成許多模塊時,分法不同,模塊間的聯(lián)系程度就不同。我們希望模塊內(nèi)聯(lián)系越緊越好,模塊間聯(lián)系越少越好。耦

18、合、內(nèi)聚這兩個概念從不同的角度反映這種聯(lián)系。 7.2.4 模塊間的耦合 耦合是影響系統(tǒng)復(fù)雜程度的一個重要因素。假設(shè)為了理解模塊A,需要對模塊B有所了解,那么A、B之間就有聯(lián)系。如果需要對B的理解越多,那么A、B的連接就越緊密,我們就說它們耦合越緊。假設(shè)程序員要修改緊耦合中的一個模塊,很可能不得不修改另一個模塊。因此,模塊間的耦合程度對系統(tǒng)的可維護性、可靠性有強烈的影響。 影響模塊間耦合程度的因素有三個: 聯(lián)系方式:模塊間通過什么方式聯(lián)系; 來往信息的作用:模塊間來往信息作什么用; 數(shù)量:模塊間來往信息的多少。 這三個因素可用三維坐標表示,如圖7.3所示,離坐標原點越遠,耦合程度越高。下面分別討

19、論。 圖7.3 影響耦合的因素 1. 聯(lián)系方式 如圖7.3所示,聯(lián)系方式有兩種:“直接引用和“用過程語句調(diào)用。 直接引用是指一個模塊直接存取另一個模塊的某些信息。例如全程變量,F(xiàn)ORTRAN的COMMON量,C語言的EXTERNAL量,或共享的通信區(qū)等。這種耦合也稱為公共環(huán)境耦合(common environment coupling)。這種耦合的復(fù)雜性隨耦合的模塊個數(shù)的增加而顯著上升。降低這種耦合程度的方法是局部化,也就是把一個公共區(qū)分成許多子區(qū),使每個子區(qū)上耦合的模塊數(shù)減少,如圖7.4所示。圖7.4 用局部化方法降低耦合程度 用過程語句調(diào)用,是通過模塊的名字調(diào)用整個模塊,一個模塊只有一個入

20、口,所有數(shù)據(jù)往來都以參數(shù)形式顯式出現(xiàn)。采用這種聯(lián)接方式,模塊間耦合程度比較低。當然,兩個模塊共享數(shù)據(jù)很多時,參數(shù)傳遞也不方便。 2.來往信息的作用 模塊間的來往信息可以作數(shù)據(jù)用,也可以作控制信息用。 假設(shè)兩個模塊間傳遞的信息只作數(shù)據(jù)用,即一個模塊提供的輸出數(shù)據(jù)作另一個模塊的輸入數(shù)據(jù),那么這種耦合稱為數(shù)據(jù)耦合(data coupling)。這種耦合當然是需要的。 如果兩個模塊間傳遞的信息作控制用,這種耦合稱為控制耦合(controcoupling)。圖7.5(a)中,模塊A將參數(shù)“平均最高傳遞給模塊B,模塊B按這個參數(shù)的值是“平均還是“最高去取相應(yīng)成績回送到A。這里的參數(shù)“平均最高實際上是一個開

21、關(guān)量(盡管它本身可能是數(shù)據(jù)形式),控制模塊B如何工作。這就是控制耦合。圖7.5 控制耦合 控制耦合給理解和修改帶來不便:第一,需要理解開關(guān)量;第二,模塊要設(shè)開關(guān)量,還要記住開關(guān)值是“平均還是“最高,以便數(shù)據(jù)從模塊返回后作相應(yīng)處理。其實,在系統(tǒng)設(shè)計中這種耦合是可以防止的。在這個例子中,只要將圖7.5(a)改為圖7.5(b)所示的形式就行了。圖(b)中模塊根據(jù)需要調(diào)用模塊B1或B2。 3. 往來信息的數(shù)量 很明顯,模塊間傳遞的信息量越大,它們之間的耦合程度越高,因為正是這種傳遞關(guān)系造成了模塊間的聯(lián)系。一個模塊只需了解它確實需要使用的數(shù)據(jù),對其他數(shù)據(jù)的存在最好完全不知道。 總之,結(jié)構(gòu)化設(shè)計要求模塊間

22、的耦合程度盡可能小,為此應(yīng)遵循以下原那么: 用過程語句調(diào)用其他模塊; 模塊間的參數(shù)作數(shù)據(jù)用; 模塊間的參數(shù)盡可能少。 在用高級語言編程序時,只要注意消除開關(guān)量,減少共用變量,就可以大大降低模塊間的耦合程度。 7.2.5 模塊的內(nèi)聚 模塊的內(nèi)聚反映模塊內(nèi)部聯(lián)系的緊密程度。如果一個模塊內(nèi)部相關(guān)性很高,都是為了同一個功能,我們就說它的內(nèi)聚程度高。模塊的內(nèi)聚可以分為七類,下面分別介紹。 1. 偶然內(nèi)聚(coincidentacohesion) 如圖7.6所示,模塊P、Q、R、S都有某些共同的操作,為了節(jié)約空間,減少程序量,可把這些共同的操作抽出來,組成一個模塊。實際上這些語句間沒有什么聯(lián)系。這種聯(lián)系就

23、是偶然型的。在計算機內(nèi)存小的時代,人們強調(diào)縮短程序長度,往往會引起這種情況。這種偶然性內(nèi)聚的模塊不便于修改。例如,假設(shè)模塊要將“B:A改為“E:A時,就不能直接改T,因為這一修改可能不適合其他模塊。圖7.6 偶然內(nèi)聚 2. 邏輯內(nèi)聚(logicacohesion) 將幾個邏輯上相似的功能放在一個模塊中,模塊內(nèi)聯(lián)系就是邏輯型內(nèi)聚。如圖7.5(a)中的模塊“取平均成績或最高成績就屬這一類,它把“取平均成績和“取最高成績這兩個相似的功能放在一起組成一個模塊。這個模塊的程序流程圖如圖7.7所示。它需要模塊傳遞一個開關(guān)量,根據(jù)開關(guān)量判定執(zhí)行哪一個分支。這樣做的優(yōu)點是節(jié)約空間,缺點是修改困難。如果現(xiàn)在不僅

24、要知道最高成績是多少,而且還要打印出獲得最高成績的學生姓名。這一修改就很難適應(yīng)“取平均成績的要求。圖7.7 邏輯內(nèi)聚 3. 時間內(nèi)聚(temporacohesion) 這是指與時間有關(guān)的聯(lián)系,即把需要有限時間間隔內(nèi)處理的成分放在同一模塊內(nèi)。例如一些初始化模塊。這種模塊的內(nèi)聚程度比前兩種稍高一些,但仍是一種低的內(nèi)聚。 4. 步驟內(nèi)聚(proceduracohesion) 模塊內(nèi)的元素屬于同一個公共步驟單元,那么稱該內(nèi)聚為步驟內(nèi)聚。圖7.8(a)是程序SIMPRO的流程圖,虛線框給出劃分模塊的一個方案。這樣劃分模塊得到的結(jié)構(gòu)圖如圖7.8(b)所示。模塊PERP屬時間內(nèi)聚。模塊PLANLOOP和TY

25、PDECID都屬于步驟內(nèi)聚。前者的元素即主循環(huán),后者的元素是主循環(huán)內(nèi)的一個判定過程。圖7.8 步驟內(nèi)聚 步驟內(nèi)聚模塊的內(nèi)聚程度比時間內(nèi)聚模塊高。例如,PLANLOOP內(nèi)各元素不僅滿足時間內(nèi)聚的條件,而且還有附加的步驟上的依賴關(guān)系。但步驟內(nèi)聚的內(nèi)聚程度仍不算高,往往導(dǎo)致模塊間有相當緊的耦合。在SIMPRO程序中,生產(chǎn)情況模擬算法的處理元素同時出現(xiàn)在PLANLOOP和TYPDECID中??梢韵胂筮@兩個模塊會有較緊的耦合。當需要模擬修改時,可能需要同時研究這兩個模塊。 5. 通信內(nèi)聚(communicationacohesion) 通信內(nèi)聚是指模塊內(nèi)的成分引用共同的數(shù)據(jù)。如圖7.9中的兩個模塊都屬于

26、這一類。模塊A的兩個局部都是對“購貨單的處理,而模塊B的兩個局部都是對數(shù)據(jù)存儲D的處理。 根據(jù)數(shù)據(jù)流圖容易判斷一個模塊是不是通信內(nèi)聚。通信內(nèi)聚的聚合程度已經(jīng)算高了,找不到更高的內(nèi)聚結(jié)構(gòu)時,這種結(jié)構(gòu)是完全可以接受的。圖7.9 通信內(nèi)聚 6. 順序內(nèi)聚(sequentiacohesion) 順序內(nèi)聚是指模塊中某個成分的輸出是另一模塊的輸入。圖7.10中的兩個模塊都屬這一類。圖7.10 順序內(nèi)聚 與通信內(nèi)聚相比,順序內(nèi)聚的內(nèi)聚程度更高,因為不管從數(shù)據(jù)的角度還是從執(zhí)行的順序來看,模塊內(nèi)各成分的關(guān)系都更緊密。但是與功能內(nèi)聚相比,通信內(nèi)聚的內(nèi)聚程度要低。如圖7.11所示,假設(shè)把ABCDE分割為ABCD、E

27、兩個模塊,或者ABC、DE兩個模塊,又或者A、BC、DE三個模塊,根據(jù)定義這些模塊都是順序內(nèi)聚,但這樣分割破壞了功能的完整性。假設(shè)將它分割成AB、CDE兩個模塊,才是最好的分割,這時每個模塊包含一個完整的功能。圖7.11 功能內(nèi)聚 7. 功能內(nèi)聚(functionacohesion) 假設(shè)一個模塊包括并且僅包括完成一個具體任務(wù)所需要的所有成分,那么這個模塊是功能內(nèi)聚的。這種模塊的聚合程度是最高的。結(jié)構(gòu)化設(shè)計的目標就是獲得這種模塊。 判斷一個模塊是否為功能內(nèi)聚的簡單有效的方法是:從調(diào)用者的角度看,用一個短語簡單明確地描述這個模塊做什么(不是怎么做!),分析這個短語判斷這個模塊是完成一個具體任務(wù),

28、還是多個任務(wù),或者做一些彼此無關(guān)的雜事。如果是完成一個具體任務(wù),那么這個模塊是功能內(nèi)聚的。 功能內(nèi)聚模塊的好處是界面清晰,容易理解,由于一個模塊一個功能,因而復(fù)用性好。 耦合和內(nèi)聚的概念是Stevens等人提出的,按他們的觀點,給上述七種內(nèi)聚評分如下: 功能內(nèi)聚10分; 順序內(nèi)聚9分; 通信內(nèi)聚7分; 步驟內(nèi)聚5分; 時間內(nèi)聚3分; 邏輯內(nèi)聚1分; 偶然內(nèi)聚0分。 7.2.6 作用范圍與控制范圍 程序中的每個判斷都會產(chǎn)生這樣的結(jié)果:根據(jù)此判斷的結(jié)果,某些處理執(zhí)行了,而另外一些沒有執(zhí)行。也就是說,有些處理的執(zhí)行受判斷的影響。由此引出判斷的作用范圍(或稱影響范圍)這一概念。 一個判斷的作用范圍是所

29、有這樣的模塊的集合,這些模塊內(nèi)含有依賴于這個判斷結(jié)果的處理。圖7.12 作用范圍與控制范圍 圖7.12中,模塊A有條件地調(diào)用模塊B和C,說明在模塊A中調(diào)用B、C的語句受判斷(是工人還是干部)結(jié)果的影響。因此,模塊屬于這個判斷的作用范圍。當然,模塊B、C也屬于這個判斷的作用范圍。 一個模塊的控制范圍是指它本身及其所有下屬模塊的集合。這里所說的下屬模塊包括直接下屬模塊及下屬模塊的下屬模塊。圖7.12中,模塊的控制范圍是集合A,B,C,D。 判斷的作用范圍和模塊的控制范圍,直接影響系統(tǒng)模塊的復(fù)雜性和可修改性。結(jié)構(gòu)化設(shè)計要求:對于任何一個判斷,其作用范圍應(yīng)該是這個判斷所在模塊的控制范圍的一個子集。換言

30、之,所有受判斷影響的模塊應(yīng)該附屬于做出判斷的那個模塊。圖7.12所示的情況滿足這一要求。在這個例子中,“是工人還是干部這個判斷可能在模塊或者在的上級模塊做出,但不管是哪種情況,從這個局部看,都滿足結(jié)構(gòu)化設(shè)計要求。假設(shè)該判斷就在模塊做出,那么更理想。在這種情況下,判斷的作用范圍僅是做出判斷的模塊及其直接下屬模塊的集合。 在圖7.13中,用“。標志判斷所在的模塊,灰色的模塊表示它是判斷的作用范圍內(nèi)的模塊。 圖7.13(a)的情況是作用范圍越出控制范圍,這樣模塊需把判斷結(jié)果傳給y,y再傳給A。判斷結(jié)果是控制信息,這樣便產(chǎn)生控制耦合?;蛘咴谀K重新判斷,這也有不便之處:修改判斷時,兩處都要修改。圖7.

31、13(b)作了改進,此時作用范圍沒越出控制范圍,但判斷點太高,同樣造成控制耦合。圖7.13(c)作了改善。圖7.13(d)是最理想的情況,它將不在控制范圍內(nèi)但在作用范圍內(nèi)的模塊移到控制范圍內(nèi),成為模塊B的直接下屬。圖7.13 判斷的位置 7.2.7 模塊的扇入與扇出 模塊的扇出是指模塊的直接下屬模塊的個數(shù),如圖7.14所示。圖7.14中,模塊平均的扇出數(shù)是2。一般認為,設(shè)計得好的系統(tǒng)平均扇出數(shù)是3或4。圖7.14 模塊的扇出 一個模塊的扇出數(shù)過大或過小都不理想。過大比過小更不好。一般認為扇出的上限不應(yīng)超過7。扇出過大意味著管理模塊過于復(fù)雜,需要控制和協(xié)調(diào)過多的下級。解決的方法是適當增加中間層次

32、。 一個模塊的扇入是指調(diào)用它的上級模塊的個數(shù)。扇入越大,表示該模塊被越多的上級模塊共享,這當然是我們所希望的,但是不能為了獲得高扇入而不惜代價。例如把彼此無關(guān)的功能湊在一起構(gòu)成一個模塊,雖然扇入數(shù)高了,但這樣的模塊的內(nèi)聚程度必然低。這是我們應(yīng)防止的。 設(shè)計得好的系統(tǒng),上層模塊有較高的扇出,下層模塊有較高的扇入。其結(jié)構(gòu)圖像清真寺的塔,上尖,中間寬,下面小。 7.2.8 病人監(jiān)護系統(tǒng)實例 我們通過下面的實例,說明前面介紹的一些概念在總體設(shè)計中的應(yīng)用,并說明系統(tǒng)設(shè)計中應(yīng)注意的其他一些問題。 實例:通過病床專用設(shè)備對病人進行監(jiān)護。這些設(shè)備可以測量病人的假設(shè)干指標,如體溫、脈博、血壓等等。每經(jīng)過一定的時

33、間間隔,監(jiān)護系統(tǒng)從監(jiān)護設(shè)備讀入這些數(shù)據(jù),并存入數(shù)據(jù)庫中。醫(yī)生為每個病人指定各種指標的平安范圍。假設(shè)發(fā)現(xiàn)某個指標超出平安范圍,或某個監(jiān)護部件有故障,那么向護理站發(fā)出通報:指標超出平安范圍時報告病人號,部件有故障時那么報告床號。 1. 初始結(jié)構(gòu)圖 根據(jù)上述要求,某個經(jīng)驗缺乏的設(shè)計員做出了該系統(tǒng)的初始結(jié)構(gòu)圖,如圖7.15所示。 圖中:PN是病人號,F(xiàn)S是各指標數(shù)據(jù),EOF是標志已查過最后一個病人,EF是標志設(shè)備故障,BN是床位號,SR是平安范圍,F(xiàn)S2是標志指標是否合理,USF是標志指標不平安。 各模塊的功能如下:圖7.15 初始結(jié)構(gòu)圖 (1) “采集數(shù)據(jù)模塊。向主模塊傳送病人的有關(guān)數(shù)據(jù):PN、FS

34、、EOF、EF。為此,它調(diào)用兩個模塊:“判定下一個病人和“讀取數(shù)據(jù)。 (2) “檢查數(shù)據(jù)模塊。檢查數(shù)據(jù)是否在合理范圍內(nèi),是否在平安范圍內(nèi),判定病人是否平安。它分別調(diào)用三個模塊完成。 (3) “處理數(shù)據(jù)模塊。把病人有關(guān)數(shù)據(jù)記入數(shù)據(jù)庫中,假設(shè)病人處于不平安范圍那么通知醫(yī)護人員;假設(shè)設(shè)備有故障那么通知維修人員。它分別調(diào)用三個模塊完成這些功能。 2. 結(jié)構(gòu)圖的改進 初始結(jié)構(gòu)圖有很多需要改進的地方: (1) “通報不平安因素可由主模塊直接調(diào)用,主模塊具備調(diào)用這一模塊的參數(shù),而且USF這個參數(shù)也只是調(diào)用這個模塊時才使用。 (2) 同理,“寫數(shù)據(jù)庫模塊也可由主模塊直接調(diào)用。 (3) 經(jīng)過(1)、(2)的改進

35、后,“處理數(shù)據(jù)這一模塊只調(diào)用“通報設(shè)備故障這一個模塊。事實上,“處理數(shù)據(jù)這一模塊除了起“管道作用,即把上層模塊的信息傳遞給下層模塊之外,沒有什么實質(zhì)性的工作,因而本身也可合并到主模塊去,由主模塊調(diào)用“通報設(shè)備故障。 作了上述變動后,結(jié)構(gòu)圖的頂層與第一層如圖7.16所示。圖7.16 消除“管道模塊 (4) 前面提到通報設(shè)備故障時應(yīng)通報床位號而不應(yīng)是病人號。床位號BN可由“采集數(shù)據(jù)模塊傳給主模塊,再由主模塊傳遞給“通報設(shè)備故障。但這樣做增加了模塊間的聯(lián)系。解決這個問題的另一個途徑是由“采集數(shù)據(jù)模塊直接調(diào)用“通報設(shè)備故障模塊。同時,設(shè)備故障或測得的指標不合理,都應(yīng)通知維修站。所以在通知維修站之前,還

36、要調(diào)用“檢查不合理范圍模塊。這樣,也簡化了“檢查數(shù)據(jù)模塊的界面。作了這些變動之后,結(jié)構(gòu)圖如圖7.17所示。 (5) 假設(shè)使“讀取數(shù)據(jù)模塊包括由病人號查床位號的功能,那么“判定下一個病人模塊的界面可以簡化:不用傳遞BN(床位號)??紤]到“讀取數(shù)據(jù)模塊的篇幅可能過大,可以抽出一個模塊“由PN查BN供它調(diào)用。這樣,結(jié)構(gòu)圖的有關(guān)局部如圖7.18所示。圖7.17 改進的結(jié)構(gòu)圖(1) 在此之前,“讀取數(shù)據(jù)模塊是根據(jù)床位號讀數(shù)據(jù)。作了這個改動之后,那么是根據(jù)病人號讀數(shù)據(jù)。因此,該模塊的名字改為“采集病人數(shù)據(jù)更好。在這個模塊中,隱含一段根據(jù)床位號從監(jiān)護設(shè)備讀入相應(yīng)因素的程序。這段程序?qū)υO(shè)備維修人員可能有用。他

37、們關(guān)心的主要是設(shè)備情況,而不是某個病床上是否有人、這個病人是誰。因此,把這段程序抽出來單獨成一個模塊更好,名字為“從床號讀數(shù)據(jù),那么圖7.18改寫為圖7.19。圖7.18 簡化模塊界面 圖7.19 增加公用模塊 (6) 假設(shè)由“檢查數(shù)據(jù)模塊直接調(diào)用“通報不平安因素,那么可減少模塊間的聯(lián)系:不用傳遞USF。這時“檢查數(shù)據(jù)的名字改為“報告不平安因素更為恰當。結(jié)構(gòu)圖的有關(guān)部份如圖7.20所示。圖7.20 減少模塊間的聯(lián)系 (7) “從床號讀數(shù)據(jù)調(diào)用“通報設(shè)備故障可能發(fā)生這種情況:在某設(shè)備維修期間,這個程序可能重復(fù)報告該設(shè)備故障。這令人生厭。假設(shè)改由它的上級模塊調(diào)用,會更靈活。這有典型意義:假設(shè)一個模

38、塊檢測錯誤后,一方面要報告錯誤信息,一方面又要向上層報告信息,這時由它的上層模塊決定是否報告錯誤信息更靈活、更清楚,見圖7.21。 (8) 考慮到無論是通報設(shè)備故障,還是通報不平安因素,都要打印一些信息,因此可以再抽出一個“寫一行模塊給護理站,供兩個模塊調(diào)用??紤]到“通報不平安因素模塊可能比較大,那么抽出一個模塊:“生成一行不平安因素。經(jīng)過上面這些改進后的結(jié)構(gòu)圖如圖7.21所示。圖7.21 改進的結(jié)構(gòu)圖(2) 在這個例子中,用到以下一些技巧: 減少模塊間的聯(lián)系,其中用得最多的是減少傳遞的參數(shù),尤其注意減少控制信息的傳遞; 消除重復(fù)功能; 消除“管道性模塊; 考慮將來可能發(fā)生的變化; 控制模塊的

39、大小。一般認為一個模塊在50100個語句為宜,過大的模塊可按功能分解出下級模塊,過小的模塊可適當合并;盡可能從整個結(jié)構(gòu)圖出發(fā)考慮;初始結(jié)構(gòu)圖中不滿足系統(tǒng)說明書的地方,在改進過程中完善。 7.3 從數(shù)據(jù)流圖導(dǎo)出結(jié)構(gòu)圖 結(jié)構(gòu)化系統(tǒng)設(shè)計方法與結(jié)構(gòu)化系統(tǒng)分析有著密切的聯(lián)系。在系統(tǒng)分析階段,我們用結(jié)構(gòu)化分析方法獲得用DFD等工具描述的系統(tǒng)說明書。設(shè)計階段,我們那么以DFD為根底設(shè)計系統(tǒng)的模塊結(jié)構(gòu)。本節(jié)討論如何從數(shù)據(jù)流圖導(dǎo)出初始結(jié)構(gòu)圖。 數(shù)據(jù)流圖有兩種典型的結(jié)構(gòu):變換型(transform)結(jié)構(gòu)和事務(wù)型(transaction)結(jié)構(gòu)。這兩種結(jié)構(gòu)可以分別通過變換分析和事務(wù)分析方法導(dǎo)出標準形式的結(jié)構(gòu)圖。這些方

40、法都是先設(shè)計結(jié)構(gòu)圖的頂端主模塊,然后自頂向下逐步細化,得到滿足數(shù)據(jù)流圖要求的系統(tǒng)結(jié)構(gòu)。 7.3.1 變換分析 變換結(jié)構(gòu)是一種線性結(jié)構(gòu)。它明顯地分成邏輯輸入、主加工和邏輯輸出三局部。圖7.22(a)是一個典型的例子。變換分析(transform analysis)過程可以分為三步:圖7.22 變換分析 找出主加工、邏輯輸入和邏輯輸出局部; 設(shè)計頂層模塊和第一層模塊; 設(shè)計中、下層模塊。 下面分別討論。 1. 找出系統(tǒng)的邏輯輸入、主加工和邏輯輸出局部 如果設(shè)計人員經(jīng)驗豐富,又熟悉系統(tǒng)說明書,那么容易確定系統(tǒng)的主加工局部。例如,幾股數(shù)據(jù)流的集合處往往就是系統(tǒng)的主加工局部。假設(shè)一時不能確定哪是主加工局

41、部,可以用下面的方法先確定哪些數(shù)據(jù)流是邏輯輸入、哪些數(shù)據(jù)流是邏輯輸出。 從物理輸入端開始,一步步向系統(tǒng)的中間移動,直至分析到這樣一個數(shù)據(jù)流:它已不能再被看作系統(tǒng)的輸入,那么它的前一個數(shù)據(jù)流就是系統(tǒng)的邏輯輸入。在圖7.22(a)中,從“原始數(shù)據(jù)這一數(shù)據(jù)流開始向中間移動,逐個分析數(shù)據(jù)流,發(fā)現(xiàn)數(shù)據(jù)流“P3P4不能再被理解為系統(tǒng)的輸入了。因此,數(shù)據(jù)流“P2P3是邏輯輸入。 同理,從物理輸出端開始,逆數(shù)據(jù)流方向向中間移動,可以確定系統(tǒng)的邏輯輸出。 介于邏輯輸入、邏輯輸出之間的加工就是主加工。圖7.22(a)中的處理框P3就是主加工。 當然,實際的數(shù)據(jù)流圖往往比這個例子復(fù)雜,輸入、輸出數(shù)據(jù)流都可能有多個,

42、這時,需要對每個輸入、輸出數(shù)據(jù)流逐個進行分析,確定相應(yīng)的邏輯輸入、邏輯輸出。處于這些邏輯輸入、邏輯輸出之間的處理框就是主加工。主加工可能包括數(shù)據(jù)流圖中的多個處理框。 從上面的分析過程可以看出,邏輯輸入、邏輯輸出的劃分涉及對數(shù)據(jù)流的理解。各人的理解不同,結(jié)果就有差異,但一般出入不會太大。 2. 設(shè)計頂層模塊和第一層模塊 找到主加工之后,遵照“自頂向下,逐步加細的原那么,設(shè)計各層的模塊。每創(chuàng)立一個模塊必須確定該模塊的外部特征:模塊的功能及與其他模塊的界面(調(diào)用時傳送的信息);為每個模塊起一個名字,這個名字應(yīng)當恰如其分地反映出這個模塊的功能。 系統(tǒng)的主加工就是系統(tǒng)的頂層模塊,其功能就是整個系統(tǒng)的功能

43、。 第一層模塊按輸入、變換、輸出等分支來處理:為每一個邏輯輸入設(shè)計一個輸入模塊,其功能是為頂層模塊提供相應(yīng)的數(shù)據(jù);為每一個邏輯輸出設(shè)計一個輸出模塊,它的功能是輸出頂層模塊的輸出信息;為主加工設(shè)計一個變換模塊,它的功能就是將邏輯輸入變換成邏輯輸出。第一層模塊與頂層模塊之間傳送的數(shù)據(jù)應(yīng)該同數(shù)據(jù)流圖相對應(yīng)。 圖7.22(a)有一個邏輯輸入,一個邏輯輸出,所以對應(yīng)的結(jié)構(gòu)圖第一層模塊共三個,即寬度為3。如圖7.22(b)所示。 3. 設(shè)計中、下層模塊 對輸入、變換、輸出模塊逐個分解,便可得到初始結(jié)構(gòu)圖。 輸入模塊為系統(tǒng)提供邏輯輸入,一般要進行變換,先確定實現(xiàn)最后變換的變換模塊。這個變換模塊顯然又需要某些

44、輸入,對每個這樣的輸入,對應(yīng)一個新的輸入模塊。用類似方法依次分解下去,直到最終的物理輸入為止。 對輸出模塊的分解與上面的方法相似。 對變換模塊的分解,目前還沒有像上面那樣的歸納出的方法,我們只能通過研究數(shù)據(jù)流圖中相應(yīng)加工的組成情況,應(yīng)用7.2節(jié)介紹的耦合、內(nèi)聚等概念,得到好的分解。 與圖7.22(a)相應(yīng)的結(jié)構(gòu)圖如圖7.22(b)所示。 回憶一下節(jié)“病人監(jiān)護系統(tǒng)這個例子,有助于我們理解這里介紹的方法。這個系統(tǒng)的數(shù)據(jù)流圖如圖7.23所示。圖7.23 病人監(jiān)護系統(tǒng)數(shù)據(jù)流圖 “合理數(shù)據(jù)可以看作是這個系統(tǒng)的邏輯輸入,也是系統(tǒng)的邏輯輸出。因此,這個系統(tǒng)沒有主加工。由此設(shè)計出系統(tǒng)結(jié)構(gòu)圖的頂層模塊和第一層模

45、塊,如圖7.24所示。進一步分析便可得到如圖7.21所示的結(jié)構(gòu)圖。由此可見由數(shù)據(jù)流圖出發(fā),采用變換分析的方法得到的結(jié)構(gòu)圖比采用直觀理解的方法得到的結(jié)構(gòu)圖(圖7.15)要好得多。圖7.24 病人監(jiān)護系統(tǒng)結(jié)構(gòu)圖 7.3.2 事務(wù)分析 圖7.25是事務(wù)型結(jié)構(gòu)的例子。在這種結(jié)構(gòu)中,某個加工將它的輸入別離成一串平行的數(shù)據(jù)流,然后分別執(zhí)行后面的某些加工。對于這種類型的數(shù)據(jù)流圖,可以通過事務(wù)分析(transaction Analysis)得到相應(yīng)的結(jié)構(gòu)圖。 事務(wù)分析也是按“自頂向下,逐步細化的原那么進行的。先設(shè)計主模塊,其功能就是整個系統(tǒng)的功能。下面有一個“分析模塊和“調(diào)度模塊。前者分析事務(wù)的類型,后者根據(jù)

46、不同的類型調(diào)用相應(yīng)的下層模塊。這樣得到與圖7.25相應(yīng)的結(jié)構(gòu)圖,如圖7.26所示。這里作用范圍可能在控制范圍之外,從而產(chǎn)生控制耦合。對于不太復(fù)雜的系統(tǒng),可以通過在主模塊判別事務(wù)類型來解決這一問題。對于復(fù)雜的問題,還得分開設(shè)模塊。圖7.25 事務(wù)型結(jié)構(gòu) 圖7.26 事務(wù)分析 前面我們分別討論了變換分析和事務(wù)分析。在實際應(yīng)用中,這兩種分析方法往往交替使用。數(shù)據(jù)流圖的某一個局部可能是變換型,另一個局部可能是事務(wù)型,如此等等。這時,一般以變換分析為主,輔之以事務(wù)分析。各個系統(tǒng)有不同的特點,初始結(jié)構(gòu)圖的設(shè)計方法也不同。但凡滿足系統(tǒng)說明書要求的結(jié)構(gòu)圖都可以作為初始結(jié)構(gòu)圖。這里稱之為初始結(jié)構(gòu)圖,是因為數(shù)據(jù)流

47、圖并沒有完全反映出用戶的要求(如查詢要求、控制流等),因此,按數(shù)據(jù)流圖導(dǎo)出的結(jié)構(gòu)圖還要參照小說明、查詢分析等文檔進行調(diào)整。 7.3.3 數(shù)據(jù)流圖層次的轉(zhuǎn)換 數(shù)據(jù)流圖是分層次的,當我們對某一層數(shù)據(jù)流圖進行變換分析或事務(wù)分析得出相應(yīng)的模塊結(jié)構(gòu)圖之后,還必須轉(zhuǎn)換它下一層的數(shù)據(jù)流圖。如圖7.27所示,如果處理框P1.4對應(yīng)模塊M32,那么P1.4進一步分解的處理框應(yīng)轉(zhuǎn)換成M32的下層模塊。 作為一個練習,建議讀者根據(jù)上一章給出的“學習成績管理的數(shù)據(jù)流圖,畫出對應(yīng)的初始結(jié)構(gòu)圖,并根據(jù)這兩節(jié)的內(nèi)容,優(yōu)化你的初始結(jié)構(gòu)圖。圖7.27 數(shù)據(jù)流圖的層次與模塊結(jié)構(gòu)7.4 一體化設(shè)計方法 結(jié)構(gòu)化設(shè)計方法也有明顯的缺乏

48、。系統(tǒng)的總體設(shè)計應(yīng)包括程序結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)兩個方面,但傳統(tǒng)的結(jié)構(gòu)化設(shè)計只考慮程序結(jié)構(gòu)方面,而進行數(shù)據(jù)結(jié)構(gòu)方面的設(shè)計需要參考其他方法。事實上,關(guān)于數(shù)據(jù)庫設(shè)計的許多信息在系統(tǒng)分析階段已經(jīng)得到,但沒有充分利用。因此,在系統(tǒng)分析階段與系統(tǒng)設(shè)計階段之間存有“空隙,沒有很平滑地由前一階段過渡到后一階段。 一體化方法對傳統(tǒng)的結(jié)構(gòu)化方法做了改進,集功能分析、過程設(shè)計、數(shù)據(jù)庫設(shè)計為一體,充分利用利用系統(tǒng)分析的結(jié)果,完成系統(tǒng)功能結(jié)構(gòu)的設(shè)計和數(shù)據(jù)庫設(shè)計,填補兩個開發(fā)階段之間的空隙。7.4.1 根本概念1初等功能 在數(shù)據(jù)流圖中,需要再分解為子功能稱為一般功能,不需要再分解的功能稱為初等功能。與初等功能聯(lián)系的數(shù)據(jù)流稱為初

49、等數(shù)據(jù)流。2選單樹 在一個規(guī)模較大的系統(tǒng)中,需要一系列的屏幕選單引導(dǎo)用戶選擇需要系統(tǒng)完成的功能。這些選單是按層次組織起來的,稱為選單樹。從用戶角度看,選單樹就是系統(tǒng)的總體結(jié)構(gòu)。3事務(wù) 事務(wù)是信息系統(tǒng)可獨立完成的一項業(yè)務(wù)或活動。在數(shù)據(jù)流圖中,一項事務(wù)包含由數(shù)據(jù)流鏈接的一些根本功能、與這些根本功能聯(lián)系的數(shù)據(jù)存儲和外部實體。 信息系統(tǒng)由一系列事務(wù)組成。系統(tǒng)的所有事務(wù)構(gòu)成信息系統(tǒng)內(nèi)部的總體結(jié)構(gòu)。7.4.2 選單樹初步設(shè)計 選單樹設(shè)計的目標,是建立與系統(tǒng)功能相應(yīng)的層次選單。選單樹的設(shè)計分兩階段進行:第一階段,從DFD導(dǎo)出一個初始選單樹;第二階段,在事務(wù)設(shè)計之后,修改、完善選單樹。 為了設(shè)計初始選單樹,需

50、要從頂層數(shù)據(jù)流圖開始,自頂向下考查所有數(shù)據(jù)流圖。為便于對照檢查,選單中各行的標號和標題,暫時用對應(yīng)功能的標號和標題說明。在優(yōu)化、完善選單樹時,再給出更恰當?shù)臉颂柡蜆祟}。7.4.3 事務(wù)設(shè)計 一項事務(wù)由數(shù)據(jù)流鏈接的幾個初等功能及有關(guān)的數(shù)據(jù)存儲、外部實體構(gòu)成。其中有一個初等功能是該事務(wù)的觸發(fā)者,這可以從初始選單中找到標有“T。由此出發(fā),沿或逆數(shù)據(jù)流找下一個初等功能,依此下去,直到進入數(shù)據(jù)存儲或外部實體,便可找到一項事務(wù)的所有成分。這個過程有可能由一張數(shù)據(jù)流圖跨越到其他數(shù)據(jù)流圖上。初始選單樹中所有標有“T的行都完成這種過程后,便可找出系統(tǒng)的全部事務(wù)。 事務(wù)設(shè)計可能影響到數(shù)據(jù)流圖和初始選單樹。所以,在

51、事務(wù)設(shè)計之后,要對選單樹進行必要的整理和完善。第一 消除所有蛻化選單屏幕,假設(shè)這一行前標有“T,那么在其父選單的相應(yīng)行前標以“,表示該行是“準選擇行;第二適當改變各行的標號、標題,使之意思更明確。7.5 代 碼 設(shè) 計 7.5.1 代碼的作用 代碼是用來表征客觀事物的一個或一組有序的符號,它應(yīng)易于計算機和人識別與處理。代碼也簡稱為“碼。 編碼就是用數(shù)字或字母代表事物。編碼的歷史可以追溯到古代。從古代常用來傳遞信息的煙信號直到現(xiàn)代的電傳打字機,沒有代碼是難以想象的。這個問題過去不太受重視,今天卻成了信息技術(shù)的中心問題之一,成為現(xiàn)代化管理的重要根底。通過編碼,建立統(tǒng)一的經(jīng)濟信息語言,有利于提高通用

52、化水平,使資源共享,到達統(tǒng)一化;有利于采用集中化措施以節(jié)約人力,加快處理速度;有利于檢索方法的統(tǒng)一。下面具體介紹代碼的功能。 1. 鑒別功能 這是代碼最根本的特性。任何代碼都必須具備這種根本特性。在一個信息分類編碼標準中,一個代碼只能惟一地標識一個分類對象,而一個分類對象只能有一個惟一的代碼。 2. 分類 當按分類對象的屬性(如工藝、材料、用途等)分類,并分別賦予不同的類別代碼時,代碼又可以作為分類對象類別的標識。這是利用計算機進行分類統(tǒng)計的根底。 3. 排序 當按分類對象產(chǎn)生的時間、所占空間或其他方面的順序關(guān)系分類,并賦予不同的代碼時,代碼又可以作為區(qū)別分類對象排序的標識。 4. 專用含義

53、當客觀需要采用一些專用符號時,代碼可提供一定的專門含義,如數(shù)學運算的程序,分類對象的技術(shù)參數(shù)、性能指標等。 7.5.2 代碼的種類 代碼的種類如圖7.39所示。圖中列出了最根本的代碼。實際應(yīng)用中,常常根據(jù)需要采用兩種或兩種以上根本代碼的組合。下面介紹幾種最常用的代碼。圖7.39 代碼的種類 1. 順序碼 按圖7.39的分類,順序碼是一種無實義代碼。這種代碼只作為分類對象的惟一標識,只代替對象名稱,而不提供對象的任何其他信息。 順序碼是一種最簡單、最常用的代碼。這種代碼是將順序的自然數(shù)或字母賦予分類對象。例如“人的性別代碼(GB226180)規(guī)定:1為男性,2為女性。 順序碼的優(yōu)點是代碼簡短,使

54、用方便,易于管理,易添加,對分類對象無任何特殊規(guī)定。缺點是代碼本身沒有給出對象的任何其他信息。通常非系統(tǒng)化的分類對象常采用順序碼。 2. 矩陣碼 矩陣碼是一種邏輯碼。所謂邏輯碼,是按照一定的邏輯規(guī)那么或者程序算法編寫的代碼。矩陣碼就是建立在兩維空間x、y坐標根底上的代碼。代碼的值是通過坐標的數(shù)值構(gòu)成的。 3. 自檢碼 自檢碼由代碼本體局部和一個附加碼組成。附加碼用來檢查代碼的錄入和轉(zhuǎn)錄過程中是否有過失。附加碼也叫校驗碼,它和代碼本體局部有某種惟一的關(guān)系,它是通過一定的數(shù)學算法得到的。關(guān)于代碼校驗方法在后面的節(jié)介紹。 4. 系列順序碼 系列順序碼是排序碼的一種。排序碼是把對象按預(yù)先選擇的某種順序

55、排列,分別賦予代碼。 系列順序碼是一種特殊的順序碼。它將順序代碼分為假設(shè)干段并與分類對象的分段一一對應(yīng),給分類對象賦予一定的順序代碼。 例如“國務(wù)院各部、委、局及其他機構(gòu)名稱代碼(GB4657-84)采用的就是系列順序碼,用三位數(shù)字表示一個機構(gòu),第一位數(shù)字表示類別標識,第二、三位數(shù)字表示該機構(gòu)在此類別中的數(shù)字代碼,如300399為國務(wù)院各部代碼,700799為全國性人民團體代碼。 這種代碼的優(yōu)點是能表示一定的信息屬性,易于添加;缺點是空碼較多時,不便于機器處理,不適用于復(fù)雜的分類體系。 5. 層次碼 層次碼是按分類對象的附屬層次關(guān)系作為排列順序的一種代碼。代碼分為假設(shè)干層,并與對象的分類層次對

56、應(yīng)。代碼左端為高位層次代碼,右端為低位層次代碼。每個層次的代碼可采用順序碼或系列順序碼。 例如“國民經(jīng)濟行業(yè)分類和代碼(GB475484)采用三層的層次碼。第一、二、三層代碼分別代表大類、中類、小類,其結(jié)構(gòu)如下: 層次碼有著廣泛的應(yīng)用。其優(yōu)點是能明確標出對象的類別,有嚴格的隸屬關(guān)系,代碼結(jié)構(gòu)簡單,容量大,便于機器匯總。但是,當層次較多時,其彈性較差。 7.5.3 代碼的類型 代碼的類型指代碼符號的表示形式,一般有數(shù)字型、字母型、數(shù)字字母混合型。 數(shù)字型代碼是用一個或多個阿拉伯數(shù)字表示的代碼。這種代碼結(jié)構(gòu)簡單,使用方便,也便于排序,易于推廣。這是目前各國普遍采用的一種形式,如前面提到的“人的性別

57、代碼、“國民經(jīng)濟行業(yè)分類和代碼等國家標準都是采用數(shù)字碼。這種代碼的缺點是對象特征的描述不直觀。 字母型代碼是用一個或多個字母表示的代碼。例如,鐵道部制定的火車站站名字母縮寫碼:BJ代表北京,HB代表哈爾濱。這種碼的優(yōu)點是便于記憶,人們有使用習慣。另外,與同樣長度的數(shù)字碼相比,這種代碼容量大得多。一位數(shù)字最多可表示10個類目,而一位字母可表示26個類目。其缺點是不便于機器處理。特別是編碼對象多、更改頻繁時,常會出現(xiàn)重復(fù)和沖突。因此,字母型代碼常用于分類對象較少的情況。 混合型代碼是由數(shù)字、字母、專用符號組成的代碼。這種代碼根本上兼有前兩種代碼的優(yōu)點。但是代碼組成形式復(fù)雜,計算機輸入不便,錄入效率

58、低,錯誤率高。 綜上所述,三種類型的代碼各有所長,各有所短,使用時應(yīng)根據(jù)使用者的要求,信息量的多少,信息交換的頻度,使用者的習慣等各方面綜合考慮,選用適宜的代碼類型。 7.5.4 代碼校驗方法 代碼是數(shù)據(jù)的重要組成局部,它的正確性將直接影響系統(tǒng)的質(zhì)量。當人們抄寫、錄入時,發(fā)生錯誤的可能性很大。如抄寫錯(把1234寫成1235)、移位錯(把1234記為1243)、隔位移位錯(把1234記為1432)等等。因此,為了驗證輸入代碼的正確性,就要在代碼本體的根底上,再外加校驗碼,使它成為代碼的一個組成局部。這就是前面介紹的自檢碼。 校驗碼是根據(jù)事先規(guī)定好的數(shù)學方法及代碼本體計算出來的。當自檢碼輸入計算

59、機后,計算機按照同樣的數(shù)學方法,根據(jù)代碼本體進行計算,將結(jié)果與校驗位比較,檢驗輸入的代碼是否正確。 校驗碼的生成過程如下: (1) 對代碼本體的每一位加權(quán)求和: 設(shè)代碼本體為C 1C 2C n,權(quán)因子為P 1P 2P n,加權(quán)求和得: S=C i P i 其中,權(quán)因子可取自然數(shù)1、2、3、,幾何級數(shù)2、4、8、16、32、,質(zhì)數(shù)2、3、5、7、11、。 (2) 以模除和得余數(shù): R=S mod M 其中,R表示余數(shù),表示模數(shù),可取M=10,11等。 (3) 模減去余數(shù)得校驗位: C n+1 =M-R 例如,代碼本體為123456,權(quán)為173173,模為10,那么S=11+27+33+41+57

60、+63=81,R=81 mod 10=1,校驗位為:10-1=9。 所以自檢碼為1234569,其中9為校驗位。 當自檢碼C 1 C 2 .C nC n+1 (其中C n+1為校驗位)輸入計算機后,對C 1 C 2 .C n 分別乘以原來的權(quán),C n+1乘以,把它們相加后所得的和被模除。假設(shè)余數(shù)為零,那么該代碼一般說來是正確的,否那么輸入有錯。 在這種方法中,權(quán)和??梢杂卸喾N取法。表7.1列出了一些權(quán)和模的檢錯率。 表7.1 不同權(quán)和模的檢錯率 模權(quán)抄寫錯檢錯率易位錯檢錯率隔位易位錯檢錯率隨機錯檢錯率1010101111111,2,1,2,1,21,3,1,3,1,37,6,5,4,3,29,

溫馨提示

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

評論

0/150

提交評論