您的位置: 首页 >> 新闻中心 >> 计算机 >> 软件开发
基于构件复用的软件方法与COM支持
■ 最新课程推荐更多课程>>
学校培训课程开课时间上课地点精英价报名
正辰培训 微软软件测试工程师电话预约西直门教学区¥4704
新 科 海 软件测试工程师就业班电话预约海淀长远天地¥6280
北师大IT 软件工程与测试实战班电话预约北京师范大学¥1800
北师大IT 高级网络工程师就业班电话预约北京师范大学¥13000
金 同 方 网络工程师就业周末班电话预约人大总部¥7000

  构件复用作为一种现实有效的软件开发方法正受到越来越多的重视和研究。近年来,随着DNA,中间件等三层体系结构和分布式对象的兴起,为基于可复用构件的软件体系结构赋予了更大的内涵。从而使我们在评价构件复用的意义时,不应只局限于开发周期的缩短,软件质量的可靠提高,更要认识到构件组装式的开发在系统维护(如版本更新,功能增删等),分布式计算等方面所带来的极大便利。由于维护阶段占软件开发周期总成本的67%左右,因此构件重用对整个软件产业的重要意义就不言而喻了.从维护和分布计算的角度考虑,构件复用就是要实现"即插即用".
 
  传统的面向对象编程语言中,基于继承机制的类的复用,只是源代码级的重用,在源代码不可得的情况下(构件产业化的发展趋势下,这种情况很普遍),就变得毫无意义了.更为重要的是,联编以后,类构件就只是一个逻辑上的虚幻的概念了,不会给将来可能的处理带来任何方便. 

  MicroSoft自90年代初就进行了COM的开发,历经OLE1,VBX组件,OLE2,ActiveX,COM+的不断完善,现已成为一个相当成熟的组件模型,对构件复用提供了有力的底层支持. 

一 COM对象的封装 
  COM是一个二进制的标准,它详细规定了一个COM组件所应具有的内存结构.COM对象间的交互完全基于对此内存结构的操作.因此可以在很大程度上忽略不同编程语言,应用环境之间的差别,解决了重新编译重新发行的问题.二进制代码级的兼容性要求操作系统的支持,但是COM描述对象连接的方法与传统的API式共享系统服务不同.连接建立后,COM底层库不再被需要,停止耗用系统资源,与API相比,操作系统必须一直管理组件之间的连接. 

  COM用接口的概念对组件的功能属性进行完全的封装.与组件的通信必须通过接口进行.接口不仅是一个逻辑上的概念,而且也存在着与之相对应的物理内存结构(VTABLE).一个对象可以对应多个接口,一个接口也可以由多个对象所实现,表现出灵活的多态性.同时也为版本管理提供了方便.当使用新版本的组件替换老版本时,只要该组件实现了旧版本的接口(通过包容,聚合等手段),就保证了其与原用软件系统的兼容.同时新增功能(新的接口)又可被自然的使用. 

  接口完全封装了内部功能,属性的具体实现,使得COM对象对外表现为"黑盒"结构,完全吻合面向对象系统所要求的"强内聚性".但由于对接口的过多强调,COM组件一般不具备广泛提倡的"弱耦合性"的特点.不过,微软一向重视接口的不变性,试图用接口的标准化推动服务的标准化,以接口为基础为软件复用建立实用的框架.其实ActiveX技术规范中的相当大一部分都是通过定义标准的接口及其相互之间的逻辑关系来确定的. 

二 自动化 
  在考虑调用接口内成员函数的具体实现时,就会发现由于组件的特殊性,这种实现需要与通常完全不同的规范. 需要解决的问题有:源程序中如何标识一个组件(物理上,就是一段已经存在了的,具有一定功能的二进制代码),对于组件内特定函数的调用,编译器将如何做出处理,如何进行参数的检验及返回值的收集. 

  在旧的编程模式中,以上问题的解决均需要一个对组件进行充分定义的说明性文件.而且,该说明性文件的格式必须完全符合所用的编程语言的语法.这就产生了以下一些矛盾.首先,为每一个发行组件均配置各种不同版本的说明文件在实践中并不可行;第二,即使这样的头文件通过类型库自动转换得到,为各种编程语言提供这种转换工具同样是不可行的;第三,组件中所用到的数据类型并不一定总能与目标编称语言一一对应;第四,这种笨拙的实现方法,与构件的"即插即用"概念相去甚远,程序员难以接受. 

  针对以上问题,COM规范提出了自动化技术,较好的实现了以符号为导航的动态绑定. Idispatch是实现这一点的关键接口. 
