- 12
- 0
- 约1.79万字
- 约 10页
- 2017-12-23 发布于上海
- 举报
接口与对象
COM接口与对象 潘爱民 北京大学计算机研究所 2003-9-19 /CompCourse2003/ 内容 组件的接口 COM接口 COM IDL COM对象 从历史看COM COM产生的背景 93年因为OLE 2的需要而产生 OLE 1的缺陷 COM又从OLE中脱颖而出 COM的优势不限于OLE COM成为Microsoft跟上Internet的一项重要基础技术 今天的Windows平台上,COM无处不在 COM和.NET COM基础——三个概念 COM组件 组件:可独立发布的二进制组件 在Windows平台上为DLL或者EXE COM对象 通过COM接口提供服务 符合OO中对象的基本概念 COM接口 客户与对象之间的协议,对象实现COM接口,客户使用COM接口 如何设计? COM组件 为方便起见,只讨论Windows平台上DLL类型的组件 COM对象 如何标识一个对象?对象以什么形式存在?客户如何创建对象? 对象如何暴露接口?一个或是多个? COM接口 要求:跨编译器、跨语言、跨平台 设计COM接口——从C++入手 C++类:接口与实现的分离 接口:类的public部分 设计COM接口——从C++入手(续) C++类的实现 C++类的链接(linking) 静态链接 许多类库的做法 编译时刻的链接 静态链接的缺点 代码重复:多个程序各有自己的代码,需要更多的内存 客户程序占据更多的外存空间 库代码更新需要重新编译所有的客户程序 C++类的链接linking(续) 动态链接 运行时刻的链接 动态链接形式 编译时刻通过引入库 运行时刻完全动态 Dll Hell C++接口如何走向COM接口 动态链接符合COM的需要 C++中类形式的接口存在的问题 客户看到了什么? 若用Visual C++ 5.0/6.0编译器 客户眼中的C++类(续) 如果是Borland C++编译器(4.02) 命名冲突解决方案1 模块定义文件(.def)中给出别名 命名冲突解决方案2 模块定义文件(.def)中给出序号别名 命名冲突解决方案3 使用C++类的vtable C++类的vtable不随编译器而变化 vtable包含了各个函数的原型,顺序固定,每个函数的参数、返回类型等,函数名并不重要 vtable要求这些接口函数必须是虚函数 客户如何得到vtable? 仍然需要有一种办法来创建C++类 new/delete?需要对象的二进制结构——问题2 C++对象的二进制结构 C++的封装是语法上的封装,而不是二进制封装 new/delete是编译器相关的 编译器不仅要知道public信息,也要知道private信息 C++对象的二进制结构是编译器相关的 即使客户看到的C++类公开接口没有变化,但是C++类的实现改变了,仍然会打破客户与对象之间的连接 C++对象与客户之间的连接问题 客户与C++对象之间的连接点越小越好 只有接口部分必要的信息才放入接口 把C++类的实现细节与接口分开 提取出针对所有编译器都不变的因素作为客户与对象共享的接口信息 方案1:句柄 句柄方案 方案1:句柄 纯虚基类方案 前提条件: 在给定平台上所有的编译器都会产生同样的二进制结构 纯虚函数在单继承情况下满足这一条件 纯虚基类只包含虚函数,限定每个虚函数的调用习惯 对于跨平台的情形,我们肯定要通过中间层,所以暂时可以不考虑 虚函数的继承布局情况 class B : pulic A { private : int value1; public: virtual void Func1(void) virtual void Func2(void) }; 纯虚基类方案例子 解决了名字冲突 解决了C++类的二进制布局不兼容问题 客户只看到vtable,没有看到其他的实现细节 保证不同语言编写的程序可以互操作 在不改变接口的情况下,可以单独升级客户或者对象 纯虚接口的使用? 假如有一个C++对象实现了IString 如何创建对象? 不能使用new DLL的唯一接口是引出函数 可行方案:单独提供一个引出函数供客户调用 通过引出函数创建对象 创建对象 如何删除对象? 删除对象发生在客户与对象建立联系之后,所以比较好办 但是不能用delete 可以让对象自己把自己删除 在IString中增加一个方法 删除对象自身 小结 我们已经建立起对象与客户之间的基本通信方式 更高的要求: 接口的升级 增加新的功能 生命周期管理 什么时候该删除对象 多个客户共享同一个对象,如何管理? 对象的进化 在原有接口的基础上增加新的功能,例如 对象的进化(续) 接口的进化 对象实现多个接口 对象实现多个接口(续一) 对象实现多个接口(续二
您可能关注的文档
- 广州中医药大学方剂学PPT总论.ppt
- 建模第03章克里金和构造.ppt
- 建模第05章地震.ppt
- 市场营销专业课程开发完.ppt
- 庄子在我们无路可走的时候ppt教学课件.ppt
- 建模第06章概率.ppt
- 建模第042章沉积相.ppt
- 建模第07章数模.ppt
- 建模第09章风险分析.ppt
- 建模第08章粗化.ppt
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
最近下载
- 北师大版三年级下册数学全册教学设计(配2026年春改版教材).docx
- (2026年)跌倒坠床护理综合指南PPT课件.pptx VIP
- 工程设计应急响应方案(3篇).docx VIP
- 征信简版电子版PDF个人信用报告最新版2024年可编辑带水印模板.pdf VIP
- ntvf调试资料解读.doc VIP
- 电影《色.戒》的叙事伦理.doc VIP
- 上海大学2023-2024学年第1学期《高等数学(上)》期末考试试卷(A卷)附参考答案.pdf
- 佳能EOS1500D基本使用说明书说明书.pdf VIP
- 上海大学2023-2024学年第1学期《高等数学(上)》期末考试试卷(B卷)附参考答案.pdf
- 渣打银行(香港)有限公司.PDF VIP
原创力文档

文档评论(0)