纳西-施奈德曼图

纳西-施奈德曼图（，NSD），簡稱NS圖或盒圖，是結構化編程中的一種Hans-Georg Fill (2009). Visualisation for Semantic Information Systems. p.32。NS圖是在1972年由及其學生提出。Ben Shneiderman (2003). A short history of structured flowcharts (Nassi-Shneiderman Diagrams). Webdoc draft: May 27, 2003. (Source )。NS圖類似流程圖，但所不同之處是NS圖可以表示程式的結構Rolf Isermann (1988). Automatic Control: Selected papers from the triennial world congress of the International Federation of Automatic Control : Munich, Federal Republic of Germany, 27–31 July 1987, Volume 10;Volume 14. p.89。DIN 66261是NS圖的相關標準。

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

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

 圖示 
 程序方塊 
程序方塊表示不需再分解的基本步驟，當流程進行到一程序方塊時，會進行程序方塊中的動作，然後移至下一個方塊。

 分支方塊 
分支方塊可分為二種，第一種是簡單的真/假分支方塊，對應if指令，會有二個對應的路徑，根據條件是否成立，決定後續執行的程式。

第二種是多重分支方塊，當使用類似C語言的switch指令，依運算式結果要從三個或三個以上的路徑中選擇一個時使用，此方塊一般會有許多對應的選項和其對應的子程序。

 測試迴圈方塊 
測試迴圈方塊允許程式執行一個或一組特定程序，一直到一特定條件滿足為止。測試迴圈方塊可分為二部份：左側長條狀部份和方塊上方（或下方的）的測試條件部份相連辺，測試迴圈方塊內部的方塊則是迴圈中可能要執行多次的程序。

測試迴圈方塊可分為二種：先測試的迴圈方塊及後測試的迴圈方塊。二者的差異是條件判斷次序的先後。在先測試的迴圈方塊中，在執行迴圈前會先判斷特定條件是否成立，若成立，才執行迴圈內的程序，之後再重新判斷條件是否成立，若成立，再執行迴圈內的程序......，只要特定條件不成立，就結束迴圈內的程序，繼續執行後續的程序。由於在迴圈開始時就判斷條件是否成立，有可能在迴圈內程序完全未執行過的情形下就結束迴圈，繼續執行後續程序。

後測試的迴圈方塊會先執行一次迴圈內的程序，之後判斷特定條件是否成立，若成立，才執行迴圈內的程序......。後測試的迴圈方塊中，迴圈內的程序至少會被執行一次。

参见
DRAKON

參考資料

 外部連結 

A short history of structured flowcharts (Nassi–Shneiderman Diagrams), by Ben Shneiderman
Atego's BlueRiverX32 – Nassi–Shneiderman development environment for C and C++
Structorizer – Nassi–Shneiderman diagram-editor for Linux, Mac OS X & Microsoft Windows, released under the GNU General Public License
Struktograaf – Nassi–Shneiderman diagram-editor for Microsoft Windows, proprietary application (Dutch website)

Category:计算机编程
Category:图表