




已阅读5页,还剩41页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
西南大学硕士学位论文 摘要 基于c o m 的组件创建的研究 计算机软件与理论专业硕士研究生张望 指导教师张为群教授 摘要 自上个世纪9 0 年代以来,面向对象的软件开发技术成为软件开发的主流技术,使得基于面向 对象的软件复用被视为解决软件危机的一条现实可行的途径。按照复用的不同级别,软件复用被分 为设计复用和代码复用。 设计模式是设计层次的软件复用技术。工厂模式是其中主要的一种。所谓工厂,就是一个创 建组件的类,它向客户隐藏了组件的创建细节。使得客户的职责单一化,即只使用组件而不创建组 件。 c 傩是一种组件技术,它是代码层次的软件复用技术。c o m 利用传统工厂模式来创建0 0 m 组件, 并让客户自己管理内存资源。这使得传统c o m 模型组件创建过程极其复杂,内存管理极其繁琐且易 出错。 本文针对传统的c o m 模型在组件创建和内存管理方面存在的缺陷做了以下工作: 1 针对传统工厂模式的缺陷提出了简单工厂模式的一种类注册实现方式,工厂不再负责 组件的创建而是用一个容器保存组件的名字和对应的创建函数,当客户向工厂索取组 件的时候,工厂就搜索这个容器,找到客户需要的组件的创建函数,然后由这个函数 创建组件并返回给客户。使其更符合“开放封闭”原则。 2 提出了使用类注册工厂模式来优化c o m 组件创建过程。即将c o m 中的工厂用类注册工 厂替换。 3 提出了用句柄类来管理c o m 内存资源,句柄类是一个封装了内建指针的c + + 类,由它 代替客户管理c o m 内存资源。 4 通过一个实例来说明了优化后c o m 组件的创建过程及其内存管理方式,验证了类注册 工厂模式和句柄的可行性和有效性,该实验表明优化后的c o m 模型使得系统的结构更 简单,系统更易扩展。 关键词:工厂模式o o m 类注册旬柄 西南大学硕士学位论文 a b s t r a c t a s t u d y a b o u t i m p r o v i n gc o m p o n e n t b u i l d b a s e do nc o m m a j o r :c o m p u t e rs o f t w a r ea n dt h e o r y d i r e c t i o n :s o f t w a r ee n g i n e e r i n g s u p e r v i s o r :p r o f z h a n gw e i q u na u t h o r :z h a n gw a n g a b s t r a c t s i n c el a s t9 0 s ,o b j e c t - o r i e n t e ds o f t w a r ed e v e l o p m e n tt e c h n o l o g yh a sb 啦m ) m et h em a i nt e c h n o l o g yh a s o r w a r ed e v e l o p m e n t ,i tc a u s et h es o f t w a r e - r e u s et h a tb a s e do i lo b j e c t - o r i e n t e db er e g a r d e da saf e a s i b l e a p p r o a c hw h i c hc a ns o l v et h es o f t w a r ec r i s i s a c c o r d i n gt od i f f e r e n tl e v e l so fr e u s e ,s o r w a r e - r e u s ew a s d i v i d e di n t od e s i g nr e u s ea n dc o d e 玎朗l s e d e s i g np a t t e r nw a sas o f t w a r en 孔l s et e c h n o l o g yo i ld e s i g nl e v e l f a c t o r yp a t t e r nw a so n eo ft h o s e p a t t e r n s f a c t o r yw a sac l a s st h a tb u i l dt h ec o m p o n e n t s ,i th i dt h eb u i l dd e t a i l st oc l i e n t s ,m a d et h ec l i e n t s r e s p o n s i b i l i t ys i n g l e n e s s l y , t h a tm e a n sj u s tu s et h ec o m p o n e n ta n dd o nn o tb u i l di t c o mw a sac o m p d n 蹦tt e c h n o l o g y , i tw a st h ec o d er e q 1 s ci ns o r w a r e1 1 朗l 跎t e e h n o l o g y c o mu s e d t r a d i t i o n a lf a c t o r yp a t t e r nt ob u i l dc o mc o m p o n e n t , a n di n a k et h ec l i e n t sm a n a g et h em e m o r yr e s o l l r e e b yt h e m s e l v e s i tm a d et h eb u i l d i n gp r o c e s so ft r a d i t i o n a lc o mm o d e lc o m p o n e n t sw a se x t r e m e l y c o m p l e x i t y , t h em a n a g e m e n to fm e m o r ye x t r e m e l yt e d i o u sa n d c a nm a k eam i s t a k ee a s i l y a b o u tt h et r a d i t i o n a lc o mp a t t e r nd e f e c t so nc o m p o n e n tc r e a t ea n dm e m o r ym a n a g e m e n t , t h i s p a p e rh a sd o n ew o r k s a sf o l l o w : 1 p r o p o s eac l a s sr e g i s t r a t i o nr e a l i z a t i o no fs i m p l ef a c t o r yp a t t e r n f o rt h ed e f e c t so nt h e t r a d i t i o n a lf a c t o r yp a t t e r n , f a c t o r yd i d n tt a k er e s p o n s i b i l i t yo ft h ec o m p o n e n t s b u i l d i n g , b u tu s e ac o n t a i n e rt oc o l l s e r v et h en a n l eo ft h ec o m p o n e n t sa n dt h e i rb u i l d i n gf u n c t i o n s f a c t o r y s e a r c h e st h ec o n t a i n e r w h e nt h ec l i e n t sa s kt h ef a c t o r yf o rt h e i rc o m p o n e n t s ,f i n d st h e c o m p o n e n t s b u i l d i n gf u n c t i o n st h a tc l i e n t sn e e d , a n dt h e nb a c kt ot h ec l i e n t st h r o u g ht h e f u n c t i o nb u i l d i n gc o m p o n e n t t h i sm a d ei tm o l ea c c o r d 诵l h “o p e n - c l o s e ”p r i n c i p l e 2 p r o p o s eaw a yt h a to p t i m i z ec o mc o m p o n e n t sb u i l dp r o c e s su s e dt h ec l a s sr e g i s t r a t i o nf a c t o r y p a t t e r n i no t h e rw o r d s ,r e p l a c i n gt h ec o mf a c t o r yu s et h ec l a s sr e g i s t r a t i o nf a c t o r y 3 p r o p o s et h eh a n d l ec l a s st om a n a g ec o mm e m o r yr e s o u r c e s ,ah a n d l ec l a s si sac + + c l a s s w h i c hp a c k a g e si n s i d eb u i l dp o i n t e r , t h eh a n d l ec l a s sc a nm a n a g et h ec o mm e m o r yr e s o u r c e i n s t e a d0 ft h ec l i e n t s 4 u s ea ni n s t a n c et oe x p l a i nc o mc o m p o n e n t sb u i l dp r o c e s sa n di t sm e m o r ym a n a g e m e n ta f t e r o p t i m i z e ,v a l i d a t e t h ef e a s i b i l i t ya n dv a l i d i t yo fc l a s sr e g i s t r a t i o nf a c t o r yp a r e r na n dt h e h a n d l e s ,t h i se x p e r i m e n ti n d i c a t e st h eo p t i m i z e dc o mp a t t e r ns l a k et h es y s t e m ss t r u c t u r e m o r es i m p l e ,t h es y s t e mc a n b ee x t e n d e dm o r ee a s i l y k e y w o r d s :f a c t o r yp a t t e r n ,c o m ,c l a s sr e g i s t r a t i o n ,h a n d l e i l 独创性声明 本人提交的学位论文是在导师指导卜进行的研究! t :1 1 ;及取得的 研究成果。论文中引用他人已经发表或州扳过的研究成:泶,义l ,l 二加 了特别标注。对本研究熨学位论文撰写曾做f n 贞献的老帅、j i f j 友、川 仁在文t ,作丫明确i 兑明并表示衷心感谢。 学位论文作者:签字日期:年月 日 学位论文版权使用授权书 本学位论文作者完全- j ,解p 写南人学行关保帮、仗川学位论义的规 定,有权保留岁 :向幽家有关部i j 或机构送交沦文的复l :lj f ,| :和磁盘,允 许沦义被a 阅和借阅。本人授权西南人学研究,卜院( 筹) 1 1 j 。以将r 位 论文的拿部或 ; i j 分内容编入有关数据库进行检索,刚以采川影印、缩 印或扫描等复制手段保存、汇编学位论文。 ( 保密的学位论文在解密后适用本授权书,本论文:口不保密, 口保密期限至年月止) 。 学位论文作槲极乃 签字日期:年。月 日 导师签名: 签字日期: 西南大学硕士学位论文第1 章绪论 ! i i i i i i 一, , i 鼍皇曼量曼曼皇皇 1 1 研究背景与现状 第1 章绪论 从1 9 4 6 年第一台计算机诞生以来,软件开发技术就在不断地向前发展,从结构化程序设计到面 向对象程序设计,人们一直在寻找更好的编程模式来更好的解决软件重用和维护。结构化程序设计 是通过编写可以重复调用的功能模块从而减少代码的编写量,经过测试子程序,使维护的难度降低。 但是按照这种方法设计的程序,可以重用的功能模块小,数量大,耦合关系复杂,当系统功能变得 复杂的时候,维护起来就更加的困难。随着软件科学的不断发展,软件的应用环境更加广阔,从而 对软件的要求更高,这就使得软件的设计更加困难。于是,人们提出了面向对象的程序设计思想。 按照面向对象的程序设计思想,软件重用可分为软件设计的重用和组件的重用。 设计模式是面向对象编程最为成熟的软件设计的重用方案以及面向对象的设计的最新进展,设 计模式可以帮助设计师对日常系统设计工作中所遇到的很多设计问题给出结构合理,易于重用,易 于维护的解决办法。u 一3 1 组件技术是9 0 年代初出现的一种新技术,组件具有面向对象的特征。一个软件组件是由契约性 说明接口和明确的上下文相关性组合的单元。可以被独立地调度,而且常常由第三方开发。组件具 有功能独立性、高度的可重用性、与语言和平台无关性等特点。组件是后期绑定的二进制程序。组 件是封装成独立的二进制单元并且可复用的程序。可以通过面向对象的方式进行访问,组件是语言 无关的,组件是后期绑定的( 相对于编译时链接) ,在最终产品环境中,组件可以通过不同部署策略 而实现部分替换。n 射 1 2 论文主要内容和主要工作 本文的主要研究内容及相关工作包括: 1 ) 对现有设计模式的工厂模式进行了详细的阐述,并指出其存在的问题。 2 ) 对软件组件进行了总体介绍,阐述了组件的产生与发展,并与传统的软件开发技术进行了对 比。随后对c 傩思想进行了详细的研究,介绍了c 嘲的基本原理和相关技术 3 ) 分析了传统的c o m 模型在组件创建与内存资源管理方面存在的缺陷。 4 ) 重点对传统的工厂模式进行了改进和设计了句柄类,并将改进后的工厂模式应用于c 嘣组件 技术,旬柄用来管理c o m 资源,对c 伽组件模型加以改进和优化,使其更加适用于具体的软件开发。 1 3 创新点 1 ) 将设计模式的理论和组件对象模型结合起来研究。 2 ) 基于c o m 分析工厂模式,利用改进后的简单工厂模式解决c 似中一个具体工厂类只能剑建一 个具体组件类的实例的问题。 3 ) 用句柄类管理c o m 资源。 西南大学硕士学位论文第1 章绪论 1 4 论文的组织结构 本文总共分为六章,组织方式如下: 第l 章为本文的绪论,介绍了本文的目的和意义,简要叙述了设计模式和c o m 组件,简要说明了 本文的主要内容和主要工作以及论文的组织结构。 第2 章介绍了设计模式的知识,对其中的工厂模式做了深入的讨论,并指出其存在的缺陷 第3 章介绍了c 伽组件技术的原理,实现方式,重点探讨了c 伽组件技术所涉及到的工厂 第4 章针对第2 章提出的问题,提出了一种解决方案。并分析了句柄的实现原理。 第5 章将新的解决方案应用于c 伽组件模型,使得c 咖组件模型得以改进和优化。 第6 章通过一个按照改进后c 吨模型建立简单系统对比分析了传统的c 伽模型。 第7 章结论与展 2 西南大学硕士学位论文第2 章传统工厂模式 第2 章传统工厂模式 所谓工厂,其实就是一个用于创建其他类实例的一个对象。在软件系统中引入工厂。主要是为 了向客户隐藏类的实例化细节,工厂模式虽然是主要的一种设计模式,应用非常广 泛。e j b ,r i l l ,c o m ,c o r b a ,s w i n g 中都可以看到此模式的影子,它是最重要的模式之一,工厂模式是一 种创建性模式,它定义了一个类如何实例化另一个类。当一个类无法预料要创建哪种类的对象或是一 个类需要由子类来指定创建的对象时就需要用到工厂方法模式了。简单说来,工厂模式可以根据不 同的条件产生不同的实例,当然这些不同的实例通常是属于相同的类型,具有共同的父类。工厂类把 创建这些实例的具体过程封装起来了,简化了客户端的应用,也改善了程序的扩展性,使得将来可以 做最小的改动就可以加入新的待创建的类。通常我们将工厂类作为一种标准的创建对象的方法,当发 现需要更多的灵活性的时候,就开始考虑向其它创建型模式转化。 工厂模式,也叫做说虚构造器,在这个模式中有一个角色叫做工厂,这个工厂知道产品构造时 候的具体细节。工厂模式的好处就在于将工厂和产品之间的耦合降低,将具体产品的构造过程放在 了具体工厂类里面。工厂模式,实际上就是隐藏了实现的细节,用户不用关心对象是怎么创建出来 的。传统的工厂模式分为三类:哺川 1 ) 简单工厂模式。又叫静态工厂方法模式 2 ) 工厂方法模式。又叫多态性工厂模式或虚拟构造子模式。 3 ) 抽象工厂模式。又叫工具箱模式 2 1 简单工厂模式 2 1 1 简单工厂模式的结构和角色 简单工厂模式就是由一个工厂类根据传入的参数决定创建何种产品的实例,图2 - i 以一个示意性 的实现为例说明简单工厂模式的结构。 图2 - i 从上图可以看出,简单工厂模式涉及到的的角色有: 1 1 ) 工厂类角色,这个角色是该模式的核心,含有与应用程序密切相关的商业逻辑。工厂类在客 户的直接调用下创建产品对象。 西南大学硕士学位论文 第2 章传统工厂模式 量曼鼍曼皇皇舅p l , l i 曼曼量曼曼蔓曼! 曼毫 2 ) 抽象产品角色,这个角色是该模式下所创建对象的父类,或者它们所拥有的共同接口。 3 ) 具体产品角色,该模式所创建的任何对象都是这个角色的实例。 2 1 2 简单工厂模式的实现 在简单工厂模式下,工厂类拥有一个创建函数,该函数的原型如下: p r o d u c t * c r e a t e ( c h a r * n a m e ) 该函数通常是由庞大的s w i t c h c a s e 语句组成,根据函数参数的不同构建不同的对象,在真实的 系统中,产品可以形成很复杂的等级结构,这个时候,简单工厂模式任然采用的是一个工厂类。这 样以来,产品的等级结构就不会反映到工厂中,如果产品的等级结构发生变化也不会影响到工厂类。 如果具体的产品类之间没有共同的逻辑结构,那么抽象产品类就可以由一个简单的接口来扮演, 相反,如果这些具体的产品类之间确实有共同的逻辑结构,那么这些公共的逻辑就应该移到抽象类 里面。 2 1 3 简单工厂模式的优缺点。 简单工厂模式的优点是,该模式的核心是工厂类,它含有必要的逻辑判断,可以决定在什么时 候创建哪一个产品的实例,于是客户端就可以免除直接创建产品对象的责任,而仅仅负责使用具体 的产品,这样做就有效的实现了对责任的分割。 正是因为工厂类集中了所有产品的创建逻辑,形成了一个全能类,当产品类有不同的接口种类 时,工厂类就需要判断在什么时候创建什么产品,这种对时机的判断和对哪一种具体产品的创建的 逻辑混在了一起,使得系统难以扩展。这一缺点在工厂方法模式中得到克服。啪 2 2 工厂方法模式 2 2 1 工厂方法模式的结构和角色 为了说明工厂方法模式的结构,图2 - 2 给出了一个示意性的系统类图。 7 i n t e r f a c ei n t e r f a c e c r e a t o r p r o d u c t 伞伞伞伞 c r e a t o r lc r e a t o r l c o n e r e t e p r o d u c t l c o n c r e t e p r o d u c t 2 + f a c t o r y p r o d u c t+ f a c t o r y p r o d u c t+ c o n e r e t e p r o d u c t lc o n e r e t e p r o d u c t 2 下t l 图2 _ 2 从上图可以看出,在使用了工厂方法模式的系统涉及到一下几个角色: 4 西南大学硕士学位论文第2 章传统工厂模式 1 ) 抽象工厂角色,这个角色是该模式的核心,它是与应用程序无关的,任何在模式中创建对象 的工厂都必须实现这个接口。 2 ) 具体工厂角色,这个角色是实现了抽象工厂接口的具体类,它有与应用密切相关的逻辑,并 且受到应用程序的调用以创建具体的产品对象。 3 ) 抽象产品角色,该模式下所创建产品的父类型,也就是产品对象共同的父类或者共同拥有的 接口。 4 ) 具体产品角色,这个角色实现了抽象产品角色所声明的接口。该模式所创建的任何对象都是 这个角色的实例。 2 :2 2 工厂方法模式和简单工厂模式 工厂方法模式和简单工厂模式在结构上有很明显的不同,工厂方法模式的核心是一个抽象类, 而简单工厂模式的核心却是一个具体类,工厂方法模式可以允许很多具体工厂类继承创建行为,从 而可以成为多个简单工厂模式的综合,工厂方法模式退化以后可以成为简单工厂模式。在工厂方法 模式下,客户端不必知道所创建产品的真实类型,这种多态性设计将工厂类选择创建哪一个对象, 如何创建这个对象的细节完全封装在具体工厂的内部。 如果系统需要加入一个新的产品对象,你们所要做的就是在系统中加入这个产品类以及它所对 应的工厂类,没有必要修改客户端,也没有必要修改抽象工厂角色或已有的具体工厂角色。对于增 加新的产品类而言,这个类完全支持“开放封闭”原则。1 2 2 3 工厂方法模式的优缺点 和简单工厂模式相比,工厂方法模式完全的支持开放封闭原则,也就是说当系统中有新的产品 对象加入的时候,不必修改系统已有的代码,只需要新增产品类和工厂类,也即是对修改封闭对扩 展开放。但工厂方法模式虽然降低了客户和产品之间的耦合度,但是客户和工厂之间的耦合度还是 很大,系统中有多少产品类就有多少工厂类,这种一对一的关系在c o m 中有着典型的应用。 2 3 抽象工厂模式 2 3 1 抽象工厂模式的结构和角色 假设一个系统需要一些产品对象,而这些产品对象又属于一个以上的等级结构,那么为了把使 用这些产品与创建这些产品的责任划分开来,那么就需要引进抽象工厂模式,图2 - 3 给出了该模式的 结构图。 5 西南大学硕士学位论文第2 章传统工厂模式 图2 - 3 从上图可以看到,在使用了抽象工厂模式的的系统中涉及到以下几个角色: 6 ,7 1 ) 抽象工厂角色,这个角色是该模式的核心,它是与应用程序无关的,任何在模式中创建对象 的工厂都必须实现这个接口。 2 ) 具体工厂角色,这个角色是实现了抽象工厂接口的具体类,它有与应用密切相关的逻辑,并 且受到应用程序的调用以创建具体的产品对象。 3 ) 抽象产品角色,该模式下所创建产品的父类型,也就是产品对象共同的父类或者共同拥有的 接口。 4 ) 具体产品角色,这个角色实现了抽象产品角色所声明的接口。该模式所创建的任何对象都是 这个角色的实例。这是客户最终想要的东西。 2 3 2 抽象工厂模式的使用时机 在以下情况下,应该考虑使用抽象工厂模式: 1 ) 一个系统不应当依赖于产品如何被创建,组合和表达,这一点适用于所有的工厂模式。 2 ) 一个系统的产品有多于一个的产品族,而系统只使用某一族的产品。 3 ) 属于同一个产品族的产品是在一起使用的,这一约束必须是在系统的设计中体现出来。 4 ) 系统提供一个产品类的库,所有的产品以同样的接口实现,从而使得客户端不依赖于实现。 2 3 3 抽象工厂模式的优缺点 如果产品的等级结构不变,增加新的产品族也就是说在每一级增加一个新的产品角色,由于工 厂的等级结构与产品的等级结构是平行的,因此当产品的等级结构发生了变化,工厂的等级结构也 要发生相应的变化,而如果是在原有的等级结构上出现了新的元素,那么只需要在工厂的等级结构 中加入新元素就可以了。 6 西南大学硕士学位论文第2 章传统工厂模式 但是,当产品的等级结构发生了变化,那么就必须修改所有的工厂,给每一个工厂类增加一个 新的工厂方法,这显然是违反“开放封闭”原则的。 总的说来,抽象工厂模式以一种倾斜的方式支持增加新的产品,它为新产品族的增加提供方便, 而不能为新的等级结构的增加提供方便。 2 4 小结 通过前面的讨论可以知道,传统的工厂模式存在一定的缺陷,首先,简单工厂模式和抽象工厂 模式都不是完全的支持“开放封闭”原则,工厂方法模式虽然支持“开放封闭”原则,但是它极大 的增加的客户与工厂之间的耦合度。如何降低系统的耦合度同时又能很好的支持“开放封闭”原则 是一个亟待解决的问题,第5 章提出了一种通过类注册的方式来改进简单工厂模式,改进后的模式具 有所有工厂模式的优点,同时消除了它们的缺点。 7 西南大学硕士学位论文 第3 章组件技术和c o m 模型 3 1 组件技术 3 1 1 软件组件的产生 第3 章组件技术和c o m 模型 一个软件系统通常都是由编译好的二进制文件组成的,一旦编译完成,在重新发布新版本以前, 系统很难甚至根本不会发生变化。操作系统,客户需求以及硬件的改变都必须等到整个系统被重新 编译。显然这种方式已经不能适应大型复杂的软件系统,当系统越来越复杂的时候传统的开发模式 生产出来的产品变得难以维护和扩展。于是,人们认识到系统发布以后不应该保持一成不变的静止 状态。必须找出种方法来给已经发布的系统不断的注入新的活力。于是将单个系统分隔成多个独 立的部分仗义的解决方案得到了迅速的推广,组件模型应运而生。如图3 - 1 所示。【i 是竭 广 广_ 1 l 单个应用程序 if 组件应用程序 l 团田 图3 1 这样做有一个明显的好处,那就是随着系统的不断更新,新的组件可以取代旧的组件( 如图3 - 2 ) 而不用对整个系统程序进行重新的编译链接。这样的系统就不再是传统方式生产的静态产品,而是 可以不断的向系统添加新的组件而使系统趋于完善。并且可以组合已有的组件建立全新的应用系统。 l竺竺坚望堡堂i 匡口匡口 匡口区巫堕二 i 堡竺兰 i 图3 - 2 传统的方式是把系统分割成模块,文件,类,然后就把它们编译链接成一个单个的二进制文件。 它与组件建立系统的过程有很大的不同。一个组件类似一个小型的应用程序,都是编译链接好可以 使用的,系统就由多个这样的组件有机的组合在一起而得到。各定制的组件可以在运行期间同其他 组件连接起来构成一个复杂的系统。在系统需要改进的时候,只需要将需要改进的版本替换掉就可 以了 8 西南大学硕士学位论文第3 章组件技术和c o m 模型 3 1 2 软件组件的模型 组件是那些能够容易的组装起来,以高效率开发应用程序的可复用的软件部分,组件技术的核 心就是组件的模型,组件模型定义了组件的结构,外部操作组件的接口以及组件之间的相互作用, 组件和容器是组件模型最基本的元素,组件提供了创建实际组件的模板,容器则定义了讲组件集中 起来成为有用结构的方法,提供了安排组件以及与其他组件相互作用的环境。组件模型还要提供各 种形式的服务,功能完善的组件模型可支持下列六种服务:1 1 ) 自我描述,是一种组件向外界展示自身功能的机制,通过自我描述,程序可以向组件提出询 问以得到组件的功能并且与组件相互作用,它负责决定组件对程序以及其他组件的外观。 2 ) 持久性,持久性是指将组件永久的存储在存储介质上的方式。存储和获取的信息是组件的内 部状态以及它与容器乃至其他组件的关系。 3 ) 事件处理,这是一种让组件拥有事件通知的机制。这种通知是与组件的内部变化相对应的。 通知的对象是应用程序或者其他的组件。 4 ) 布局,是指可视化组件的物理布局,包括在同一个容器中与其他组件共享的空间布局和组件 自己空间内其他组件的布局。 5 ) 对应用程序建立起的支持,这使得用户能以图形的方式在组件外构建复杂的系统。通常这由 对话框组成,使用户能以图形界面的方式来编辑组件的属性。 6 ) 对分布式计算的支持,随着网络带宽及其重要性的提高,对由分布在网络上的多个部分组成 的应用程序的需求毫无疑问将保持强劲的。组件架构可以使得开发这类分布式应用的过程得以简化。 3 1 3 软件组件的优点 根据软件组件的思想,应用程序可以被分割成小的可复用的组件并在运行时将这些组件有机的 组合起来以形成新的软件系统。每一个组件都可以被独立的升级,这就使得软件系统可以不断的完 善,适用组件还有一些可以使对已有系统的升级更加方便和灵活的优点,如应用程序的定制等。m 1 用户通常希望他们能够定制他们的系统从而使系统按照他们自己的工作方式那样工作,组件架 构本质上是可以定制的,因用户可以用更能满足他们需要的组件来将某个组件替换掉。如图3 - 3 所示。 田田 匡口叵 匦口匡 匡口匦习匦 匡口 巨e 二二二 匦互二二二 图3 - 3 3 1 4 软件组件的实现条件 使用组件的优点直接来源于可以动态的将它们插入和卸出系统。为了实现这种功能,所有的组 件必须满足以下两个条件。n 2 1 1 ) 动态链接,在软件系统中使用动态链接使得当用户改变其中的某个组件时不需要将所有的程 西南大学硕士学位论文第3 章组件技术和c o m 模型 序全部重新编译连接。 2 ) 信息封装,根据软件组件的思想,一个软件系统是由组件组装而成的,当系统需要更新时。 就将需要更新部分同系统断开然后将新的组件连接上去,显然为了避免重新编译和链接程序,新的 组件必须按照同样的方式连接到系统中。不论系统是否支持动态链接,如果改变了某个组件同其他 组件的连接方式,那么系统的整体性就破坏了。这显然违背了初衷。 对于一个应用程序或者组件,如果使用了其他的组件,称之为一个客户,客户通过借口同组件 进行交互,如果组件的接口没有发生变化,那么就不需要修改客户,反之亦然。因此,为了使得系 统易于维护,客户和组件都应该尽可能的不改变接口。这就意味着他们必须封装,即是组件和客户 的内部实现细节不能反映到接口中,接口同内部实现细节的隔离程度越高,组件或客户发生变化时 对接口的影响就越小。这种将客户同组件实现相隔离开来的要求对组件加上了一些限制,如下: 组件必须将其实现所用的编程预言封装起来。 组件必须以二进制的形式发布。 组件必须可以在不妨碍已有用户的情况下被升级。 组件在网络上的位置必须可以被透明的重新分配。 3 2c o m 模型简介 3 2 1c o m 的产生 对象链接及嵌入的m i c r o s o f t 版本被称为o l e 。o l e 的第一个版本使用的是动态数据交换作为客 户与组件之间的通信方式。并没有引入c o m ,动态数据交换是在w i n d o w s 消息传递的架构上建立起 来的,但是这种方式非常的慢,并且要编写正确的动态数据交换的代码也十分的困难,另外这种方 式也不太灵活。于是m i c r o s o f t 于1 9 9 3 年提出了组件对象模型,也就是c o m 。n 羽 相对于动态数据交换而言,c 伽更小,更快。更灵活,由于这个原因,o l e 的第二个版本就转而 使用了c o m 。c o m 规范是一套为组件架构设置标准的文档,提供了一种编写与语言无关的能够按面向 对象a p i 形式提供服务的组件的方法。c o m 具有一个被称作c o m 库的a p i ,它提供了对所有客户及组 件都非常有用的组件管理服务。c o m 库可以保证对所有组件的大多数重要的操作都可以按相同的方 式完成。 3 2 2c 0 麓的概念 c o m 是一个如何建立组件的规范,它提供了一些客户和组件都应该遵循的标准,这些标准保证 了客户和组件能够在不影响对方的前体现更新。也可以把c o m 当做一种编程的思想,就像设计模式。 c o m 并不是一种计算机语言。c o m 所说明的是编写组件的方法,但具体选用哪种语言来编写组件 是完全自由的。c o m 也不等同于d l l ,实际上c o m 是使用了d l l 来给组件提供动态链接的能力,对于 可以用d l l 来解决的问题,用c o m 都能更好的解决。 c o m 不仅仅是一套a p i ,这些都需要具体的实现。c o m 具有一个被称作是c o m 库的a p i ,它提供 的是对所有客户及组件都非常有用的组件管理服务。c o m 库可以保证对所有组件大多数重要的操作 都可以按相同的方式完成。同时,c o m 库也可以节省开发人员花在组件以及客户的实现上的时间。 可以把c o m 看做是一种编写程序的方法,可以在任何操作系统上按照c o m 风格进行编程,同结 1 0 西南大学硕士学位论文第3 章组件技术和c o m 模型 m 一一 !i,uq ! i l la ! i 皇皇曼鲁寡量皇曼曼鼍曼曼曼曼曼鲁鼍皇鼍曼曼曼黑鼍鼍曼蔓蔓皇舅皇曼曼曼曼皇皇 构化编程及面向对象编程一样,c 侧也是种组织软件的方法。1 3 3c o m 接口 根据c o m 规范,接口就是一切。在客户看来,一个组件其实就是接口的集合。客户只有通过接 口才能使用c 傩组件,组件本身是接口的实现细节。一个组件可以从软件系统中删除并用另一个组 件替代,只要新的组件和旧的组件支持相同的接口只要接口不变,那么组件可以任意更换,接口 对一个软件系统产生决定性的作用。使用组件来构造软件系统的最大优点在于可以复用软件系统的 结构。【1 3 1 3 3 1c o m 接口的内存模型 接口定义了一组成员函数,这组成员函数是组件对象暴露出来的所有信息,客户程序利用这些 函数获得组件对象的服务。n 客户程序用一个指向接口数据接口的指针来调用接口成员函数,如图3 - 4 所示 图3 4 接口指针实际上又指向另一个指针,这个指针p v t a b l e 指向一组函数组成的接口函数表,这个 函数表叫做v t a b l e ,接口函数表中的每一硕为4 个字节长的函数指针,每个函数指针与对象的具体 实现连接起来。对于一个接口来说,它的虚函数表v t a b l e 是确定的,因此接口的成员函数的个数是 不变的。而且成员函数的先后顺序也是不变的,对于单个的成员函数而言,参数和返回值也是确定 的,所有的这些信息都必须在二进制一级确定,不管什么语言,只要能支持这样的内存结构就可以 定义接口。关于c 伽接口的定义,有如下几点需要说明: 每一个接口成员函数的第一个参数为t h i s 指针,这是因为接口本身并不能独立使用,它必 须顶存于某个c 叫对象上 在接口成员函数中,字符串必须用u n i c o d e 字符指针。 不仅成员函数的参数的类型是确实的,而且应该使用同样的调用习惯。 图3 - 4 给出了接口的二进制结构,但从图中看不到c o m 接口与c o h l 对象之间的关系。c o x 对象往 往有自己的属性数据,这些属性数据反映了对象的状态。例如,类a 实现了接口i ,类a 的两个对 象b 和c ,则显然两个对象公用了成员函数,但是数据属性是不能公用的,于是内存结构如图3 5 所 示。 西南大学硕士学位论文第3 章组件技术和c o m 模型 图3 - 5 在以上给出的两个模型图中,每个接口的成员函数都包含一个t h i s 指针,接口成员函数可以访 问到对象的属性数据。实际上,还可以采用其他的方法来实现接口,只要接口成员函数中t h i s 指针 与对象数据能建立正确的连接,在接口成员函数中可以访问到对象的数据即可。 3 3 2c 0 奠接口的特性 1 ) 二进制特性,接口规范并不建立在任何编程语言的基础上,而是规定了二进制一级的标准, 任何语言只要有足够的数据表达能力,它就可以对接口进行描述,从而可以用于与组件有关的程序 开发。 2 ) 接口不变性,接口是客户与组件对象之间的桥梁,接口如果经常发生变化,则客户和组件也 要经常变化,这对于系统的开发非常的不利,也不符合组件化程序设计的思想。 3 ) 继承性,c 傩接口具有不变性,但不变性并不意味着接口不再发展,接口也可以继承发展。 接口继承只是说明继承,并不是实现继承。 4 ) 多态性,多态性是面向对象系统的重要特征,c o g 对象也具有多态性,其多态性任然是通过 c o m 接口体现。多态性使得客户程序可以用统一的方法处理不同的对象,只要它们实现了同样的接 口。【j 3 4c o g 组件 c o g 接口定义了c o g 组件的功能,但是功能的具体实现则是由具体的c o g 组件来完成的。c 嘣 组件可以实现任意数目的接口,实现的方式是多重继承。接口和组件都需要一个唯一的标识i d 来识 别自身。 3 4 1 关于引用计数 所有的c o m 接口都继承了l u n k n o w n ,每个接口的v t a b l e 的前三个函数都是q u e r y i n t e r f a c e ,a d d r e f , r e l e a s e ,如图3 - 6 所示。 1 2 西南大学硕士学位论文第3 章组件技术和c o m 模型 曼曼苎皇曼曼i-! , i 1 1 i ii i i , i ,- 皇曼曼曼曼曼曼鼍 客户 一咖浦针卜 q u e r y i n t e r f a e e q u e r y i n t e r f a c e p d a d d r e f _ a d d r e f r e l e a s e _ r e l e 钺沿 f x f x 图3 6 。 这就使得所有的c o m 接口都可以被当成i u n k n o w n 接口来处理,如果某个接口的v t a b l e 中的前 三个不是上面提到的这三个的话,那么这个接口就不是一个c 伽接口,这样一来所有的接口指针就 都i u n k n o w n 指针,于是客户就不需要单独维护一个代表组件的指针,客户关心的仅仅是接口指针。 a d d r e f 和r e l e a s e 是一种名为引用计数的内存管理技术,通过引用计数组件可以实现将自己删 除。每一个c 伽组件都维护一个引用计数的数值,当客户获取一个组件,或者是创建一个已有接口 的另外一个引用的时候,客户就会通过a d d r e f 增大引用计数的值,当客户使用完一个组件的时候, 就会通过r e l e a s e 减少引用计数的值,当组件的引用计数值为0 的时候,组件就会删除自己,释放内 存。为了正确的使用引用计数,需要注意一下三点: 1 ) 在函数返回之前调用a d d r e f 。对于那些需要返回接口指针的函数,在返回之前应该使用相 应的接口指针调用a d d r e f 。例如,q u e r y i n t e r f a c e ,c r e a t e i n s t a n e e 等。 2 ) 使用完接口之后调用r e l e a s e 3 ) 在赋值之后调用a d d r e f 。在新建立一个接口的另外一个引用的时候要增大引用计数。 有时候系统需要对引用计数的编程进行优化,优化的关键就是找出那些生命期嵌套在引用同一 接口的指针生命期内的接口指针,而要找出这样的嵌套可能是比较困难的,一下给出一些规则,根 据这些规则可以得知在哪些地方可以省略a d d r e f r e l e a s e 对的调用。 输出参数规则,所谓输出参数指的是通过函数的参数列表传回值的参数,在函数体内设置这个 值,而函数并不使用客户传递进来的值,输出参数的作用类似于函数的返回值,任何在输出参数中 或作为返回值返回一个新的接口指针的函数都必须对此指针调用a d d r e f 。q u e r y i n t e r f a c e 函数的实 现就遵循了这一规则,所以客户在调用o u e r y i n t e r f a c e 以后并不需要自己增大引用计数。 输入参数规则,输入参数指的是给函数传递值的参数,函数会使用传进来的值,但是不会修改 这个值。例如: v o i d fc p o i n t p ) , p 一 g ( ) 对于这样的情况,就不需要调用a d d r e f r e l e a s e 对,因为被调函数的生命期嵌套在主调函数的 生命期内。 输入输出参数规则,所谓输入输出参数,是指函数会使用调用者传进来的参数,同时也会修改 这个参数,并将修改后的参数传回给调用者。在函数中,对于以输入输出参数形式传递进来的接e l 1 3 西南大学硕士学位论文第3 章组件技术和c o m 模型 曼舅詈鼍寞蔓曼鼍i i ii_ i,i,i i i ! i i i 量曼鼍皇皂曼量 指针,需要在对其赋值以前调用r e l e a s e ,并在函数返回以前调用a d d r e f 。例如: y o i d f ( p o i n t - p ) t p - g ( ) ; p - r e l e a s e ( ) ; p 5 n e w p o m t , p - a d d r e f ( ) : 局部变量规则对于局部的接口指针,由于他们只是存在于函数的生命周期内,所以不需要调 用a d d r e f r e l e a s e 对。 全局变量规则,对于保存在全局变量中的接口指针,在将它传递给另外一个函数以前,需要调 用a d d r e f ,因为这个变量是全局的,所以任何函数都可以通过调用r e l e a s e 来减少引用计数。 对于任何不能确定的情形,都应该调用a d d r e f r e l e a s e 对。弧m 3 4 2 关于o u e r y in t e r f a c e 因为所有的c o m 组件都要实现i u n k n o w n 接口,于是所有的o 叫组件都有一个q u e r y i n t e r f a c e 的成员函数,客户可以通
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 小学冬季安全培训记录课件
- 2025年黄山黄山区消防救援大队招聘2人考前自测高频考点模拟试题及答案详解(网校专用)
- 安全培训效果考评方案模板课件
- 安全培训效果汇报课件
- 互联网合作协议书模板
- 2025年《中国烟草》杂志社有限公司(中国烟草总公司传媒中心)招聘考前自测高频考点模拟试题有答案详解
- 民宿行业市场分析与发展策略报告
- 广州莱拓的课件助手
- 2025湖南长沙市金海高级中学教师招聘34人考前自测高频考点模拟试题及答案详解(全优)
- 成本控制与预算管理标准化表
- 人工智能算力中心项目环境影响报告书
- 无人机飞防应急处置预案
- 四川蜀道养护集团有限公司招聘笔试题库2025
- 高一历史第一次月考卷02(考试版)(新高考适用)
- 中国石化加油站视觉形象(VI)标准手册-课件
- 眼视光技术专业技能考核题库-眼镜定配技术模块
- 体育测量与评价-第二章-体育测量与评价的基础理论课件
- 超清地质年代表
- 铺轨工程监理规划及工作内容
- 女生青春期生理卫生知识讲座(课堂PPT)
- 14S501-1 球墨铸铁单层井盖及踏步施工
评论
0/150
提交评论