友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第107章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






             样的火锅拼盘是不能够就地吃的,你得给它加点能量。放把火烧它吧,这火就是所谓的 



             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 是无能为力的,也就是说对于数据结构的安排,数据的处理,数据的显示, 



             Application Framework 所能提供的,无一不是单单一个空壳而已…在C++ 语言来讲就 



             是个虚拟函数。软件开发人员必须想办法改造(override )这些虚拟函数,才能符合个人 



             所需。基于C++ 语言的特性,我们很容易继承既有之类别并加上自己的特色,这就是物 



             件导向程序设计的主要精神。也因此,C++ 语言中有关于「继承」性质的份量,在MFC 



             程序设计里头占有很重的比例,在学习使用MFC  的同时,你应该对C++  的继承性质和 



             虚拟函数有相当的认识。第2章有我个人对C++ 这两个性质的心得。 



314 


…………………………………………………………Page 377……………………………………………………………

                                                            第5章    總觀Application Framework  



                   CMyWinApp theApp;  // global object 

                    。。。 

这些对象之间的            BOOL CMyWinApp::InitInstance() 

关联性非常强烈             { 

                       CMultiDocTemplate* pDocTemplate; 

,才有资格被称                pDocTemplate = new CMultiDocTemplate (                  应用程序挑选MFC 中的 

为application               IDR_MYTYPE; 

                           RUNTIME_CLASS(CMyDoc);                              类别,依序产生各对象。 

framework。                 RUNTIME_CLASS(CMyMDIChildWnd); 

                           RUNTIME_CLASS(CMyView)); 

                       AddDocTemplate(pDocTemplate); 



                       CMyMDIFrameWnd* pMyMainFrame = new CMyMDIFrameWnd; 

                    。。。 

                    } 



                                                             CObject 



                                                                 CCmdTarget 

                              MDIChildWnd 

                                  object                            CWinThread 



                                                                       CWinApp 



                                                                           CMyWinApp 

                     
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!