架构基础(Frameworks Fundamentals)
Windows编程很适合面向对象编程,通过建立封装通用Windows编程任务的类,一个程序员能编写出更多的产品。例如,当封装窗口不同任务的类建立以后,这个类就可以一遍一遍地应用,于是架构革命就开始了。
New Term:架构(framework)是一个类的集合,这些类可以通过封装常用编程技术简化Windows编程,架构也称为类库(class libraries),封装(Encapsulation)的意思是通过提供一个简化的接口,把一个复杂的编程任务简单化。
普通的架构有封装窗口、编辑框、列表框、图形操作、位图、滚动栏、对话框等类。
为什么如此重视架构?
其根本在于用架构使Windows编程比直接用C、汇编语言或Pascal语言更简便。例如用C++编写的加载和显示一个位图的代码多达50多行,代码看起来很吓人,而采用VCL实现等价的功能的代码:
Image.LoadFromFile('winnt.bmp');
由此看出你到底喜欢哪一种方式?甚至都不必知道这个代码到底干什么的就可以作出决定。VCL的版本更短,并且可读性更强。
架构隐藏了不必知道的具体细节,那个50多行的C++代码中包含的每一件事情在VCL代码中都在幕后完成了。当VCL工作时,不必知道幕后工作的每一个具体细节,所有要知道就是构成架构的对象,以及把它们应用到程序中。
一个好的架构要充分利用OOP,并且比其他的要利用的更好。Delphi中的Object Windows Library和Visual Component Library是面向对象编程的极好示例,它们为摆脱忙乱,集中精力完成重要的编程任务提供了恰到好处的抽象提升。
如果要使所有的东西都变得很容易的话,就一定要放弃一些东西,这时千真万确的。由架构编写的程序比用低级语言编写的程序要大而且要慢,这只是部分正确,由架构编写的应用程序不一定比其它语言编写的程序慢。当然,用面向对象语言有一些额外的内部开销,但绝大部分在一般的Windows程序中区别是不明显的。
初步趋向是由Delphi编写的程序比用诸如C等语言编写的程序要大。例如,假设一个简单的Windows程序,由C编写它是75KB,等价的程序用Delphi编写可能是250KB,这看起来好像区别很大,但这个例子只说明了一种最坏的情况,在很小的程序中,C应用程序与架构编写的Delphi应用程序其程序大小区别很大,但随着程序的规模增加和复杂化,这两者之间的区别就不太明显了。
程序大小不同的简单原因之一就是程序语言与面向对象语言之间的不同,面向对象语言(C++和Object Pascal)要为一些功能增加额外的开销,其性能诸如异常处理,运行时类型信息(RTTI)和其他OPP内容。其实代码大小的不同于Object Pascal提供的性能交换是值得的。
我也是很愿意牺牲一些代码规模的大小来换取Object Pascal和VCL提供的强大功能。换句话说,一般不愿意花一个月的时间去编写一个编译成可执行文件大小为100KB的Windows程序,而同样的程序在Delphi只需要两天时间,只是它编译出来的可执行文件大小为400KB,与节省开发时间相比,其结果的可执行文件大小并不重要。
用架构来引导面向对象编写和设计
如果把这种疯狂玩意就叫做Windows编程的话,那么实际上也就等于终止了窥视架构的源代码。迟早是要知道架构是怎么工作的。从VCL源代码中可以得到这种信息。
应该花一些时间来浏览一下VCL源代码,开始时可能有点令人生畏,但看了一会后,就会看懂设计者在做什么,不要低估自己,用所学的知识最大限度地理解Object Pascal,把一些复杂难懂的内容先放下来,等以后再说。
要注意VCL设计者是怎样在类中使用私有的、保护的和公用的,注意应该不让用户知道的内容是怎样从公众的视线中隐藏起来的。研究VCL源代码可以学会很多有关Object Pascal和面向对象设计方面的知识。