- 1
- 0
- 约1.06万字
- 约 62页
- 2018-05-14 发布于四川
- 举报
兼容性 兼容性 本讲介绍 源码级和二进制级的兼容性 它可以被认为一个基本编程规则的集合... 以确保代码能在未来可用 以及作为一个很好的兼容性例子 兼容性 基本的 任何接口就是必须与使用者维护的合同 合同被破坏了,兼容性也就被破坏了 一个好的Symbian 开发者应该理解 为了扩展组件,接口中什么能以及什么不能修改 而不需要破坏源码或者二进制的兼容性 兼容性的等级 理解源码的、二进制的、库的、语义的,以及前向和后向兼容 前向和后向兼容 兼容性存在于两个方向 前向和后向 当一个组件被更新时 是以这样的方法,即其他使用组件原来版本的代码 还能继续与更新的版本一起工作 这是后向可兼容变化 当软件 能与组件更新后版本一起工作 也能跟以前的版本一起工作 这种改变叫做前向可兼容 前向和后向兼容 新代码与旧代码一起工作 例如 应用程序使用现有的库 该库被更新到一个新的版本 如果应用程序与新库一起工作 能够保持跟旧库工作一样的行为 那么新的库就保持了后向可兼容的关系 即——新代码可以和就代码一起工作 旧代码与新代码一起工作 一个前向可兼容关系 需要一些巧妙的方法还能够获得 如果库的早期版本 替换了现有的库 而应用程序能够继续以相同的方式工作 则前期版本的库 被称为有前向可兼容关系 即——旧代码跟新代码一起工作 前向和后向兼容 后向兼容性 是在进行组件的增量发布时的主要目标 而前向兼容性则是额外的需要 一些修改是不能前向可兼容的 例如修改bug 它从本质上是在修改之前的版中不能正确工作的 源代码兼容 如果对一个组件进行了修改 而依赖它的组件可以重新编译 而不需做任何修改 这可以说是源代码可兼容的修改 源代码可兼容修改的一个例子 是对一个导出函数进行内部bug修正 它不要求修改函数的声明 即组件的接口 源代码兼容 典型的源代码不兼容的修改 会修改成员函数的内部 使得它可能发生Leave,而以前的版本不会这样 为了严格遵守命名规范 函数的名称可以必须增加后缀L 源代码兼容 源代码可兼容修改 并不意味着依赖的组件不需要重新编译 而是它们不需要修改就能够重新编译成功. 二进制兼容 二进制兼容即一个组件依赖于另一个组件 在它所依赖的组件被修改以后 还能够继续运行 而不需要重新编译或重新链接 这种兼容性是跨越编译和链接边界的 源代码和二进制兼容 二进制可兼容修改的一个例子 是增加类的公开非虚函数 它是按照序号从库中导出的 它位于以前导出的函数之后 客户端组件 它依赖于原来版本的库 也不会受到导出列表末尾新添加函数的影响 因此,这种修改是二进制可兼容的,也是后向兼容的 源代码和二进制兼容 如果添加新的函 到类中,会引起导出函数序号的重新排序 这种修改就不是二进制可兼容的 虽然它仍然是源代码可兼容的,即重新编译不需要修改代码 依赖的代码必须重新编译 否则它使用新的非法序号 来识别导出的函数 类级和库库的兼容 在类级维护兼容性意味着: 确保函数继续保持与最迟文档记录相同的语义 没有公开看访问的数据被移除 或者减低可访问性 类对象的大小也没有改变 维护库级兼容性意味着确保: DLL导出的API函数保持相同的序号 并且参数和返回值也是兼容饿. 防止兼容性中断什么是不能改变的? 知道类的哪些属性在大小上的改变会中断兼容性 理解类级修改会中断源代码兼容性 理解哪些类级修改会中断二进制兼容性 理解哪些二进制级修改会中断二进制兼容性 理解哪些函数级修改会中断二进制和源代码兼容性 就哪些修改会导致二进制兼容性中断角度,区分可派生和不可派生类 类对象的大小必须不改变 改变一个类对象的大小 例如 通过增加或移除数据 将引起二进制兼容性的中断 除非它能保证: 类不是外部可派生的 即构造函数没有从定义它的DLL中导出 分配对象的唯一代码 位于被改变的组件/DLL中 或者它有非公开的构造函数,该函数组织它从栈上派生 类具有虚析构函数 类对象的大小必须不改变 对象需要分配栈上的内存大小 是确定的 对每个组件,在构建时 改变对象的大小 将影响以前编译的客户端代码 除非客户端保证实例化该对象 只在堆中 例如,使用NewL() 工厂函数 类对象的大小必须不改变 另外 访问对象中的数据成员 是通过指针偏移量实现的 如果类的大小改变了 例如,增加了一个数据成员 派生类的数据成员的偏移量 就变成非法了 类对象的大小必须不改变 为确保一个类的对象 不能被派生或实例化 除了由类的成员或友元 它应该具有私有的、非内联、非导出的构造函数 简单的的不去声明任何构造函数 是不够的 因为编译器会生成隐式的公共缺省构造函数 类对象的大小必须不改变 如果一个类需要缺省构造函数 它应当被定义为私有的 然后在源文件中实现 或者在可以公开访问的地方,它不是内联函数
您可能关注的文档
- 风险管理课件-3.ppt
- 赢取人生的根本之道.ppt
- 工程材料力学性能-9-1.ppt
- 新闻学概论(六七章.ppt
- 美国签证申请指导(尤其适合赴美交流项目)v5.ppt
- 第9章:分子结构.ppt
- 邮政方案营销.ppt
- 谈教师专业活动中的听课、评课与反思课.ppt
- 官厅水系水源管理办法分析中期汇报.ppt
- 财务软件实用教程一.ppt
- 2026年黄山市第三人民医院招聘工作人员6名备考题库带答案详解.docx
- 2025年上海程梓实业有限公司企业信用报告.docx
- 2026年黄山市第三人民医院招聘工作人员6名备考题库及答案详解一套.docx
- 2026年教育资源公平分配研究.docx
- 2026年黄山市第三人民医院招聘工作人员8名备考题库及完整答案详解1套.docx
- 2024版《水泥标准稠度用水量、凝结时间、安定性》试题及答案.docx
- (25格)舒尔特方格练习题 儿童专注力训练(共18份,每日一练).docx
- 2026年黄山市第三人民医院招聘工作人员6名备考题库及参考答案详解.docx
- 2026年黄山市第三人民医院招聘工作人员6名备考题库参考答案详解.docx
- 2026年黄山市第三人民医院招聘工作人员6名备考题库附答案详解.docx
原创力文档

文档评论(0)