詳細設計工具之盒圖(N-S圖)

  • 2019 年 12 月 5 日
  • 筆記

軟件的詳細設計

詳細設計工具

盒圖

N-S圖,也被稱為盒圖或NS圖(Nassi Shneiderman圖)。是結構化編程中的一種可視化建模。1972年,美國學者I.Nassi 和 B.Shneiderman提出了一種在流程圖中完全去掉流程線,全部算法寫在一個矩形陣內,在框內還可以包含其他框的流程圖形式,即由一些基本的框組成一個大的框,這種流程圖又稱為N-S結構流程圖。

依從上到下的設計,待處理的問題會分解成一些較小的副程序,最後只有簡單的敘述及控制流程結構,NS圖對應了上述的思維,利用嵌套的方塊來表示副程序。NS圖中沒有對應Goto指令的表示,和結構化編程中不使用GOTO的理念一致。NS圖的抽象層次接近結構化的代碼,若程序重寫,NS圖就需重新繪製,不過NS圖在簡述程序及高級設計時相當方便。

NS圖幾乎是流程圖的同構,任何的NS圖都可以轉換為流程圖,而大部分的流程圖也可以轉換為NS圖。其中只有像Goto指令或是C語言中針對循環的break及continue指令無法用NS圖表示。

NS圖的特點:

1. 功能域(即一個特定控制結構的作用域)明確,可以從盒圖上一眼就看出來;

2. 不可能任意轉移控制;

3. 很容易明確局部和全局數據的作用域;

4. 很容易表現嵌套關係,也可以表示模塊的層次結構。

由於NS圖沒有箭頭,因此不允許隨意轉移控制。堅持使用NS圖作為詳細設計的工具,可以使程序員逐步養成用結構化的方式思考問題和解決問題的習慣。

N-S圖包括順序、選擇(CASE型是多分鐘選擇)和循環(一種是while一種是until)三種基本結構。

以C語言描述的程序為例:

A、Ai(i∈[1,n])、B和S分別是C語句段(由1-N條C語言語句組成);

P是邏輯表達式,T表示true,F表示false,即當邏輯表達式P的結果為true時,後繼程序執行A,否則B;

↓表示沒有語句;

WHILE重複型表示先對邏輯表達式P求值,為true時,執行S,否則跳出;

UNTIL重複型表示先執行S,然後在對邏輯表達式P求值,為true時,繼續運行S,否則跳出;

CASE型對應C語言中的Switch-Case情況,先計算邏輯表達式P,結果為1時執行A1,為2時執行A2,依次類推。

現需要一個能夠利用NS圖進行建模的工具,將某算法(如採用C語言描述)表示為NS圖。

【基本要求】

通過人機界面,能夠手工繪製包含順序型、選擇型的NS圖,為每個類型的NS圖可以輸入C語言源代碼文本,各類型的圖可以相互嵌套組合,並能夠將繪製好的NS圖轉換為C語言代碼描述的程序。

【擴展要求】

1. 支持WHILE型、UNTIL型和CASE型的繪製

2. 能夠保存繪製好的NS圖,並可以再次打開和重新編輯該NS圖

3. 能夠將C語言代碼描述的程序文本自動轉換為NS圖(對於學有餘力的同學,需要查閱一些編譯方面的知識)

【實現提示】

各個類型的圖之間是相互嵌套組合的,因此它們之間的嵌套關係需要進行存儲,不能丟失

實現將C語言轉換為NS圖時,可以利用開源的C語言的解析器(lexer和parser)將C語言程序文本轉換為文法樹,在文法樹的基礎上識別裏面各個表達式或語句來進行NS圖的生成。也可以自己編寫解析器(可以藉助flex+bison,ANTLR開源工具編寫),只要求支持必要的文法即可,無需支持C語言全集。

【檢查計劃】

第一次檢查:問題需求理解分析,系統的功能設計,包括:

數據結構設計;

程序結構原型;

第二次檢查:使用自帶的數據,演示系統的初步功能實現(代碼,測試數據);

第三次檢查:系統最終的全面檢查,包括:

文檔齊全;

根據測試數據,運行程序;演示時適當地講解,並且回答問題;

【舉個栗子】

盒圖(N-S圖):

PAD圖:

偽碼如下:

s1;    if (x<=5)        s2;  i: =1;    while(i>=3)    {         s3;         i:=i+i;    }    if(y<0)         s4;    else         s5;