软件的详细设计
详细设计工具盒图
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;