




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件组件技术复习内容软件组件技术作为软件发展中的一个重要阶段和当前主流软件实现技术,涵盖了软件开发的各个层次和各个方面,学习时需要区分问题的层次和范围,以达到学以致用的目的。1. 组件要了解学习软件组件技术,首先要了解三个问题:什么是组件、为什么组件和组件的效果。什么是组件,反过来就是组件是什么。组件是一种软件、一种为了实现软件的跨平台、跨语言、跨机器,具有独立接口和实现模型的、以可执行形态存在的软件模块。为什么组件,即组件出现的原因,从软件发展角度看有三种决定性因素,即:平台、人员和问题。问题是驱动、平台是支撑、人员是关键。组件技术要解决的是分布式开发和执行环境下的跨平台、跨机器、跨语言问题
2、,硬件的发展特别是网络技术的发展提供了组件的平台基础,用户的普遍化和开发的领域化从人员角度对软件提出了新的要求。组件效果怎么样,解决了跨平台、跨机器、跨语言的问题,在多态、继承、绑定、封装和存在形态等方面都有不同于前期软件的特征。具体如下表:特征对象组件多态函数多态(同名的方法可以根据参数类型和个数调用不同的函数体)和类多态(同一类型的变量可以根据实例化对象的不同调用不同的类里面的方法)接口多态(同一接口指针可以调用不同的实现这一接口的组件、同一组件的接口指针可以通过类型转换调用组件上不同的接口内的方法)继承类继承或代码继承(通过继承重用父类的方法或属性)接口继承或功能继承(通过转发调用或接口
3、重用另一组件的功能)绑定编译时绑定或早绑定(除类多态是迟绑定外)运行时绑定或迟绑定(执行时才确定调用的组件实例)封装类封装,通过public、protected和private等权限标识符确定方法和属性的使用范围接口封装,接口指定了可以访问的内容和范围形态以人可以阅读改写的代码形式存在以机器可理解执行的编码存在2. COM组件COM是Component Object Model首字符,即组件对象模型,它是建立在二进制层次上的标准,定义了大量的标准接口用于各种用途,具有平台无关性;但COM实现是平台相关的,由Windows实现了规范要求以及许多辅助功能。3. COM接口4. COM模型模型是组件
4、技术的5. 接口继承与类或对象不同,组件的二进制形态或可执行代码形态导致组件重用不能基于代码,而要重用功能,为此采用了基于功能转发的重用方式。根据转发的方式不同,分为包容和聚合两类。(a)包容(b)聚合包容时外部组件包含指向内部组件接口的指针.外部组件相对来说是内部组件的一个客户,它将使用内部组件的接口来实现它自己的接口.:对被包容对象没有特殊要求,任何组件都能够通过包容被继承,包容对象要具有和被包容对象的相同接口,通过接口内的方法调用来使用内部对象的接口功能。聚合时:对被聚合对象必须经过处理,把Iunkown接口进行分割,一个保持原来的名字,但实现功能的转发,另一个采用新名字,内容采用原来的
5、实现;外部对象不要求具有和内部对象同名的接口,外部对象的QueryInterface实现中要实现对被聚合接口的查询。相同点:包容和聚合都是实现接口继承的,客户程序不受所用实现方法的影响,外部对象的生命周期都包含内部对象的生命周期,客户程序能够访问到内部对象的接口。不同部分:总之,包容和聚合都实现了一个接口对另一个接口的重用,但包容是通过方法调用的间接调用,可以更改被重用的功能;聚合是直接把客户调用转发给被聚合对象,不能更改功能。6. 可连接对象客户程序和组件程序的连接是通过组件接口的指针调用组件的方法,而组件的远程化和大型化为组件执行带来了执行和通信的不确定性。如何使客户程序及时获取组件信息成
6、为客户下一步行为的依据。存在两种解决策略,一是客户主动采用轮询的方式获取组件信息,缺点是占用组件执行时间,而且由于轮询有周期,存在延迟;二是实现组件到客户程序的连接,以便组件及时发消息给客户程序。COM技术采用后一种策略,通过创建可连接组件实现客户程序和组件之间的连接,而且由于一个组件同时可能供多个客户调用,两个或两个以上客户程序需要组件信息时需要多个连接,进一步引入了连接点容器实现对多个连接点的管理。连接点组件需要实现IConnectionPoint接口,连接点容器需要实现IConnectionPointContainer接口。这两个接口的内容如下:7. 自动化对象自动化对象解决了不支持指针
7、语言对组件的调用(跨语言问题)。它是采用Idispatch接口和其实现对象来解决的。它是采用统一函数调用的方式来实现对所有组件的统一调用,先定义了一个union类型的变量Variant来统一不同类型的参数,然后定义了一个结构体数组统一不同个数的参数,最后把方法名也作为函数参数,定义了Invoke方法。通过自动化对象可以支持不支持指针的语言对组件的调用,但效率较低。8. 线程和套间组件程序的跨平台、跨语言、跨进程和跨机器等特性决定了组件程序内各个模块的耦合更低,并发性更好。为了解决组件程序的执行问题,借鉴了Win32操作系统的方法,通过划分线程提高程序的执行效率。线程的引入提高了组件的并发性,但
8、也把程序执行方式从串行改为并行,需要开发人员写并发安全的代码,提高了程序编写的复杂度。为了在执行效率和开发效率间寻找平衡,com引入了套间来管理线程。套间分为两类:单线程套间和多线程套间,其中起作用的是单线程套间。单线程套间如图(a)所示,每个套间有一个线程、一个消息队列和其管理的多个组件,组件的创建、执行都有线程负责,所有对线程的调用都必须通过消息队列,经getmessage获取后进入消息队列,按消息队列的存放次序逐个执行组件,同步了对套间内不同组件的调用。多线程套间如图(b)所示,每个套间可以有一个或多个线程、管理一个或多个组件,没有消息队列,对线程没有进入限制,线程的执行由其自身负责,模
9、型不考虑不同线程之间的关系。(a)单线程套间(b)多线程套间套间的特征也决定了套间的性质,应用中需要考虑同步、列集和代理等问题,具体内容如下表所示。特征同步列集代理同一线程不需要,线程内是串行执行不需要,可以直接指针访问不需要,不同部分相互可见到单套间线程不需要,套间内线程的消息队列决定了执行次序需要,由消息队列处理需要自由线程间需要,线程之间的同步由线程管理,写程序时需要考虑同步问题进程内不需要,相互之间共享存储空间不需要套间到自由线程不需要需要,跨越了单线程套间需要进程间需要需要需要总的来看,单线程套间和多线程套间各有优缺点,前者开发简单、而且在每个套间都只拥有单个或需要串行的组件时,也能
10、得到好的执行效率。多线程套间则在开发时需要考虑线程间或组件间的并发问题,不需要考虑套间内不同线程的列集和代理问题,执行效率明显高于前者。9. 结构化存储组件程序包含多个组件,多个组件都要访问同一个文件;每个组件可能访问文件里的不同部分,需要不断调整文件句柄的位置;当文件比较大时,一次读入内存耗费空间和时间都较大。为了解决了多个组件同时访问单个数据文件时需要传递文件句柄,多个组件访问同一文件不同位置时需要不断改变文件句柄位置和访问大的(内存装载不下)的文件时无法装载、装载慢的问题。结构化存储借鉴操作系统中文件系统把硬件资源分为文件的方法,把单个文件划分为多个对象。结构化存储的对象分为两类:存储对
11、象和流对象。存储对象,即IStorage对象,模拟目录的作用,借鉴目录的操作方法实现对文件的分层和管理,它的操作内容涵盖了目录的操作方法,还提供了事务支持。流对象,即IStream(流)对象,模拟文件的作用,借鉴文件的操作方法实现具体数据的存储,它的操作内容涵盖了文件的操作方法。通过结构化存储的层次划分,每个组件可以访问其中不同的流对象或存储对象;特别是访问位置不同时,相互访问的存储对象和流对象就不同,可以并发访问;对每个组件只需要读取所需要的对象,不需要考虑文件的其它部分。结构化存储还实现了对具体介质的存储,通过ILockBytes接口及其对象实现。10. 统一数据传输要实现两个实体之间的数
12、据传输,需要确定两个问题:传输什么数据和采用什么传输方式。组件程序的跨平台、跨语言和跨机器特征使得不同部分可能需要不同类型的数据,但对传输方式没有新的要求。为此,要解决组件程序的数据传输问题,只需要在已有的传输协议上改善数据。异构数据的交换和跨语言问题类似,存在两两转换机制和统一机制两种方法,显然,统一数据方法在实现上和扩充性上都有优势,为此,组件技术采用统一数据方案。不同程序间转递的数据存在数据格式、存储方式和访问方式的不同。首先要统一数据。针对数据格式的问题,定义了FORMATETC来扩充数据格式,第一个CLIPFORMAT表示数据格式,存取不同格式的数据时可以取不同值,除支持标准格式外,
13、还可以自定义数据格式;第二个DVTARGETDEVICE表示设备信息,指向一个描述了设备名、端口名、设备驱动名等信息的结构体;第三个指定图形数据的显示方式;第四个是对第三个的补充;第五个指定存储介质类型;第五个。针对存储介质的不同,定义了STGMEDIUM来统一存储介质,第一个数据项表示介质类型,第二个指向数据存储位置,第三个是管理数据项的指针,由于存储位置不同介质不同,采用定义共同体来统一描述。typedef WORD CLIPFORMAT; typedef struct tagFORMATETC CLIPFORMAT cfFormat;/ 剪贴板数据格式 DVTARGETDEVICE *p
14、td;/ 设备有关的信息 DWORD dwAspect;/ 图形数据的表现方式 LONG lindex;/ dwAspect成员的补充 DWORD tymed;/ 数据的存储介质 FORMATETC;typedef struct tagSTGMEDIUM DWORD tymed;/ 存储介质的类型 union HBITMAP hBitmap; HMETAFILEPICT hMetaFilePict; HENHMETAFILE hEnhMetaFile; HGLOBAL hGlobal; LPOLESTR lpszFileName; IStream *pstm; IStorage *pstg;
15、u;/ 数据真正的位置 IUnknown *pUnkForRelease;/ 控制介质资源的释放 STGMEDIUM;统一数据后,还需要统一数据存取方式,通过定义IDataObject接口实现。包含了数据的存取和查询、数据格式的查询和转换、连接的创建、删除和枚举等功能。其中, GetData 接受程序通过传输协议得到数据对象的接口指针后,按pFormatetc中指定格式提取数据,并把数据放在pmedium 指针指定的位置,如果数据对象没有所指定的格式,出错返回。GetDataHere同GetData功能相同,但是由接受方负责预先分配存储空间。QueryGetData询问数据对象是否支持pFormatetc数据格式。GetCanonicalFormatEtc提供一个标准的等价的FORMATETC结构,据此判断不同的FORMATETC结构能否得到同样的数据,以免重复调用GetData。SetData用于接收方客户程序为数据对象提供数据。EnumFormatEtc返回一个数据格式枚举器,可以枚举该数据对象所支持的数据格式。DAdvise在客户的通报接收器(advisory sink)和数据对象之间建立一个通报连接(a
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年网络安全等级保护测评考试试卷:网络安全事件响应机制
- 2025年新型农业经营主体培育之农村产业融合发展示范园运营考核试卷
- 2025年房地产行业集体土地入市调控市场调控认证考核试卷
- 2025年分布式能源交易用户侧参与流程合规考核试卷
- 三方协议书去哪盖
- 协议书离婚房子如何过户
- 委托代管协议书
- 投资入股协议书范本
- (合同范本)研学旅行与家长协议6篇
- 教育咨询宣传方案模板
- 湖北省中小学生命安全教育课程标准(实验)
- 多耐病人的隔离措施及护理
- 亚健康管理培训
- 四肢瘫痪的康复护理讲课件
- JG/T 3064-1999钢纤维混凝土
- 2024年安徽国元农业保险股份有限公司招聘笔试真题
- 素描静物构图试题及答案
- 诊所房屋租赁协议书
- 中国糖尿病合并慢性肾脏病临床管理共识 课件
- 2025年中国邮政集团工作人员招聘考试笔试试题(含答案)
- 企业数字化转型的五大关键要素
评论
0/150
提交评论