已阅读5页,还剩80页未读, 继续免费阅读
(计算机应用技术专业论文)windows编程框架下的可扩展应用模型设计.pdf.pdf 免费下载
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
首都师范大学硕上毕业论文 中文摘要 中文摘要 对w i n d o w s 编程框架下的开发技术、软件工程的发展进化进行了系统性介 绍,以几个成熟的软件系统为例,深八分析了可扩展系统的架构设计,并在此基 础上设汁了一个新的m f c 扩展模型- - m d n rm o d e l ,从应用模型的层面解决了 m f c 框架与n e t 框架互操作的问题,通过引入n e t 框架提供的机制使得现有 的m f c 应用在n e t 时代可以被合理复用。通过在实际项目中对m d n rm o d e l 模犁的使用,证明该模型可以从系统架构、功能设计及开发效率等方面获得较大 提川。 随着微软公司提供的n e t 框架技术逐渐被广泛地采纳,许多传统的、在m f c 框架技术下进行应用开发的技术人员也慢慢开始考虑将n e t 技术采纳到自己的 系统开发中。但是,n e t 框架和m f c 框架模型这两种异构编程框架在技术实现 j 。很难整合,n e t 强大的类库和m f c 成熟的文档视图模型无法充分结合,取长 补短。除了在m f c 本地项目中使用n e t 类库、托管代码等的技术问题之外,两 种框架的核心特征在软件系统结构上的深层次融合也是很多系统架构师仔细研 究的重要课题。m d n r m o d e l 为m f c 开发人员提供了基础性技术实现,屏蔽了 琐碎的技术细节。作为一个通用的技术基础,一致地解决了两种编程框架的互操 作问题,使结合m f c 成熟的开发模型和n e t 全新的面向组件设计得以实现。 关键词:扩展,复用,构件,架构。m f c ,n e t 第1 贞 首都师范大学硕士毕业论文 a b s t r a c t a b s t r a c t as y s t e m a t i ci n t r o d u c t i o nt ot h ed e v e l o p m e n t t e c h n o l o g y u n d e rw i n d o w s p r o g r a m m i n gm o d ea n di l l u m i n a t i o no f t h es o t t w a r ee n g i n e e r i n gf r o mt h ep e r s p e c t i v e o f e v o l u t i o ni sg i v e n an e wd e v e l o p m e n tm o d e l ,m d n rm o d e l ,i sd e s i g n e db a s e do n i l ld e p t ha n a l y s i si ot h es y s t e mm o d e lo fs o m ep r o v e ns o f t w a r es y s t e m s o l v et h e i n t e m pi s s u eb e t w e e nm f ca n d n e tf r a m e w o r k ,m a k et h er e u s a b i l i t yo fe x i s t i n g m f ca p p l i c a t i o np o s s i b l eb yi n t r o d u c i n g n e tt e c h n o l o g yt om f cp r o g r a m m i n g m o d e l b yu s i n gi ns o m es o f t w a r ep r o j e c t sd e v e l o p m e n tp r o c e s s ,m d n rm o d e li s c o n s i d e r e dt o b r i n gr a t i o n a l i z a t i o ns o r w a r ea r c h i t e c t u r ed e s i g n ,e n h a n c es y s t e m f u n c t i o nb u i l d i n g ,i m p r o v ed e v e l o p m e n te f f i c i e n c y t h e n e tf r a m e w o r kp r o v i d e sg r e a tc l a s sl i b r a r ya n da r c h i t e c t u r es u p p o r tf o r d e v e l o p e r s ,b u tt om a n yt r a d i t i o n a lm f cp m g n a m m e r s ,i ti sh a r dt ob e n e f i tal o tf r o m t h i sn e wf r a m e w o r k t h ew a yo fu s i n g n e tc l a s sl i b r a r ya n dm a n a g e dc o d ei nm f c p r o j e c ti si m p o r t ,b u th o wt ou s es o m ek e yf e a t u r e so f n e tf r a m e w o r ka s i v l f c p r o g r a m m i n gm o d e l sc o m p l e m e n t a t i o nn e e d sf u r t h e re m p h a s i s m d n rm o d e l p r o v i d e sac o n s i s t e n c yb a s i ct e c h n o l o g yi m p l e m e n t a t i o n ,e n c a p s u l a t et h eu n n e c e s s a r y t e c h n o l o g yd e t a i l s t os e r v e ra s ac o m n l o nd e v e l o p m e n tf r a m e w o r kb a s e ,m d n r m o d e lm a k e si tp o s s i b l et oc o m b i n em f cd o c - v i e wm o d e la n d n e tc o m p o n e n t m o d e lw h i c hg i v ed e v e l o p e raw h o l en e wd e v e l o p m e n tv i s i o n k e yw o r d s :c o m p u t e rv i s i o n , c r o p ,s h a p em e a s u r e ,i m a g ep r o c e s s i n g 弟【i 页 首都师范大学硕上毕业论文 独台q 性声明 首都师范大学位论文原创性声明 本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究 t 作所取得的成果。除文中已经注明引用的内容外,奉论文不含任何其他个人或 集体已经发表或撰写过的作品成果。对本文的研究做出重要贡献的个人和集体, 均已在义中以明确方式标明。本人完全意识到本声明的法律结果山本人承担。 学位论文作者签名 首都师范大学位论文授权使用声明 本人完全了解首都师范大学有关保留、使用学位论文的规定,学校有权保留 学位论文并向国家主管部门或其指定机构送交论文的电子版和纸质版。有权将学 位论文用于非赢利目的的少量复制并允许论文进入学校图书馆被查阅。有权将学 位论文的内容编入有关数据库进行检索。有权将学位论文的标题和摘要汇编出 版。保密的学位论文在解密后适用本规定。 学位论文作者签名:上獬 第1 l i 贰 汁都师范大学硕十毕业论文 第一章综述 1 1 研究目的和意义 基于m i c r o s o f tw i n d o w s 操作系统的应用程序开发技术经过了多年的发展, 已经变得越来越成熟。作为三个里程碑式的主流编程模型,微软公司提供的基于 非托管( “托管非托管”这个术语将会在第二章的2 3 1 节进行介绍) v c + + 的 m f c 编程框架、n e t 开发框架和下一代编程模型一“l o n g h o m 开发模型”,都 会在它们所处的特定历史阶段为开发人员提供当前最合理的编程基础,软件开发 人员可以在这些基础之上构建高质量的软件系统。 但是,随着新一代编程框架的引入,旧有的编程模型就势必面临去留取舍的 问题。例如,很多m f c 的编程人员都发现,使用m f c 技术很难构建一个高可 扩展的应用系统,开发成果不能被很好的继承、维护、发展;随着原创开发人员 的离开,大量的原始代码被废弃,软件开发又需要从头开始。n e t 技术作为更 好的c o m 被引入进来,它使得开发人员可以更容易地使用组件构件来构造自己 的应用系统,并为基于组件,构件的粗粒度软件的扩展和复用提供了标准。丽 l o n g h o r n 应用程序模型使用标记语言作为用户界面描述和组件连接机制,这使 得系统内的功能模块之间耦合松散、异构系统之间一致通讯,使软件系统的组织、 部署、维护都更加动态灵活,开发成果的重用也更加简单直接。旧的开发模型由 于其自身的局限性所带来的难题在新的模型下很多都有了基础性的解决。当丌发 人员一次又一次面对不断推陈出新的新编程框架和模型基础时,一个很自然的问 题就摆在眼前,即:现有的已经使用旧的开发模型开发出来的软件系统是不是就 必须废弃,转而去使用新的开发模型击重新开发? 还是维持现状,任其自生自 灭? 现阶段,摆在开发人员面前的一个非常现实的问题就是:已经开发了大量的 使用非托管( u m n a n a g e d ) v c + + 基于m f c 编程框架和c o m 技术开发的软件系 统。这些系统的现有技术成果在n e t 技术和其他的更新技术逐渐居于主流之时, 能不能继续使用? 如何重用? 维护旧代码和旧有应用的复杂度及成本能不能降 低? 如何降低? 第1 贞 旨都师范大学硕土毕业论文 另外,对于大景的已经熟悉m f c 编程框架的程序员而言,他们对于m f c 投术苛常熟悉,如果让他们抛弃自己所掌握的m f c 技术丽去重新学习一- r 7 新的 技术( 如n e t ) ,无疑这将是一个非常痛苦的过程,而且也是不合理的。但是如 果这些程序员们拒绝新技术,抱残守缺,那么可以想见,从容面对新一轮的技术 挑战就会成为问题。举一个简单的例子,这些固守旧有技术的程序员将很难和掌 握新技术的程序员们协作、沟通,共同完成项目。 那么,能小能提供一个通用的应用程序基础开发框架帮助大量的m f c 、c o m 丌发人员在不抛弃自己所学的基础上。能够平滑地使用包括,n e t 在内的新的编 稗框架? 这就是本文要解决的问题。我们希望能够建立一套机制,使得m f c 开 发人员可以在m f c 编程框架的基础上。使用一种自然的方式引入n e t 框架带来 的种种好处。n e t 框架作为一个新的编程框架,它带来了很多它的前辈不具备 的新特性,包括快速应用程序开发( r a p i d a p p l i c a t i o nd e v e l o p m e n t ,r a d ) 机制、 更多更丰富的类库、n e t 组件元模型等。更重要的是,作为微软公司主推的新 一代开发框架,n e t 技术从一开始就为松散耦合的组件系统的构建、更强扩展 性的柔性应用的开发做好了基础准备,这些都是它的前辈们所望尘莫及的。 因此,我们希望提供一种机制,即:使m f c 开发人员“借助n e t 框架所提 供的优势来自然扩展自己的m f c 应用”的希望得以实现。只要这些m f c 开发 人员有使用n e t 框架技术的这种愿望,他们就可以使用我们所提供的框架自然 达成,而不需要从头去解决所有的技术细节问题。丽我们耍做的工作,就是把这 陌种截然币同的编稃框架连接起来,为m f c 程序员和n e t 程序员提供一种通 道,使这两个编程模型得以互通。 更进一步的,如果我们提供一个这种使用n e t 技朱来扩展m f c 编程框架的 基础( 可阻类比为通用模板) 。全世界数以百万计的大量m f c 开发人员尤其是 一些入门者将能够从开始就获得这种基础性支持,那么他们就可以打破技术障 错,小被m f c 框架奉身所固有的局限所限制,充分获得并灵活运用多种编程框 架所提供的技术,降低开发难度,达到提高自己的软件开发效率、提升软件系统 质量的目的。 我们要解决的问题是一个非常实际的技术问题,并且这个问题的解决,会极 大影响软件开发的模式。根据目经b p 社的统计m f c 程序员占到世界程序员数 第2 页 首都师范人学硕士毕业论文 日的1 0 以上,这无疑是一个非常庞大的群体。而多种不同编程框架可以在自己 的优势范围内随意发挥,用别的编程框架来补充自己的弱项,这种协同、协作的 思路是最有益、最自然和最高效的方式。 在微软公司大力推广基于n e t 框架的应用系统开发时,我们认为,m f c 作 为一种旧有的、被应用很久、被应用地非常广泛的技术,它不会就此消亡它仍 然会长期存在。但是毫无疑问,山于这些技术在诞生在特定的历史环境下,必然 要受到包括当时的应用环境、计算机硬件、技术成熟度等在内的各种各样的限制。 那么对比新的技术,这些旧有的技术必然存在着各触各样的不足。但实际情况是, 他们曾经在特定的历史时期发挥过巨大的作用,但是在新的历史时期,这些技术 似乎又成了阻碍技术发展的拦路石。在n e t 技术于2 0 0 0 年推出之后到现在为止, 许多诸如“m f c 编程框架已死”或者“抵制n e t 编程框架”等争论不绝于耳, 这是转折期的必然现象。但我们的观点是:我们既不能把旧有的技术一棍子打死, 盲目要求每一个程序员都使用新的技术;也不能坚持旧有的技术,拒绝新的发展。 我们相信,只有融合之道,才是真正妥帖的解决方案。同时,这种解决方案也将 怍为一个连接器,为广大的程序员群体带来莫大的助益,并打破编程框架之间的 界限,充分整合资源,拓展出软件开发技术的一个新格局。 事实上,微软公司正在自己的新版本的整合开发工具v i s u a ls t u d i 0 2 0 0 5 中要 重点提供互操作的支持。本课题另外一个意义在于,作为这种互操作支持的一项 非官方的解决方案,它也受到了微软公司相关部门的支持。 1 2 国内外研究概况 随着n e tf r a m e w o r k 的不断发展。它在w i n d o w s 应用程序开发中的地位也 逐渐提升,这对m f c 编程框架造成了很大的冲击,促使许多软件开发人员开始 着手解决m f c 与n e t 技术复用的问题。从技术上,开发人员就是要解决在m f c 编程框架中平滑使用n e t 技术的问题、c o m 与n e t 组件的互操作问题、在n e t 项目中使用m f c 技术的闯题以及在n e t 项目中使用c o m 组件的问题。其中, t o ma r c h e r , n i s h a n ts i v a k u m a r 写的由a d d i s o nw e s l e y 出版社在2 0 0 3 年1 2 月出 版的( ( e x t e n d i n gm f ca p p l i c a t i o n sw i t ht h e n e t f r a m e w o r k ) ) 一书是介绍如何在 m f c 项目中使用n e t 技术的一本代表著作,影响很大,这本书的第二版也于 第3 页 一都师范大学硕j 毕业论文 2 0 0 5 年左右开始组织编写。在c o m 与n e t 互操作方面,也有一些相关的技术 资料,包括j u l i a n t e m p l e m a n 等编写的由微软公司出版社于2 0 0 3 年出版的( ( c o m p r o g r a m m i n gw i t hm i c r o s o f t n e t ) ) 一书以及。但是,除了这些纯粹的技术指导 性书籍外还没有丌发者或者公司提供了特定的开发t 具和应用程序基础框架以 帮助m f c 和c o m 开发人员忽略掉编程框架之间的技术鸿沟,为他们屏蔽掉一 些琐碎的技术细节问题,让他们从一个基础上自然的使用多种编程框架来开发自 己的软件系统。 由于我们在考虑m f c 框架和n e t 框架互操作以及一种新的扩展模型的建 立的时候,是2 0 0 4 年初。当时微软公刊最新版本的整合开发丁具为v i s u a l s t u d i on e t 2 0 0 3 。在这个工具中,微软公司并未提供任何相关的工具支持。但根 据当时微软公司提供的技术报告,他们计划在v i s u a ls t u d i o n e t 的新版奉中,即, 将于2 0 0 5 年末推出的v i s u a ls t u d i o n e t 2 0 0 5 版中重点解决m f c 、c o m 与n e t 技术的互操作问题,但使用此版本以前的旧版开发工具的开发者仍然享受不到这 种好处。 在完成本篇论文的时候,微软公司已经于2 0 0 5 年1 0 月2 8 日发布了最新版 本的整合开发工具一s u a ls t u d i 0 2 0 0 5 。在这个版本的v i s u a ls t u d i o 中,微软公 亍j _ | 提供了“本机和n e t 互操作”的相关解决方案,包括:托管代码和非托管代 码的混合编程、如何在n e t 应用程序中使用本级注册的c o m 组件、如何在m f c 应用程序中使用托管窗体用户自定义控件以及如何使用托管代码调用非托管的 动态链接库。t y , 女n ,“在一个m f c 视图中宿主一个w i n d o w s 窗体用户自定义控 件( h o s t i n ga w i n d o w s f o r m u s e r c o n t r o la sa n m f c v i e w ) ”技术解决方案部分, 微软公一j 提供了如何在一个多文档窗口( m u l t i d o c u m e n tw i n d o w s ,m d i ) 中宿 主一个托管w i n d o w s 窗体。但是,这个解决方案仍然只是一个技术指导。开发 人员必须按照这些步骤一步一步地在应用程序项目的源代码中填充必要的语句, 井通过类似下面的代码: 第4 页 首都师范太学硕士毕业论文 来使用托管w i n d o w s 窗体。对比我们已经完成的“m f c 的n e t 框架扩展模 型”这种方式仍然不够直接,并且过于繁琐。也就是说,在微软公司推出的最新 版本的整合开发工具中,他们仍然只是给出了一个可能的技术解决方案,并没有 从璀础l 为这种需求提供支持。 另外,国外在软件复用技术研究、可复用软件的开发、和基于组件构件的 应用系统构造等方面的研究提出的相关理论和类似的项目实践埘我们的新编程 机制( 模型) 的设计和具体实施都有很多可借鉴之处。 相比国外的研究情况,国内的研究主要集中在应用系统的构造研究上,这主 要包括构件的集成与组装、基于构件的应用系统模型研究、动态软件体系结构等 方面,当然,除了组件构件技术相关的研究以外,非w i n d o w s 操作系统的软件 系统的体系结构、复用技术的研究、中间件技术、面向服务的构架、w e bs e r v i c e 等晌研究都是可以借鉴的。 国内的研究院所中,北京大学软件工程研究所在软件复用技术、基于构件的 系统平台、软件质量控制等方面有很深入的研究。复旦大学软件工程实验室在动 态软件体系结构建模、构件技术等方面有很深入的研究,完成了包括基于c o m 和d c o m 的组件组装工具等开发工具。上海计算机软件技术开发中心和上海普 几软件有i ;艮公刮在构件技术方面也有很多研究成果值得借鉴。另外,包括武汉大 学软件t 程国家重点实验室的许多相关研究成果对我们的研究和开发工作也有 很大的指导意义。 1 3 研究目标与研究方案 1 3 1 研究内容与目标 现阶段,一个基本的共识是:软件过程改善和软件新技术采用两方面的无缝 结合将是软件工程发展的主流,也是解决软件危机的主流途径【1 】。针对现阶段 人最的基于m f c 编程框架的应用系统在开发和成果复用上所面临的问题、异构 第5 页 首都师范人学硕上毕业论文 自”j 挂框梨、绀件的且操作困难问题以及当前的开发工具的不足等问题,我们提供 。套切实可行的解决方案,这包括辅助开发工具、应用程序架构基础( 模型、框 架) 和相关规范。我们的研究和丌发要着重解决的关键问题有: ( 1 ) 现有的m f c 编程框架的扩展。这需要在两个方面做t 作:第一,对 微软公刊在v i s u a ls t u d i o n e t2 0 0 3 和v i s u a ls t u d i 0 2 0 0 5 中提供的m f c 应用稗序 编程向导进行增强,为开发人员自动生成m f c 与n e t 互操作的基础支持框架 ( 模板代码) ;第二,对微软公司提供的m f c 应用程序开发框架进行增强,引 入n e t 技术所带来的一个关键技术特征,弥补原有的m f c 应用模型的不足,并 捉u 1个新的应用程序丌发模型以及相虑的应用模型; ( 2 ) 解决在m f c 项目中使用n e t 组件、控件、用户自定义控件的技术问 题,并提供丌发工具; ( 3 ) 提供基于v i s u a ls t u d i o n e t2 0 0 3 和v i s u a ls t u d i 0 2 0 0 5 的可复用自定义 应用稗序向导,以提供代码级复用。 ( 4 ) 提出相关技术规范。 1 3 2 研究方案 具体的技术解决方案为: ( 1 ) 使用微软公司开发工具提供的支持开关从m f c 编程框架中获得对n e t 框架的引用通路: ( 2 ) 在m f c 编程框架中提供“m f c n e t 结对”模型,提供类似文档视图 结构的相互依赖对; ( 3 ) 帮助开发人员在m f c 编程框架使用n e t 控件,使用类似在m f c 编 程框架中引入a c t i v e x 控件的包装机制; 第6 页 竹 i | j 师范大学硕十毕业论文 w i n d o w s 编程技术简介与分析 第二章w i n d o w s 编程技术简介与分析 2 1 概述 从最初的使用w i n d o w sa p i 非面向对象的开发,到m f c ( m i c r o s o f t f o u n d a t i o n c l a s s ) 框架所提供的、通过类来访问的、模拟面向对象的w i n d o w s a p i 访问方式。再到为了适应分布式应用丌发,所出现的c o m ( c o m p o n e n to b j e c t m o d e l ) 和n e t 等面向组件和服务的构造方式,构建一个高可维护、动态可扩展、 易鄙岩、随需席变的软件系统变得越来越容易。 2 2m f c 与c o m 技术 2 2 1m f c 技术 早期,开发w i n d o w s 应用程序必须使用微软提供的s d k ( s o f t w a r e d e v e l o p m e n tk i t ) ,直接调用w i n d o w s a p l 函数,向w i n d o w s 操作系统发出消息, 例如配置内存,打开窗口,输出图形等。w i n d o w s a p i 数以千计,组群关系划分 4 i 明,命名小够统一。m f c 把这些浩繁的a p i s 使用面向对象的方式重新组织, 使他们其有抽象、封装、继承、多态等特征。 m f c 技术的详细介绍不是本文的重点,在这里不再详述。但要注意到,m f c 不像c 运行时库,它不是通用函数库。不能在另外的非m f c 上下文中调用 m f c 类成员函数。从m f c 内部仍然可以亩接调用w i n 3 2a p i 函数,尤其是 m f c 末选抨封装的那些函数。但大部分m f c 函数都是类的成员,而且您必须 具有该类的对象才能调用它的任何成员函数【2 。另外,在运行时( r u n t i m e ) 动 态获取这些类型并与系统中的其他对象协同,在技术实现上是非常困难的。困此, m f c 开发人员往往需要从c o m 组件对象模型中去寻求动态扩展应用之道。 2 2 2c o m 组件对象模型 随着计算机网络的飞速发展,软件的应用环境变得更加广阔:与此同时软 件的设计难度也在提高。为适应这种分布式软件应用环境,组件化程序设计思想 迅速地发展起来。组件化程序设计思想,即复杂的应用程序被设计成一些小的、 第7 贞 首都师范 学硕士毕业论文 w i n d o w s 编程技术简介畸分析 功能单一的组件模块,这些组件模块可以运行在同一台机器上,也可以运行在不 同的机器上,共至机器的运行环境也可以1 i 同。 为此- o m g ( o b j e c tm a n a g e m e n tg r o u p ,对象管理组织) 提出了c o r b a ( c o m m o no b j e c tr e q u e s tb r e a k e ra r c h i t e c t u r e ,公共对象请求中介体系结构) ,而 微软提出了c o m ( c o m p o n e n to b j e c tm o d e l ,组件对象模型) 标准。目前,c o r b a 模型主要应用于u n i x 操作系统平台上,而c o m 主要府用于m i c r o s o f tw i n d o w s 操作系统平行上。 c o m 最初的设计原则之一就是支持构件技术,初期主要面向桌面应用环境, 之后,根据分布式应用的需求,发展出了d i s t r i b u t e dc o m ( d c o m ) 、c o m + 、 m i c m s o f tm e s s a g eq u e u i n g ( m s m q ) 、m i c r o s o f tt r a n s a c t i o ns e r v e r ( m t s ) 、a c t i v e x c o m r o l 等相关技术 3 】。 c o m 的特性包括:语言无关- 胜、进程透明性、可重用性。 1 语言无关性:c o m 是二进制代码级的标准。c o m 规范的定义不依赖于 任何特定的语言。不同语言开发的c o m 对象可以交互、共享;而面向对象编程 ( o o v ,o b j e c t - o r i e n t e dp r o g r a m m i n g ) 语言定义的对象,只能在同种语言中被重用。 实际上,可以使用o o p 编程技术来开发c o m 组件,这两种技术是互补的。所 有编程语言中,与c o m 规范最贴近的要数c + + ,所以,耍恕深刻理解c o m , 一定要有c + + 编程基础。 2 进程透明性:c o m 提供的服务组件对象在实现时有两种进程模型:进程 内刈象和进程外对象。前者通常以d l l 的形式,在客户进程空间中运行;后者 通常以e x e 的形式,运行在同机器的另一个进程空间中,或远程机器的一个 进程空间中( 此时,c o m 对象也可能是以d l l 形式提供服务,而远程机为其创 建一个代理进程) 。虽然c o m 对象有以上几种不同的进程模型,但这些区别对 于客户程序来说是透明的。客户程序只要遵照c o m 规范操作c o m 对象即可, 完全不必理会c o m 对象的进程模型。然而,我们在开发c o m 组件时,还是要 慎重选择进程模型的。一般来说,进程内模型效率高一点,但组件如果不稳定会 危及客户进程;进程外模型稳定性好,但运行时的系统开销比较大,效率相对低 一点。 第8 页 首都师范大学硕士毕业论_ 盘= w i n d o w s 编程技术简介与分析 3 可重用性:c o m 对象的可重用性与一般的面向对象语言实现的对象的重 用过程是不同的。c o m 对象的重用性建立在剥象的行为方式上,而不是具体的 实现上。c o m 有两种机制实现对象的重用:包容和聚合。假设a 为外部对象, b 为内部对象。包容方式,即a 实现了b 上的所有接口方法,而在实际接口方 法调用时,a 只是简单地调用b 相应的接口方法;而聚合方式,a 不实现b 的 接口,而是把b 的接口直接暴露给客户,但a 保汪客户不会知道有内部对象b 的存在。 在m f c 编程框架下,重用c + + 类库是软件复用的主要方式。而在组件对象 横掣下,绢件是软件复用的基本单元。我们看到,c o m 对象与c + + 对象的区别 在于: lc o m 对象对对象上的数据实现完全封装,外部如果想访问对象的数据, 必须通过c o m 对象提供的接口方法。而c + + 对象的数据有可能被外部直接访问。 c + r 语言刈类的成员进行了访问控制p u b l i c 成员可以在对象外部直接访问。 2 c o m 剥象的可重用性表现在c o m 对象的包容和聚合,一个对象可以完 全使用另一个对象的所有功能;而c + + 对象的可重用表现在c + + 类的继承,派生 类可以访问其父类的非私有属性、调用非私有成员函数。虽然c 十十和c o m 的重 用性机制不同,但我们可以把这两种技术有机结合起来:在源代码级使用c + + 的类重用性,在组件一级使用c o m 的重用性。 3 多态性使得客户程序可以通过统一的方法,来处理爿i 同的对象。c + + 对象 通过虚函数实现多态性,而c o m 对象的多态性通过接口来体现。 c o m 对象通过c l s i d ( 一个1 2 8 位的数串, 如 5 4 b b 7 7 8 8 0 0 0 8 7 7 8 9 - a b a b 1 1 2 2 3 3 4 4 5 5 6 6 ,也可以称为u u i d 或g u i d ) 来 唯一标示。我们通过这个c l s i d ,就可以创建对应的c o m 对象( 调用函数 c o c r e a l e l n s t a n c e ) 。c l s i d 可以通过工具u u i d g e n “e 或g u i d g e n e x e 来随机 产生。g u i d1 i 仅可以用来标示c o m 对象,也可以用来标示c o m 对象上实现 的再个接口( q u e r y i n t e f f a c e 调用时需要这个接口的g u i d ) 。 第9 页 首都师范大学硕上毕业论文w i n d o w s 编程技术简介与分析 2 3 n e t 技术 2 3 1 n e t 框架介绍 首先,m i c r o s o f t n e t 是一个理想、一种方式或者说是一个平台。它中包括 一个用来建立n e t 体验的软件平台,此平台指的是运行数据库的服务器、w e b 服务器,以及其他一些系统。他还包括一个带工具的编程模型。最后,编枵模型、 t 具和平台也是n e t 的一部分。 简单的讲,m i c r o s o f t n e t 平台是一个建立在开放互联网络协议和标准之上, 采用新晌t 只和服务来满足人们的计算和通信需求的革命性的新型x m l w e b 智 能计算服务平台。它允许应用程序在因特嗍上方便快捷地互相通信,而不必关心 使用何种操作系统和编程语言【4 j 。 对于像n e t 这样的产品,必须提供一些组件以让开发者能够创建解决方 案。n e t 使用的是现有很多工业标准的通讯协议,如x m l 、s o a p 、h t t p 和 h t m l 它使用v i s u a ls t u d i o n e t 作为开发工具来创建w e b 服务等,同时它提供 大剩、指南、框架和语言阻帮助开发这些服务。n e t 作为一个框架,其所处位 置在工具之下,而又在通讯之上。 图2 - 1n e t 框架图 从一丌始,n e t 就提供了简化二进制组件创作的基础,它从基础上保证了 第1 0 页 首部师范大学硕士毕业论文w i n d o w s 编程技术简介与分析 组件开发和部署的简化以及,多语青互操作的可能。( 更多有关n e t 技术的介绍 请参考微软公司的相关技术文档) 2 3 2 n e t 框架中的组件对象模型 在m f c 技术出现之前,计算机软件开发人员没有一个标准的途径来整合二 进制类库,除非去参考或者修改源代码。c o m 技术引入以后,开发人员就可以 枢台二进制组件到自己的应用程序中,这种整合的方式就类似于在个人电脑中剐 插圳用一个硬件。但即便c o m 技术拥有者种种的好处,但是在使用这种技术时 必须要面对的大量蹩脚的技术细节问题总是让广大的开发人员头疼不已。 c o m 技术允许开发人员将使用各种不同语青开发出来的大量组件整合在一 起,它要求开发人员必须遵循c o m 的特定规范。开发人员也必须为自己的c o m 铜件提“i 调用的管道机制实现( 组件化的过程) 。 这就意味着,c o m 开发人员要重复1 i 断地编写大量代码来实现这一繁琐的 过程,n e t 就解决了这一问题。在n e t 框架下,所有的类都在二进制的形式下 可被重用,开发人员再也不需要额外去编写代码来支持这种代码的组件化。开发 人员简单的编写一些类,然后使用编译器把它编译为程序集的一部分,而程序集 时自然支持“即插即用”的( 参考我们上一节中的元数据和程序集介绍部分) 。 所以说n e t 框架从一开始就提供给了开发人员一个面向组件开发的可扩 展基础,它所支持的c # 等托管语言都可以被称作是面向组件开发语言。 2 4w 3 c 文档对象模型和d h t m l 文档对象模型 正如本文在第一章1 3 节所提到的,我们希望在m f c 编程框架中提供 “m f c n e t 结对”模型,提供类似文档视图结构的相互依赖对。之所以要有这 样的模型设计是受到了m f c 框架中的“文档一视图”结构对以及m i c r o s o f t o f f i c e 两个成熟的框架模型的启发。通过建立托管和非托管的应用程序对象 ( a p p l i c a t i o no b j e c t ) 之间的连接,我们可以在两个不同的对象模型中遍历对方 的层次结构。 在接下来的2 节中,本文分析两种成熟的对象模型,即:w 3 c 文档对象模 型和m i c r o s o f to f f i c e 剥象模型。通过深入剖析这些模型的设计,可以为我们设 第l l 页 首都师范大学硕士毕业论文w i m o w s 编程技术简介与分析 计自己的m f c 编程框架扩展模型提供有益的参考。 d h t m l 文档对象模犁( t h ed y n a m i ch t m ld o c u m e n to b j e c tm o d e l , d h t m ld o m ) 允许开发者赢接使用w e b 页面中的独立元素,并对它们进行编 程。它提供事件模型,使浏览器可以与用户的输入做出反应、执行脚奉、显示新 内容( 新内容不必每次都从服务器加载) p 1 。在这个编程模型中,每一个w e b 页 而中的元素都支持可编程脚本,他们可以响应用户的交互动作并动态改变网页。 w 3 c 义档对象模型( w 3 cd o c u m e n to b j e c tm o d e l ,w 3 cd o m ) p 1 是一个 半台中立、语言中立的接口,规定脚本对文档内容、结构和风格等的访问和更新。 w 3 cd o m 包括一个模型,它规定了一个组成h t m l 页面和x m l 页面的元素的 标准集、这些元素的组合方式、存取与操纵这些元素的接口1 7 1 。w 3 cd o m 的优 势有于它提供了一个对整个文档的访问模犁,而不仅仅再局限于单一的h t m l 标记( t a g ) 范闱内。d o m 将文档描绘为一个树形( t r e e ) 结构t r e e 的每个节 点表现为一个h t m l 标记或者h t m l 标记内的文本项。树形结构精确地描述了 h t m l 文档中标记问以及文本项间的相互关联性,这种关联性包括c h i l d ( 孩子) 类趟、p a r e n t ( 双亲) 类型和兄弟( s i b l i n g ) 类型。 上述两种文档对象模型是两种主要的w e b 文档对象模型规范,基于文档对 象模型的应用系统具备几个重要特征:首先,可编辑的文档是系统的组成部分, 他们使用标记语言编写。h t m l d h t m l 文档使用超文本标记语言编写。x m l 文档使用可扩展标记语言编写。一个文档中包含了众多的元素,可以使用编辑器 随时编辑修改文档。一个基于文档对象模型的软件系统包含多个独立文档每个 独立文档完成各定的功能,多个文档的有效组织形成应用系统。剥系统的重定制、 扩展的方式为重新编排文档元素、添加删除修改系统中的独立文档、重新组织文 档关系等;其次,文档的高可编程性,可以产生动态内容,可以响应用户的交互 动作:第三,文档的组成元素之间、组成应用系统的独立文档之间松散耦合。第 凹,枷、准协同。功能部件之间使用统一的协议通讯交换数据。 但文档并不仅仅特指网页,办公文档就是一例。最初办公_ 卫= 档仅限于排版格 式化等功能,但随着事件模型的引入他们的可编程性也大大提升。微软公司的 m i c r o s o f t o f f i c e x p 以及m i c r o s o f t o f f i c e 2 0 0 3s y s t e m 就是很好的范例。 第1 2 页 肯都师范大学砸十毕业论文w i n d o w s 编程= 盎术简介与讣析 2 5m i c r o s o f to f f i c e 对象模型 除了基本的文本、图片、超链接等元素外,用户现在可以在o f f i c e 文档中使 用众多界面控件元素( 如按钮) ,插入有特定功能的组件对象( 如日历、表格等) , 使用v b a 技术将它们连接起来形成一个特定的功能应用,实现这一切的基础是 c o m 技术口1 ( 自动化技术) 。如果把这个文档看作一个应用程序,它具备其他传 统应用的用户变互、事件响应等特性,文档与文档之间也可以组织在一起,形成 功能更丰富的应用。面向对象的分析与设计在此类文档对象模型中也得到了很好 。日丈现,顶绂刈象a p p l i c a t i o n 对象代表o f f i c e 应用程序自身,它就像一个总管, 每一个对象部可以使用它按照对象的层次结构来浏览获得其它对象。它可以浏览 到办公文档对象以及其中的每一个作为对象的单元,比如一个图文对象、表格、 数据对象、f o r m 控件以及a c t i v e x 控件等其他被后续插入的组件等。开发者可 以在编辑时或者编辑后使用m i c r o s o f t v i s u a l b a s i c f o r a p p l i c a t i o n s ( v b a 9 1 ) 为各 个对象之间建立连接,安排它们之间的调用与参数传递。 m i c r o s o f to f f i c e 中几乎每个程序都是可二次开发的,这一点得益于m i c r o s o f t o f f i c e 内置的两个二次开发机制:基于c o m 机制的v b a 模型和基于n e t 框架 的托管模型:v i s u a ls t u d i ot o o l sf o ro f f i c e 。m i c r o s o f t 的大多数软件的对象结构 可以通过v i s u a ls t u d i o 提供的工具o l e c o mo b j e c tv i e w e r 考察其类型库得到, 通过引用类型库,甚至可以得到描述对象信息的c + 中头文件。 一个典型的o f f i c e 通常都有一个a p p l i c a t i o n 对象( 或其他一个与之相当的 对象) ,这个对象相当于软件枢纽。多数支持扩展( a d d i n 、p l u g i n ) 的软件都存 在类似的构造。通常,一个系统的a p p l i c a t i o n 对象可能是一个c o m 对象,或者 是一个n e t 对象,如果一个系统存在这类对象,那么这个系统就基本具备支持 a d d i n 、p l u g i n 的机制了。 第1 3 页 n 部帅他凡学倾 牛业论文w i n d o w s 编程技术简介与分析 豳毯霸 ;曦颡 5 匦圈亟夏) 匿涵强豳 潋基爱= = 蹶纛戮甄强 一绥鳓髓童蠹 匦鎏西霾) 匦酾圜疆 ;鹂t 嚣 蹙黼銎豳透豳匦圆 o f f i c e 系统实际上是桌面应用对于文档对象模型的实施,传统桌面开发框架 开发的成熟技术和计算机本地资源的利用使这种对象模型的可编程性更加强大, 丌发人员n 以编辑各种界面元素、功能单元,使用v b a 将独立文档组织成系统 应用。但o f f i c e 作为通用的软件系统开发基础仍有不足,首先,办公文档应用在 功能体现上有很大的局限性;其次,编程手段单一,开发者的选择性较小。 现有的桌面软件系统的开发技术需要保留,同时开发者需要引入新的系统模 型,这就需要一个新的标准化开发基础规范,包括一致的文档描述方式,一致的 开发框架,通讯标准。以n e t 框架为代表的现代编程框架已经为新模型的实施 提供了可能性,而下一代的编程框架将会为每一个应用系统提供统一的模型基 础,微软即将推出的“l o n g h o r n 应用程序模型”( l o n g h o ma p p l i c a t i o nm o d e l ) 就是其中的代表。 参考m i c r o s o f to f f i c e 的对象模型,我们在要构造可以使用新技术扩展的 m f c 编程框架中,内置一个a t l 对象或n e t 对象。设计a p p l i c a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026河南投资集团有限公司兴平金源环保有限公司招聘1人笔试参考题库及答案详解
- 2026湖南长沙矿冶院智能装备研究所副所长(人工智能方向)选聘1人笔试备考试题及答案详解
- 2026浙江工商大学继续教育学院劳务派遣员工招聘笔试备考试题及答案详解
- 2026河南鹤煤总医院(鹤壁市第二人民医院)招聘28人笔试备考题库及答案详解
- 乳制品加工产品包装材料采购合同
- 2026内蒙古自治区民政厅部分所属事业单位竞争性招聘12人笔试参考题库及答案详解
- 新能源产品组合投资合作协议
- 研学旅行活动经费管理合同
- 2026江西吉安职业技术学院第一批非编人员招聘19人笔试备考题库及答案详解
- 2026年金华东阳市皮肤病医院招聘编外人员3人笔试模拟试题及答案详解
- 2026届山东省青岛市高三5月三模历史试题(含答案)
- 广东省惠州市一中教育集团2025-2026学年七年级下学期语文期中考试试卷(解析版)
- 2026年安全生产月:重大危险源管控与隐患排查治理课件
- 2026广西百色市那坡县劳动人事争议仲裁院招聘编外工作人员5人笔试备考试题及答案解析
- 2026年三支一扶考前押题公共基础知识题库(含答案)
- 大型屋面网架整体拆除方案
- 2026年水利水电工程施工企业“三类人员”安全生产考核题库高频重点提升附参考答案详解(夺分金卷)
- 2026中考英语作文热点押题12篇范文
- GB/T 33833-2026城镇供热服务
- 民主管理委员会工作制度
- 国家基层糖尿病足防治管理指南2024版
评论
0/150
提交评论