閱讀530 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【轉】數據流圖懂不懂?

原文鏈接:https://www.cnblogs.com/spring5/archive/2012/04/29/2485238.html


最近備戰軟考,複習到數據流圖,學習成果與大家分享。

 

數據流圖(Data Flow Diagram):簡稱DFD,它從數據傳遞和加工角度,以圖形方式來表達係統的邏輯功能、數據在係統內部的邏輯流向和邏輯變換過程,是結構化係統分析方法的主要表達工具及用於表示軟件模型的一種圖示方法。(百科)

 

談談我的一點理解

有時候我們要開發或者理解一個係統,總體的係統結構我們弄清楚了,但是細節上需要再深入,而數據流圖“自頂向下,由外到內,逐步細化”的思想就凸顯出很重要的作用,它可以作為我們係統分析的指導方法。

 

數據流圖分析關注的重點是數據,將麵向控製的信息作為數據進行處理,包括了係統的所有數據,能準確的抽象係統數據的流向和處理過程.概括的描述當數據在係統流程中流動和處理的移動變換過程;數據流圖分層進行分析,對頂層圖的分析可以發現是否有輸入信息或需要輸出的信息被遺漏,容易及早發現係統各部分的邏輯錯誤,也容易修正.每一層都明確強調“需要什麼”,“幹了什麼”“給出什麼”;

這樣逐層分解下去,係統被嚴密的展開,係統的框架就展現出來了.采用數據流圖進行分析,可以提高分析的可見性和可控性,更容易理解軟件要完成什麼功能,數據來源於哪裏,結果要輸出到哪裏等等,清晰明了。

 

下麵我們來看看數據流圖的組成,設計原則和應用


基本圖形符號


加工(數據處理):輸入數據在此進行變換產生輸出數據。加工對象為:數據結構或數據內容。

數據流:箭頭表示數據流向,作為加工之間傳輸數據的命名通道(數據流有名字),或數據存儲文件與加工之間的非命名通道(數據流沒名字,但其連接的加工和文件的名字,和流向可以確定其含義)。

 

同一個數據流圖上不能有同名的數據流,如果兩個以上的數據流指向一個加工,或是從一個加工中輸出兩個以上的數據流,這些數據流往往存在一定關係,如圖:


 

數據存儲文件:流向數據存儲的數據流可以理解為寫入文件或查詢文件,從數據存儲流出的數據流可以理解為從文件讀數據或得到查詢結果。

 

數據源點或終點:是係統外部環境中的實體,也稱外部實體。它們作為係統與係統外部環境的接口界麵,在實際問題中可能是人員、組織、其他硬件係統等。一般出現在頂層數據流圖中。

 

數據流圖的設計原則



下麵我們通過一些示例來說明這些設計原則

 

示例1


上圖違反了父圖與子圖的平衡原則

因為父圖中有提貨單輸出流,但子圖中沒有與這條輸出流相關的輸出流。

我們看兩者的輸入流,父圖的輸入流是訂貨單,而子圖的輸入流是數量,賬號,客戶,這是平衡的,因為子圖的三條輸入流是對父圖輸入流的分解,同樣子圖中的加工4.14.24.3也可以看成是對父圖加工4的分解,這符合自頂向下,逐層細化原則

 

示例2

下麵是一張有錯的數據流圖。


1)根據數據守恒原則,外部實體和外部實體,外部實體和數據存儲之間不能存在數據流,,存儲與存儲之間也不應該有數據流,數據流必須跟加工有關,沒有加工數據流不可能流來流去的。


2)對於加工,輸入是A,輸出還是A,也違反了數據守恒原則,輸入與輸出一樣,加工沒有作用。


3)對於加工,隻有輸入沒有輸出,違反了數據守恒原則。比如,人不可能隻吃飯,不大小便。嘿嘿



4)對於加工,隻有輸出沒有輸入,違反了數據守恒原則。比如,人不可能一直大小便,但不吃飯。嘿嘿

 

 

示例3


加工細節隱蔽原則說的是:在畫父圖時,隻需畫出加工和加工之間的關係,而不必畫出各個加工內部的細節,例如上麵的父圖中,並沒有畫出加工1的內部細節

再進行對加工1進行細化的時候,我們就應該畫出它的內部細節,如第二個圖。

 

簡化加工之間的關係:加工間的數據流越少,各個加工就越相對獨立,耦合越低,所以應盡量減少加工間輸入/輸出數據流的數目。

 

均勻分解:不要出現,一些加工分解了10層,而另一些加工分解了3層這樣的情況

 

忽略枝節:暫時不要考慮一些例外情況,出錯處理等枝節性問題。

 

表現的是輸入流而不是控製流:不要和程序流程圖混淆,數據流圖,強調從數據加工的角度來描述係統,自然是數據流。


這些原則中,最重要的當屬:保持父圖與子圖平衡,保持數據平衡,加工細節隱蔽

 一般從這三個原則來考查一張數據流圖是否正確。

  

數據字典

 

數據字典的就是對數據流圖中出現的所有被命名的圖形元素在數據字典中作為一個詞條加以定義,使每個圖形元素的名稱都有一個確切的解釋。

 

在對數據流和數據文件詞條進行描述時可能包含一定的數據結構,對於數據結構的描述常用的是定義是。如下表

 

在數據字典中有4種類型的條目:

1、數據項條目:通常為數據項的值類型,允許的取值範圍等

2、數據流條目:給出某個數據流的定義,列出該數據流的各組成數據項。

3、文件條目:對文件的定義,列出期組成的數據項

4、加工條目:對每個不能再分解的加工做說明,包括加工的激發條件,加工的邏輯,優先級等等。

 

示例:

圖書管理係統中

查詢請求信息=[查詢讀者請求信息|查詢圖書請求信息]

讀者情況=讀者號+姓名+所在單位+{借書情況}

 

根據上麵的定義表,我們很容易看出這些條目的意思。

 

 

下麵我們來看一個數據流圖的綜合應用問題,這樣有助於我們理解數據流圖。

 

需求:






根據以上信息提出的幾個問題!希望對這幾個問題的解析,能加深大家對數據流圖的理解。




對於問題1:

我們前麵提到過,

可以通過數據流圖那三個重要設計原則(保持父圖與子圖平衡,保持數據平衡,加工細節隱蔽)來考查一張數據流圖是否正確。

1查看是否平衡,即子圖中的輸入流合輸出流和父圖是否對應;

2、查看數據守恒,處理查詢請求沒有輸入,登記讀者信息沒有輸出.

正確應該如紅色箭頭畫法。



對於問題2

1、首先我們看到對於加工2父圖和子圖是平衡的,所以,本題隻能是2.12.2或者他們和文件之間缺少數據流。

隻得根據需求描述去分析到底缺失哪些數據流。

 

根據在原需求中的


我們可以很輕鬆的判斷出缺少哪些數據流,如下圖紅色箭頭



對於問題3:這是一個數據字典的應用問題。



根據以上我們截取需求中的信息,,注意紅色部分,再結合我們開始介紹的數據字典定義符號的使用,即可很輕鬆解決這個問題。

管理工作請求單=[購入新書|讀者借書|讀者還書|圖書注銷]

入庫單=分類目錄號+書名+作者+價格+數量+購書日期。

 

 

數據流圖就到這了,我是懂了,不知道你懂了沒?

最後更新:2017-04-03 14:54:32

  上一篇:go Hadoop 集群介紹
  下一篇:go 在深入學習gnuradio之前你需要知道的