Class Idispatch : public Iunknown 

public: 
virtual HRESULT GetTypeInfoCount(UINT * pctinfo) = 0; 
virtual HRESULT GetTypeInfo(UINT iTinfo,LCID 
lcid,ItypeInfo ** ppTInfo) = 0; 
virtual HRESULT GetIDsOfNames(REFIID riid,LPOLESTR * 
rgszNames,UINT cNames,LCID lcid,DISPID *rgDispId) = 0; 
virtual HRESULT Invoke(DISPID dispIdMember,REFIID 
riid,LCID lcid,WORD wFlags,DISPPARAMS *pDispParams, 
VARIANT *pVarResult,EXCEINFO *pExcepInfo, 
UINT *puArgErr) = 0; 
}; 

  在自动化对象中,每一个成员函数均对应一个分发ID(DISPID),服务导航器InVoke就是通过此分发ID建立与目标函数的连接.可以用GetIDsofName实现符号(函数名)到ID的映射.因此,应用程序就有了一个统一的界面来使用组件提供的各项服务. 

  对于数据类型的兼容性问题,微软提供了一个生硬的解决方法.定义一个尽可能"包罗万象"的大的数据结构VARIANT 
typedef struct tagVARIANT 

VARTYPE vt; //类型标示 
union 
{ // 传值类型 
short iVal; 
long lVal; 
byte bVal; 
float fltVal; 
…… 
// 引用类型 
short *piVal; 
…… 
IUnknown **ppunkVal; 
IDispatch **ppdispVal; 
VARIANT *pvarVal; 
void *byref; 
}; 
}; 

本新闻共2页,当前在第1页  1  2

  影视动画培训   北大BEC培训官方报名网站   2008美国夏令营启航官方指定报名网站   2008留学第一站!  
  北师大 火星时代
共举影视动画培训之鼎
  北大BEC培训官方报名网站
现在报名独享95折!
  2008年国家职业资格考试
一次过关完全备考手册
  2008留学第一站
留学资讯尽在精英留学站!
 
上一篇:EOS构件的层次结构
下一篇:基于构件开发方法的概念、目标和意义
 相关新闻
·专家警告:70万种木马病毒正在肆虐网络·“灰鸽子”最新变种威胁用户私密信息安全
·“广告下载器ct”生成隐蔽软件下载病毒·技巧:让Windows更新对恶意软件说“不”
·“帕虫变种P”通过QQ向好友发送病毒链接·Rambo安全经验谈连载之:防护服务器的安全
·黑客讲述真实经历:我如何侵入医院的计算机·ASP.NET多频道网站架构实现方法(2)
·ASP.NET多频道网站架构实现方法(1)·以ESB为导向建立SOA是有害的
·租用式网络管理架构解决校园网安全接入方案(3)·租用式网络管理架构解决校园网安全接入方案(2)
·租用式网络管理架构解决校园网安全接入方案(1)·软件架构乱弹:问题域及其解决方法
·面向对象技术在软件重用和体系结构中的应用·基于构件开发方法的概念、目标和意义
 
◇ 重点栏目导航
◇ 精英服务承诺
教育顾问:010-51660910
QQ交流:138660910
相关资料
·软件测试新手的修炼之路
·Smarty简体中文参考手册
·Struts中文手册
·Struts快速学习指南
·ultradev动态网页制作教程
·UML工具箱
·《设计模式》中文版
·学友Flash伴侣 1.11
·阿须图像水印(AssureMark)V2.0
·超级语霸
相关试题
·2007年全国CPA考试试卷及答案解析之《会
·2007年CPA试卷及答案解析之《财务成本管
·2008年注会考前模拟试题之《财务成本管理
·2007年全国CPA《税法》考试试卷及答案解
·2008年中级会计职称《经济法》试题及答案
·2008年注册会计师考前模拟试题参考答案之
·2008年注册会计师考前模拟试题之《会计》
·2008年注册会计师考前模拟试题之《税法》
·2008年高校招生全国统考理数试题(四川延
·2008年全国高考物理科试题参考答案(上海
相关热贴
·如何改QQ IP地址!
·恰当选择软件测试自动化方案
·ADO.NET学习总结
·.net操纵xml文件类(c#)
·Log4net教程
·VPN技术详解
·高手必读 网络端口安全防护技巧放送
·访问XP共享出现的问题解决办法
·Web2.0时代,RSS你会用了吗?(技术实现总
·.NET下正则表达式应用的四个示例