来源:网络 | 2007-3-23 | (有5070人读过)
大家随时随地都在用面向过程的方法设计程序,不过在这里我仍然要简单说一说面向过程的程序设计方法。虽然各种语言至少都是面向过程的(甚至宏汇编),但是我见到的一些源代码说明还有很多人并没有很好的利用面向过程的方法。举例来说,我见过很多类似这样的程序:
Option Explicit
Private Sub Form_Load()
If 出错 Then Unload 子窗体1: Unload 子窗体2: Unload 主窗体
End Sub
Private Sub Form_Paint()
If 出错 Then Unload 子窗体1: Unload 子窗体2: Unload 主窗体
End Sub
Private Sub 退出_Click()
Unload 子窗体1: Unload 子窗体2: Unload 主窗体
End Sub
对于这种程序的不厌其烦的拷贝大段程序,我认为非常不好,比如这时又有了一个“子窗体3”,又需要在每一个卸载程序的地方复制“Unload 子窗体3”,不只麻烦,还很容易出错,在大量的源代码前找出每一次这样的调用可不是一件容易的事!所以希望大家是这样调用这一段代码的:
Option Explicit
Private Sub Form_Load()
If 出错 Then 退出_Click
End Sub
Private Sub Form_Paint()
If 出错 Then 退出_Click
End Sub
Private Sub 退出_Click()
Unload 子窗体1: Unload 子窗体2: Unload 主窗体
End Sub
当然,如果大家仔细想一想,可能会发现这样写也不是最好的选择,最好有一种自动的办法可以实现这种效果,所以如果写成以下这样的话会更好:
Option Explicit
Private Sub Form_Load()
If 出错 Then 退出_Click
End Sub
Private Sub Form_Paint()
If 出错 Then 退出_Click
End Sub
Private Sub Form_Unload(Cancel As Integer)
Unload 子窗体1: Unload 子窗体2
End Sub
Private Sub 退出_Click()
Unload Me
End Sub
在这里,由主窗体的“Form_Unload”事件,我们知道主窗体正要被卸载,于是将子窗体一一卸载,这样,即使我们把“Form_Load”和“Form_Paint”中的“退出_Click”写成了“Unload Me”,这个程序也仍然是正确的,和上面两段程序执行的结果没有什么不同。也许有人会说,既然执行的结果一样,有什么必要一定用这一段程序,而不是第一段呢?是的,如果程序只是编到这里就结束了,而且永远不必再作修改或扩充,确实没有什么必要,但是我们编程序不大可能遇到这样的情况,修改和扩充简直是必须的,所以实际当中我们在编程中就要时刻注意程序的可修改性、可扩展性。而一直以来提倡的结构化、模块化就是提供这种性能的良策。正像上面的程序演示的那样,结构化、模块化就是要提取出很多调用的共同点,令其在同一个地方得到此功能,以后不管是排错或者扩充都只要修改一个地方就可以了。
好的,因为大家对面向过程的程序设计应该都很熟悉,我就只说这一点,事实上,我提出面向过程的意思,也是能提醒大家对结构化、模块化的关注,所以关于这一点就此打住。不过要提醒大家,这种“提取调用共同点”的能力很重要,特别是在进行面向对象的程序设计时。
|