- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
*-54 圆满解决链接器的兼容性问题 通过这种方式我们可以安全地在C++环境中暴露DLL中的类,而在另一个C++环境中访问它。 接口类作为客户与实现类的屏蔽. 这种方式是COM中建立与编译器厂商无关的可重用组件的技术基础。 *-54 5 对象的扩展性 5.1 功能扩展的需求 至此客户可以动态地加载二进制组件,在接口类定义不变的情况下,实现者可以自由地对实现方案进行升级,客户无需重新编译。至此已经解决了前面所面临的 链接器兼容性问题 内存管理问题 类库的更新问题 无缝更新的条件:对象的接口不能变化。因为客户在编译过程中需要接口的精确定义,对接口的任何变化都会导致客户的重新编译。而且对接口的任何改编都会破坏对象的封装性要求。 如果擅自更改已经发布的接口类的话…… *-54 初始IFastString接口: class IFastString{ public: virtual void __stdcall Delete(void)=0; virtual int __stdcall Length(void) =0; virtual int __stdcall Find( char*psz)=0; }; 更改后的接口: class IFastString{ public: virtual void __stdcall Delete(void)=0; virtual int __stdcall Length(void) =0; virtual int __stdcall Find( char*psz)=0; virtual int __stdcall FindN( char*psz,int n)=0; //新增加的虚函数。 }; 老客户得到了包含FindN表项的新对象时,仍然能正常工作,然而,新客户如果碰巧使用了老对象,当客户针对基于老接口定义编译得到的对象调用FindN时,程序崩溃了。 原有的接口功能函数亦不能有任何的改动,否则也会带来不可预知的错误。 *-54 因此,接口定义一旦公开,是不能更改的。 但是, 对功能的需求却是无限的, 功能扩展性解决方案:允许实现类暴露多个接口。新增加的功能在新的接口中。 这有两种途径: 1。设计一个接口使得它继承自另一个相关的接口。 2。让实现类继承多个不相关的接口。 (实际上,还有很多种方法.) *-54 对原接口进行扩展,生成新的接口.比如使用从原接口继承的方式 class IFastString2:public IFastString { public: virtual int __stdcall FindN( char*psz,int n)=0; }; 新的实现类的定义: (派生自新接口) class FastString : public IFastString2 { int m_cch; char*m_psz; public: FastString( char* psz); ~FastString(); void __stdcall Delete(void); // IFastString的方法 int __stdcall Length(void); int __stdcall Find( char*psz); int __stdcall FindN( char*psz,int n); // IFastString2的方法,实现类提供它的实现。 其他的方法同前。 }; 5.2 方法一:扩展接口 *-54 客户在运行时询问对象,以确认对象是否支持新的接口。这里将使用dynamic_cast 运算符。 int Find10thBob(IFastString *pfs) { IFastString2 *pfs2=dynamic_castIFastString2 *(pfs); if(pfs2) return pfs2-FindN(Bob,10); //如果实现了IFastString2 接口. 新实现类(如果使用的是新的服务器) else error(can not find 10th occurrence of Bob); //如果实现了IFastString2 接口. 老实现类(如果使用的是老的服务器) } 老客户不会试图调用FindN。 新客户调用FindN时碰到了老对象可以平稳地处理。 新老客户可以共存。 这种平滑的由用户决定的downcast能力,可以使得系统功能不断地扩展、升级。 *-54 5.3 方法二:多接口 前一节新接口扩展的功能与原功能有一定的逻辑关系. 当对象需要提供与原功能不相关的新功能时,比如说提供永久性支
您可能关注的文档
- BPRT、TRT系统(第十二章)解说.ppt
- BP公司之电气安全解说.ppt
- BP公司之个人防护用品PPE解说.ppt
- Matlab图像处理及方法解说.ppt
- matlab线性控制系统的计算机辅助解说.ppt
- 2016高考地理二轮复习专题十四环境保护解说.ppt
- bsh-16《荷塘月色》英译文赏析解说.ppt
- MATLAB学习必备解说.ppt
- 2016高考地理二轮专题二高考选择题解题技巧【上】解说.ppt
- BSM-标准版(DPR)解说.ppt
- 内蒙古自治区鄂尔多斯市第一中学2025-2026学年第一学期高一年级学业诊断检测12月月考语文试卷含答案.pdf
- 四川省2025-2026学年高三上学期12月阶段性自测地理试卷含答案.pdf
- 林区蓄水池防火配套建设指南.ppt
- 四川省2025-2026学年高三上学期12月阶段性自测历史试卷含答案.pdf
- 云南省2025-2026学年高三上学期12月阶段性自测地理试卷含答案.pdf
- 火灾区域生态修复实施指南.ppt
- 云南省2025-2026学年高三上学期12月阶段性自测历史试卷含答案.pdf
- 云南省2025-2026学年高三上学期12月阶段性自测日语试卷含答案.pdf
- 2025年水产养殖科技合作协议(鱼苗).docx
- 2025年水产养殖苗种繁育合作协议协议.docx
最近下载
- 2024年部编版初中语文古诗词必背81篇.doc VIP
- 装修方案审查报告.docx VIP
- Futaba GY701 使用手册说明书.pdf
- 2025年上海市春考语文真题试卷(详析版).docx VIP
- 农电工考试题目及答案.doc VIP
- DB13(J)T 8486-2022 装配式建筑施工安全技术规范(京津冀).pdf VIP
- DB13(J)T 8505-2022 历史建筑修缮与利用技术标准.pdf VIP
- DB13(J)T 8540-2023 地源热泵系统工程技术标准.pdf VIP
- 肿瘤科疑难护理病例讨论.pptx VIP
- 辽宁省大连市2024_2025学年高一生物上学期期末考试试题.doc VIP
原创力文档


文档评论(0)