|
“程序图型化表达”是世界上都在致力研究的一项技术,旨在提高程序的可读性。
日本日立公司提出过PAD图(Problem Analysis Diagram),国内对此有过一阵研究,但多少年过去了,至今没有看到相应的产品化软件。2000年4月,美国以CSD图(Control Structure Diagram)为表示形式的GRASP项目在网上公开发布。据网上介绍,该项目得到了美国国家科学基金会、美国太空总署、国防部研究开发署以及国防信息系统署的多项资助[6]。(见附图1)
比较而言,本公司研发和创立的SI-NS图及相应技术,无论从结构二维性、清晰性、信息完整性、空间效率、图形与其表达逻辑的一致性、可读可理解性、实际可用性等方面都要优于日本的PAD图和美国的CSD图。正如清华大学出版社“编译设计与开发技术”一书的编审委员会评价所说,“这项技术在国际上处于领先地位”。
1、比较SI-NS图与日本PAD图
笔者从严桂兰编著的《PAD与Turbo C程序设计》[5]任选了一题:求解一元二次方程根的C程序:
#include"stdio.h"
#include "math.h"
main()
{
float a,b,c,d,xl,x2,re,im;
do{
printf("Input three numbers:");
scanf ("%f%f%f",&a,&b,&c);
if(a!=0)
{
d=b*b-4*a*c;
if(d>=O)
{
xl=(-b+sqrt(d))/(2*a);
x2=(-b-sqrt(d))/(2*a);
printf("xl=%f x2=%f\n",xl,x2);
}
else
{
re=-b/(2*a);
im=sqrt (-d)/(2*a);
printf("re=%f im=%f\n",re,im);
}
}
}while(a! =0);
printf("program end !");
}
由C程序生成的PAD图如下。这里的字体较小,是因为原PAD图还要大,被缩小的缘故。
由同一个求解一元二次方程根的C程序生成的SI-NS图:
显然,SI-NS图在空间效率、图形与其表达逻辑的一致性、结构二维性、自上而下,一点进,一点出、信息完整性、实际可用性方面要优于PAD图。
2、比较SI-NS图与美国CSD图
以下左边是一个函数名Binary_Search执行二叉树搜索算法的C函数。右边是由GRASP生成的CSD图。据CSD的网站介绍,左边“虽然是一个缩排得很好,非常简单的C程序函数,但也不是一下子能看出函数内各个控制层次的。”而右边的CSD,“程序内各个控制层次一目了然。” [6]
以下是由同一个执行二叉树搜索算法的C函数程序生成的SI-NS图:
CSD图只是在原来的程序上勾画,仍然是一维的,仍然包含if、else等语法词汇。显然,SI-NS图在结构二维性、清晰性、自上而下,一点进,一点出、易读易理解性方面要优于CSD图。
3、SI-NS图的技术优势
SI-NS图相对于日本PAD图、德国NS图、美国CSD图的优势可以用表1概括为:
|