詳細設計工具之盒圖(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;