大约 30 年前,MS 推出 VFP3。三十年弹指一挥间,但是仍旧有很多 foxer 对 OOP(面向对象) 这个概念懵懵懂懂。
OOP 是 VFP 中一个非常重要的概念。核心概念就是类和对象。而这些,在 VFP 中是天然存在的。
假设你完全不懂什么是 OOP,但是仍旧可以使用 VFP 编写可运行的应用程序。那么,你编写的每一个表单,就天然使用 OOP 技术(例如,新建一个表单,在属性窗口中查看 BaseClass 属性的值,它为 "Form"。所以,对于排斥 OOP 的一些伪 foxer,最好还是绕着走......)。是什么原因造成很多 foxer 对此毫无感觉的呢?我个人看法,也许是因为 VFP 的“集成度”太高了。它不像 C# 这样的后来者,都存储在可见的物理 dll 文件中(例如,C# 中的超类 Object 存储在 System.Runtime.dll 中,而 Form 类存储在 System.Windows.Forms.dll 中)。
所以,“类”隐藏在 VFP 中。而“对象”,也就是类实例,也就是应用程序中的各种可视/非可视的对象,就是一个个的按钮等控件,或者 timer 控件。
VFP 中一个强大的功能就是可以创建自定义类。如果你实在不会,可以通过菜单“文件”-“另存为类...”得到一个所谓的类“模板”。只要对 VFP IDE 不是特别的陌生,这一切都是自然而然的操作。
对于 VFP 类,除了有格式之分-- vcx 和 prg --之外,还有一个在常规 IDE 里无法实现的操作。例如,你创建了一个表单,而在表单中添加了一个可视/非可视对象,以一个按钮举例,你有时可能希望它能在设计时刻添加一个自定义方法,常规的 IDE 操作是无能为力的,但是可以通过在命令窗口执行一些特定的命令达到目的。但是,只有将其另存为"类",并使用类实例替换该按钮,所有的操作才能得以保存。因为这个步骤对于普通 foxer 来说有点过于玄幻,因为,我将其纳入了自己所写的代码重构工具中。某种意义上,它也可以作为创建自定义类的一个教学工具。
在 VFP 中,vcx 格式的类,可以通过类浏览器获得其 prg 格式的代码。尽管这个代码可能并不能“运行”。但是,如果你对其内容仔细琢磨一下的话,你会发现,它和现代语言的类定义,几乎没有任何特别区别。如果和 X# 的类定义语句比较的话,一模一样(除了创建基于 .NET Framework 类,但结构上,也几无分别)。因此,我才会强调,如果理解了 VFP 的 OOP,X# 的学习几乎无明显的学习曲线。
但是,仅仅掌握这些技术就足够了吗?
实质上,OOP 重要的不是技术,而是思想。
假设,在你的 VFP 应用中,每一个对象都是某个类的实例,那么。从技术上来说,这个应用就是使用各种各样的类“堆积”出来的。而这个过程,和儿时听说或者见过的玩具,积木,有什么特别的不同之处呢?
程序编写当然没有单纯的积木玩具那么简单,但是,在本质上,没有任何差别。某个位置,使用某块已有的“积木”。
因此,OOP 重要的是设计思维,而不是代码实现。这也是有些 foxer 写了 N 年代码,水平一直没有提高的根本原因之一。
OOP 设计思维的建立,不仅仅能更好的应用 VFP ,而且,对于现代绝大多数各种编程语言的学习,也是很好的基础。