按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
都可以看到(那是项目管理员自动为我们设定好的):
307
…………………………………………………………Page 370……………………………………………………………
第篇 欲善工事先利其器
第1章讨论console 程序时,我曾经说过,程序使用MFC 与否,关系到C runtime library
的单线程版或多线程版。是的,这项设定放在【General 】附页之中:
你在这里所做的设定,会自动影响项目所联结的C runtime library 的版本。
308
…………………………………………………………Page 371……………………………………………………………
3
浅出 MFC 程序设计
深入湷觥FC
2nd Edition
309
…………………………………………………………Page 372……………………………………………………………
MFC
第篇 湷觥 〕淌皆O計
310
…………………………………………………………Page 373……………………………………………………………
第5章 總觀Application Framework
第5章
总观 Application Framework
带艺术气息的软件创作行为将在Application Framework出现后逐渐成为工匠技术,
而我们都将成为软件IC装配厂里的男工女工。
但,不是亨利福特,我们又如何能够享受大众化的汽车?
或许以后会出现「纯手工精制」的软件,可我自己从来不嫌机器馒头难吃。
什么是 Application Framework?
还没有学习任何一套Application Framework 的使用之前,就给你近乎学术性的定义,我
可以想象对你而言绝对是「形而上的」(超物质的无形哲理),尤其如果你对对象导向
(Object Oriented )也还没有深刻体会的话。形而上者谓之道,形而下者谓之器,我想能
够舍器而直接近道者,几稀!但是,「定义」这种东西又似乎宜开宗明义摆在前头。我
诚挚地希望你在阅读后续的技术章节时能够时而回来看看这些形而上的叙述。当你有所
感受,技术面应该也进入某个层次了。
311
…………………………………………………………Page 374……………………………………………………………
第篇 湷觥 FC 程式設計
侯捷怎么说
首先我们看看侯捷在其无责任书评中是怎么说的:
演化(revolution)永远在进行,但这个世界却不是每天都有革命性 (revolution)的事物
发生。动不动宣称自己(或自己的产品)是划时代的革命性的,带来的影响就像时下满
街跑的大师一样使我们渐渐无动于衷( 大师不可能满街跑) ! 但是Application
Framework 的的确确在我们软件界称得上具有革命精神。
什么是Application Framework?Framework 这个字眼有组织、框架、体制的意思,
Application Framework不仅是一般性的泛称,它其实还是对象导向领域中的一个专有名
词。
基本上你可以说;Application Framework是一个完整的程序模型,具备标准应用软件所
需的一切基本功能,像是文件存取、打印预视、资料交换。。。,以及这些功能的使用接口
(工具栏、状态列、菜单、对话框)。如果更以术语来说,Application Framework 就是
由一整组合作无间的「对象」架构起来的大模型。喔不不,当它还没有与你的程序产生
火花的时候,它还只是有形无体,应该说是一组合作无间的「类别」架构起来的大模型。
这带来什么好处呢?程序员只要带个购物袋到「类别超级市场」采买,随你要买MDI 或
OLE 或 ODBC 或Printing Preview,回家后就可以轻易拼凑出一个色香味俱全的大餐。
「类别超级市场」就是C++ 类别库,以产品而言,在Microsoft 是MFC,在Borland
是OWL,在IBM 则是OpenClass。这个类别库不只是类别库而已,传统的函数库(C
Runtime 或Windows API)乃至于一般类别库提供的是生鲜超市中的一条鱼一支葱一颗
大白菜,彼此之间没有什么关联,主掌中馈的你必须自己选材自己调理。能够称得上
Application Framework 者,提供的是火锅拼盘(就是那种带回家通通丢下锅就好的那
种),依你要的是白菜火锅鱼头火锅或是麻辣火锅,菜色带调理包都给你配好。当然这
样的火锅拼盘是不能够就地吃的,你得给它加点能量。放把火烧它吧,这火就是所谓的
application object (在MFC 程序中就是衍生自CWinApp 的一个全域性对象)。是这
312
…………………………………………………………Page 375……………………………………………………………
第5章 總觀Application Framework
个对象引起了连锁反应(一连串的 'new'),使每一个形(类别)有了真正的体(对象),
把应用程序以及Application Framework 整个带动起来。一切因缘全由是起。
Application Framework 带来的革命精神是,程序模型已经存在,程序员只要依个人需求
加料就好:在衍生类别中改写虚拟函数,或在衍生类别中加上新的成员函数。这很像你
在火锅拼盘中依个人口味加盐添醋。
由于程序代码的初期规模十分一致(什么样风格的程序应该使用什么类别,是一成不变
的),而修改程序以符合私人需要的基本动作也很一致(我是指像「开辟一个空的骨干
函数」这种事情),你动不了Application Framework 的大架构,也不需要动。这是福利
不是约束。
应用程序代码骨干一致化的结果,使优越的软件开发工具如CASE (puter Aid
Software Engineering)tool 容易开发出来。你的程序代码大架构掌握在Application
Framework 设计者手上, 于是他们就有能力制作出整合开发环境( Integrated
Development Environment,IDE)了。这也是为什么Microsoft、Borland、Symantec、
Wat、IBM 等公司的整合开发环境进步得如此令人咋舌的原因了。
有人说工学院中唯一保有人文气息的只剩建筑系,我总觉得信息系也勉强可以算上。带
艺术气息的软件创作行为(我一直是这么认为的)将在Application Framework 出现后
逐渐成为工匠技术,而我们都将只是软件IC 装配厂里的男工女工。其实也没什么好顾
影自怜,功成名就的冠冕从来也不曾落在程序员头上;我们可能像纽约街头的普普
(
POP)工作者,自认为艺术家,可别人怎么看呢?不得而知!话说回来,把开发软件
这件事情从艺术降格到工技,对人类只有好处没有坏处。不是亨利福特,我们又如何能
够享受大众化的汽车?或许以后会出现「纯手工精制」的软件,谁感兴趣不得而知,我
自己嘛。。。唔。。。倒是从来不嫌机器馒头难吃。
如果要三言两语点出Application Framework 的特质,我会这么说:我们挖出别人早写
好的一整套模块(MFC 或OWL 或OpenClass)之中的一部份,给个引子(application
object)使它们一一具象化动起来,并被允许修改其中某些零件使这程序更符合私人需
313
…………………………………………………………Page 376……………………………………………………………
第篇 湷觥 FC 程式設計
求,如是而已。
我怎么说
侯捷的这一段话实在已经点出Application Framework 的精神。凝聚性强、组织化强的类
别库就是Application Framework 。一组合作无间的对象,彼此藉消息的流动而沟通,并
且互相调用对方的函数以求完成任务,这就是Application Framework 。对象存在哪里?
在MFC 中?! 这样的说法不是十分完善,因为MFC 的各个类别只是「对象属性(行
为)的定义」而已,我们不能够说MFC 中有实际的对象存在。唯有当程序被application
object (这是一个衍生自MFC CWinApp 的全域对象)引爆了,才将我们选用的类别一一
具象化起来,产生实体并开始动作。图5…1 是一个说明。
这样子说吧,静态情况下MFC 是一组类别库,但在程序执行时期它就生出了一群有活
动力的对象组。最重要的一点是,这些对象之间的关系早已建立好,不必我们(程序员)
操心。好比说当使用者按下菜单的【File/Open 】项,开文件对话框就会打开;使用者选好
档名后,Application Framework 就开始对着你的资料类别,唤起一个名为Serialize 的特
殊函数。这整个机制都埋好了,你只要把心力放在那个叫作Serialize 的函数上即可。
选用标准的类别,做出来的产品当然就没有什么特色,因为别人的零件和你的相同,兜
起来的成品也就一样。我指的是使用者接口(UI )对象。但你要知道,软件工业发展到
现阶段这个世代,着重的已不再是UI 的争奇斗艳,取巧哗众;UI 已经渐渐走上标准化
了。软件一决胜负的关键在资料的处理。事实上,在「真正做事」这一点,整个application
framework 是无能为力的,也就是说对于数据结构的安排,数据的处理,数据的显示,