友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!
第三电子书 返回本书目录 加入书签 我的书架 我的书签 TXT全本下载 『收藏到我的浏览器』

深入浅出MFC第2版(PDF格式)-第59部分

快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部! 如果本书没有阅读完,想下次继续接着阅读,可使用上方 "收藏到我的浏览器" 功能 和 "加入书签" 功能!




自己嘛。。。唔。。。倒是从来不嫌机器馒头难吃。 



如果要三言两语点出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 

                               Application       Document 

              View object                                           CWnd 

                                  object           object 

                                                                       CView 



                                                                           CMyView 



                              MDIFrameWnd                              CFrameWnd 

                                  object 

                                                                           CMDIFrameWnd    CMyMDIFrameWnd 



         Application object 是全域对象,其它对象以'new' 动态产生。                         CMDIChildWnd    CMyMDIChildWnd 



         MFC 是一个零组件超级市场,所贩卖之零组件的                                    CDocument 

         功能以及零组件彼此之间的关系都已定义好;我                                         CMyDoc 

         们选择适当的零组件,兜出一个应用程序。                                        CDocTemplate 



                                                                       CMultiDocTemplate 



               图5…1 MFC 是一个零组件超级市场,所贩卖的零组件功能以及零组件彼此之 

                       间的关系都已定义好;我们选择自己喜欢的零件,兜出一个应用程序。 



   Application Framework  究竟能提供我们多么实用的类别呢?或者我们这么问:哪些工作 



   已经被处理掉了,哪些工作必须由程序员扛下来?比方说一个标准的MFC 程序应该有 



   一个可以读写文件资料的功能,然而应用程序本身有它独特的数据结构,从MFC 得来的 



   零件可能与我的个人需求搭配吗? 



   我以另一个比喻做回答。 



                                                                                                      315 


…………………………………………………………Page 378……………………………………………………………

             第篇    湷觥 FC  程式設計 



            假设你买了一个整厂整线计划,包括仓贮、物料、MIS、生管,各个部门之间的搭配也 



            都建立起来了,包含在整厂整线计划内。这个厂原先是为了生产葡萄酒,现在改变主意 



            要生产白兰地,难道整个厂都不能用了吗?不!只要把进货原料改一改、发酵程序改一 



            改、瓶装程序改一改、整个厂的其它设备以及设备与设备之间的联机配合(这是顶顶重 



            要的)都可以再利用。物料之后到生管,装瓶之后到仓贮,仓贮之后到出货,再加上MIS 



            监控全厂,这些程序都是不必改变的。 



            一个整厂整线计划,每一单元之间的联机沟通,合作关系,都已经建立起来,是一种建 



            构好的运作模式。抽换某个单元的性质或部份性质,并不影响整体操作。「整厂整线」 



            最重要最有价值的是各单元之间的流程与控制。 



            反映到对象导向程序设计里头,Application Framework 就是「整厂整线规划」,Application 



            Framework 提供的类别就是上述工厂中一个一个的单元。最具价值的就是各类别之间的 



            交互运作模式。 



            虽然文件读写(此动作在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 

                                                         (                                     ) 



                     
返回目录 上一页 下一页 回到顶部 0 0
快捷操作: 按键盘上方向键 ← 或 → 可快速上下翻页 按键盘上的 Enter 键可回到本书目录页 按键盘上方向键 ↑ 可回到本页顶部!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!