详细设计工具之盒图(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;