友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
深入浅出MFC第2版(PDF格式)-第44部分
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!
虽然文件读写(此动作在MFC 称为Serialize)单元必须改写以符合个人所需,但是单
元与单元之间的关系依然存在而且极富价值。当使用者在程序中选按【File/Open 】或
【File/Save 】,主框窗口自动通知Document 对象(内存资料),引发Serialization 动
作;而你为了个人的需求,改写了这个Serialize 虚拟函数。你对MFC 的改写范围与程度,
视你的程序有多么特异而定。
可是如果酿酒厂想改装为炼钢厂?那可就无能为力了。这种情况不会出现在软件开发
上,因为软件的必备功能使它们具有相当的相似性(尤其Windows 又强调接口一致性) 。
好比说程序想支持MDI 接口,想支持OLE,这基本上是超越程序之专业应用领域之外的
一种大格局,一种大架构,最适合Application Framework 发挥。
很明显,Application Framework 是一组超级的类别库。能够被称为Framework 者必须其
中的类别性质紧密咬合,互相呼应。因此你也就可以想象,Framework 所提供的类别是
一伙的,不是单片包装的。你把这伙东西放入程序里,你也就得乖乖遵循一种特定的
(Application Framework 所规定的)程序风格来进进程序设计工作。但是侯捷也告诉我
316
…………………………………………………………Page 379……………………………………………………………
第5章 總觀Application Framework
们,这是福利不是约束。
别人怎么说
其它人又怎么看Application Framework ?我将胪列数篇文章中的相关定义。若将原文译
为中文,我恐怕力有未逮辞不达意,所以列出原文供你参考。
1985 年,Apple 公司的MacApp 严格而系统化地定义出做为一个商业化Application
Framework 所需要的关键理念:
The key ideas of a mercial application framework : a generic app on steroids that
provides a large amount of general…purpose functionality within a well…planned; well
tested; cohesive structure。
*cohesive 的意思是强而有力、有凝聚力的。
*steroid 是类固醇。自从加拿大100 公尺名将班强生在汉城奥运吃了这药物而夺得金牌并打破世
界记录,相信世人对这个名称不会陌生(当然强生的这块金牌和他的世界记录后来是被取消的)。
类固醇俗称美国仙丹,是一种以胆固醇结构为基础,衍生而来的荷尔蒙,对于发炎红肿等症状有极
速疗效。然而因为它是透过抑制人类免疫系统而得到疗效,如果使用不当,会带来极不良的副作用。
运动员用于短时间内增强身体机能的雄性激素就是类固醇的一种,会影响脂肪代谢,服用过量会导
至极大的副作用。
基本上MacApp 以类固醇来比拟Application Framework 虽是妙喻,但类固醇会对人体产
生不好的副作用而Application Framework 不会对软件开发产生副作用…除非你认为不能
随心所欲写你的码也算是一种副作用。
317
…………………………………………………………Page 380……………………………………………………………
第篇 湷觥 FC 程式設計
是:
Apple 更一步更明确地定义一个Application Framework
an extended collection of classes that cooperate to support a plete application
architecture or application model; providing more plete application development
support than a simple set of class libraries。
* 这里所指的support 并不只是视觉性UI 组件如menu、dialog、listbox。。。,还包括一个应用
程序所需要的其它功能设备,像是Document; View; Printing; Debugging。
另一个相关定义出现在Ray Valdes 于1992 年10 月发表于Dr。 Dobb's Journal 的〃Sizing up
Application Frameworks and Class Libraries〃 一文之中:
An application framework is an integrated obj ect…oriented software system that offers
all the application…level classes documents; views; and mands needed by a
( )
generic application。
An application framework is meant to be used in its entirety; and fosters both design
reuse and code reuse。 An application framework embodies a particular philosophy for
structuring an application; and in return for a large mass of prebuilt functionality; the
programmer gives up control over many architectural…design decisions。
Donald G。 Firesmith 在一篇名为〃Frameworks : The Golden path of the object Nirvana〃 的
文章中对Application Framework 有如下定义:
What are frameworks They are significant collections of collaborating classes that
?
capture both the small…scale patterns and maj or mechanisms that; in turn; implement
the mon requirements and design in a specific application domain。
* Nirvana 是涅盘、最高境界的意思。
318
…………………………………………………………Page 381……………………………………………………………
第5章 總觀Application Framework
Bjarne Stroustrup (C++ 原创者)在他的The C++ Programming Language 一书中对于
Application Framework 也有如下叙述:
Libraries build out of the kinds of classes described above support design and re…use of
code by supplying building blocks and ways of bining them; the application
builder designs a framework into which these mon building blocks are fitted。 An
alternative; and sometimes more ambitious; approach to the support of design and re
use is to provide code that establishes a mon framework into which the application
builder fits application…specific code as building blocks。 Such an approach is often
called an application framework。 The classes establishing such a framework often have
such fat interfaces that they are hardly types in the traditional sense。 They approximate
the ideal of being plete applications; except that they don't do anything。 The
specific actions are supplied by the application programmer。
Kaare Christian 在1994/02/08 的PC Magazine 中有一篇〃C++ Application Frameworks〃
文章,其中有下列叙述(节录):
两年前我在纽约北边的乡村盖了一栋post…and…beam 房子。在我到达之前我的木匠已经
把每一根梁的外形设计好并制作好,把一根根的粗糙木材变成一块块锯得漂漂亮亮的零
件,一切准备就线程只待安装。 (注:所谓post…and…beam 应是指那种梁柱都已规格化,
可以邮购回来自己动手盖的DIY ! V Do It Yourself …房子)。
使用Application Framework 建造一个 Windows 应用程序也有类似的过程。你使用一
组早已做好的零件,它使你行进快速。由于这些零件坚强耐用而且稳固,后面的工作就
简单多了。但最重要的是,不论你使用规格化的梁柱框架来盖一栋房子,或是使用
Application Framework Windows 程序,工作类型已然改变,出现了一种完
来建立一个
全崭新的做事方法。在我的post…and…beam 房子中,工作类型的改变并不总是带来帮
助;贸易商在预制梁柱的技巧上可能会遭遇适应上的困扰。同样的事情最初也发生在
Windows 身上,因为你原已具备的某些以C 语言写Windows 程序的能力,现在在以
319
…………………………………………………………Page 382……………………………………………………………
第篇 湷觥 FC 程式設計
C++ 和Application Framework 开发程序的过程中无用武之地。时间过去之后,
Windows 程序设计的类型移转终于带来了伟大的利益与方便。Application Framework
本身把message loops 和其它Windows 的苦役都做掉了,它促进一个比较秩序井然
的程序结构。
Application Framework …建立Windows 应用软件所用的 C++ 类别库…如今已行之
有年,因为对象导向程序设计已经快速地获得了接受度。Windows API 是程序性的,
Application Framework 则让你写对象导向式的Windows
程序。它们提供预先写好的机
能(以C++ 类别型式呈现出来),可以加速应用软件的开发。
Application Framework 提供数种优点。或许最重要的;是它们在对象导向程序设计模式
下对Windows 程序设计过程的影响。你可以使用Framework 来减轻例行但繁复的琐
事; 目前的Application Framework 可以在图形、对话框、打印、求助、OCX 控制组件、
剪贴簿、OLE 等各方面帮助我们,它也可以产生漂亮的UI 接口如工具栏和状态列。
借着Application Framework 的帮助写出来的码往往比较容易组织化;因为Framework
改变了Windows 管理消息的方法。也许有一天Framework 还可以帮你维护单一一套
码以应付不同的执行平台。
你必须对Application Framework有很好的知识 ;才能够修改由它附带的软件开发工具
制作出来的骨干程序。它们并不像Visual Basic 那么容易使用。但是对Application
Framework 专家而言,这些程序代码产生器可以省下大量时间。
使用Application Framework 的主要缺点是;没有单一一套产品广被所有的C++ 编译
器支持。所以当你选定一套Framework,在某个范围来说,你也等于是选择了一个编译
器。
320
…………………………………………………………Page 383……………………………………………………………
第5章 總觀Application Framework
为什么使用Application Framework
虽然Application Framework 并不是新观念,它们却在最近数年才成为PC 平台上软件开
发的主流工具。对象导向语言是具体实现Application Framework 的理想载具,而C++ 编
译器在PC 平台上的出现与普及终于允许主流PC 程序员能够享受Application
Framework 带来的利益。
从八十年代早期到九十年代初始,C++ 大都存在于UNIX 系统和研究人员的工作站
中,不在PC 以及商业产品上。C++ 以及其它的对象导向语言(例如Smalltalk…80)使
一些大学和研究计划生产出现今商业化Application Framework 的鼻祖。但是这些早期产
品并没有明显区隔出应用程序与Application Framework 之间的界线。
今天应用软件的功能愈来愈复杂,建造它们的工具亦复如此。Application Framework 、Class
Library 和GUI toolkits 是三大类型的软件开发工具(请见方块说明),这三类工具虽然
以不同的技术方式逼近目标,它们却一致追求相同而基本的软件开发关键利益:降低写
程序代码所花的精力、加速开发效率、加强可维护性、增加强固性(robustness )、为组合
式的软件机能提供杠杆支点(有了这个支点,再大的软件我也举得起来)。
当我们面临软件工业革命,我们的第一个考量点是:我的软件开发技术要从哪一个技术
面切入?从raw API 还是从高阶一点的工具?如果答案是后者,第二个考量点是我使用
哪一层级的工具?GUI toolkits 还是Class Library 还是Application Framework ?如果答
案又是后者,第三个考量点是我使用哪一套产品?MFC 或OWL 或Open Class Library ?
(目前PC 上还没有第四套随编译器附赠的Application Framework 产品)
别认为这是领导者的事情不是我(工程师)的事情,有这种想法你就永远当不成领导者。
也别认为这是工程师的事情不是我(学生)的事情,学生的下一步就是工程师;及早想
点工业界的激烈竞争,对你在学生阶段规划人生将有莫大助益。
我相信,Application Framework 是最好的杠杆支点。
321
…………………………………………………………Page 384……………………………………………………………
第篇 湷觥 FC 程式設計
, ,
Application Framework Class Library GUI toolkit
一般而言,Class Library 和GUI toolkit 比Application Framework 的规模小,定位也
没那么高阶宏观。Class Library 可以定义为「一组具备对象导向性质的类别,它们使
应用程序的某些功能实现起来容易一些,这些功能包括数值运算与数据结构、绘图、
内存管理等等等;这些类别可以一片一片毫无瓜葛地并入应用程序内」。
请特别注意这个定义中所强调的「一片一片毫无瓜葛」,而不像Application
Framework 是大伙儿一并加入。因此,你尽可以随意使用Class Library ,它并不会强
迫你遵循任何特定的程序架构。Class Library 通常提供的不只是UI 功能、也包括一
般性质的机能,像数据结构的处理、日期与时间的转换等等。
GUI toolkit 提供的服务类似Class Library ,但它的程序接口是程序导向而非对象导
向。而且它的功能大都集中在图形与UI 接口上。GUI toolkit 的发展历史早在对象
导向语言之前,某些极为成功的产品甚至是以汇编语言(assembly )写成。不要必然
地把GUI 联想到Windows ,GUI toolkit 也有DOS 版本。我用过的Chatter Box 就
是DOS 环境下的GUI 工具(是一个函数库)。
使用Application Framework 的最直接原因是,我们受够了日益暴增的Windows API 。把
MFC 想象为第四代语言,单单一个类别就帮我们做掉原先要以一大堆APIs 才能完成的
事情。
但更深入地想,Application Framework 绝不只是为了降低我们花在浩瀚无涯的Windows
API 的时间而已;它所带来的对象导向程序设计观念与方法,使我们能够站在一群优秀
工程师(MFC 或OWL 的创造者)的努力心血上,继承其成果而开发自己之所需。同时,
因为Application Framework 特殊的工作类型,整体开发工具更容易制作,也制作的更完
美。在我们决定使用Application Framework 的同时,我们也获得了这些整合性软件开发
环境的支持。在软件开发过程中,这些开发工具角色之吃重不亚于Application Framework
本身。
322
…………………………………………………………Page 385……………………………………………………………
第5章 總觀Application Framework
Application Framework 将成为软件技术中最重要的一环。如果你不知道它是什么,赶快
学习它;如果你还没有使用它,赶快开始用。机会之窗不会永远为你打开,在你的竞争
者把它关闭之前赶快进入!如果你认为改朝换代还早得很,请注意两件事情。第一,江
山什么时候变色可谁也料不准,当你埋首工作时,外面的世界进步尤其飞快;第二,物
件导向和Application Framework 可不是那么容易学的,花多少时间才能登堂入室可还得
凭各人资质和基础呢。
浩瀚无涯的Windows API
Windows 版本 推出日期 API 个数 消息个数
1。0 1985。11 379 ?
2。0 1987。11 458 ?
3。0 1990。05 578 ?
Multimedia Ex。 1991。12 120 ?
3。1 1992。04 973 271
Win32s 1993。08 838 287
1449
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!