浙江大学 SRTP 论文 汤雪华
生科学研究能力、创新能力和实践动手能力;接触和掌握学科发展前沿信息。本文作为一
篇 SRTP 论文,我认为最重要的是要体现 SRTP 的宗旨。也就是说,应该把自己对某个问题
领域的研究及取得的成果进行论述。简而言之,就是要清楚的说明自己做了哪些研究,是
怎么解决问题的。所以,本文在论述的过程中,更多的篇幅是讲述如何思考问题和解决问
题,而不是介绍什么是.Net,或者其它方面的技术实现问题。
四. 问题的提出
1. 演示界面如何设计;
2. 算法在内部如何表示和管理;
3. 怎样保存一个算法的状态;
4. 如何表示及遍历图形对象;
5. 如何实现运行、单步、暂停、运行到断点、恢复、设置断点这些功能;
6. 怎样支持同时打开多个不同的算法,并且可以很方便的切换算法进行演示;
7. 如何获取和保存算法演示的数据;
五. 面向对象分析与设计(OOA/D)
5.1 界面设计
现在的任务是要用动画来演示算法的执行,那么有哪些信息需要显示的呢?首先,动
画
效果是不能缺少的,而且这些动画必须随着算法当前状态的改变而改变。动画可能有矩形
的、圆形的、柱形的、贝赛儿曲线、箭头等等。用控件来显示显然不行,所以必须自行绘
制所有这些图形。在.Net 平台下,利用 GDI+技术可以方便的绘制任何形状的图形。图形绘
制出来该怎样持久保存呢?至少有两种方法可以做到:1)重写 Control 的 OnPaint 方法,
任何绘图逻辑放在该方法中都能使绘制出来的图形保持持久;2)在一幅位图上执行绘图操
作,然后将该位图显示在动画区域;对比这两种方法并经过试验之后,决定采用后者,因
为后者效果更好,且实现更灵活。还有一点,图形应该在什么地方显示呢?这个并不是关
键,只要能在其上绘制图形的任何可视控件都可以。确定了某个这种可视控件并使其实现
面板接口 IPadContent,这样就设计好了一个动画面板,最终该面板可以被 GUI 子系统管理,
实现如显示、隐藏、停靠、浮动等功能。
最好还要有一些变量值的显示,这些变量是关于当前演示算法的关键变量,应该能够
实时跟踪这些变量的值。另外,除了显示一些变量的值之外,最好还可以显示一些关于动
画状态的信息,并且可以修改这些信息以便调整动画的显示效果。这里要注意的一个问题
是要实时显示,即当算法中某个关键变量的值改变的时候,在显示区域也必须相应的改变。
在.Net 类库中有一个 PropertyGrid 控件,利用该控件可以方便的显示某个对象的所有公共属
性和事件,并且该控件可以引发事件。所以,我们可以通过为每个算法定义一个状态对象,
然后使该对象和 PropertyGrid 控件绑定,这样就可以实现上面的目的了。
那么算法如何显示?这里决定用文本编辑器子系统来显示算法,原因是:1)关键字可
以高亮度显示;2)可以设置断点;3)可以任意调整字体大小或改变字体颜色和背景色;
4)可以方便的在内部选中某一行;5)可以使文本只读;这个文本编辑器作为一个控件,
可以方便的被 GUI 子系统管理。
5.2 算法表示和管理
首先分析单个算法应该如何设计。一个算法应该至少有以下一些属性:当前行、断点
行
集合、结束行集合、变量状态、算法文件名(可能有多个算法文件,所以可能为一个字符
串数组)。除了这些属性之外,还必须具有一些方法用以实现如初始化算法、恢复算法到
当前状态、执行算法、更新算法状态等功能。每个算法都有这些基本的必须要实现的特性,
但每个算法的具体实现都不一样。那么应该怎么做才能为外界提供一个一致的接口而在内