- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第11章 处理概括关系
第11章 处理概括关系 11.1 值域上移 两个子类拥有相同的值域 将此值域移至父类 针对待上移动的值域,检查它们的所有被使用点,确认以同样的方式被使用. 如果这此值域的名称不同,先将它们改名,使每一个名称都和父类值域名称相同。 编译 测试 在父类中新建值域 移除子类的值域 编译 测试 11.2 函数上移 函数在各个子类中产生完全相同的结果 将该函数移至父类 检查待提升函数,确定它们是完全一致。 如果待提升函数的签名式不同,修改为在父类中使用的签名式。 在父类中新建一个函数,将某一个待提升函数的代码复制到其中。做适当调整,然后编译。 移除该待提升的子类函数。 编译,测试 逐一移除待提升的子类函数,直到只剩下父类的函数为止。每次移除之后都需要测试、 观察该函数的调用者。看是否可以将它索求的对象型别改为父类 11.3 构造函数本体上移 在各个子类中拥有一些构造函数,他们的本体几乎完全一致 在父类中新建一构造函数,子类的构造函数调用它。 在父类中定义构造函数。 将子类构造函数中的共同代码搬移到父类构造函数中。 将子类构造函数中的共同代码删掉,调用新建的父类构造函数。 编译,测试。 下面是表示雇员的Employee类和表示经历的Manager类 11.4 函数下移 父类中的某个函数只与部分子类有关 将这个函数移到子类中 在所有子类中声明该函数,将父类的函数本体复制到每一个 子类函数中。 删除父类中的函数。 编译,测试。 将该函数从所有不需要它的那些子类中删掉。 编译,测试。 11.5 值域下移 父类中某个值域只被部分子类用到 将这个值域移到需要它的子类中 在所有子类中声明该值域。 将该值域从父类中移除。 编译,测试。 将该值域从所有不需要它的子类中删掉 编泽,测试。 11.6 提炼子类 类中的某些特性只被部分实体用到 新建一个子类,将上述的部分特性移到子类中 为源类定义新的子类 为这个新的子类提供构造函数 找出调用父类构造函数的所有地点,如果他们需要的是新建的资料,令他们调用新构造函数。 逐一使用函数下移和值域下移,将源类的特性移到子类中 找到所有这样的只有:他们传达的信息如今可由继承体系自身传达。将值域进行自封装以避免被直接使用,然后将它们的取值函数替换为多态常量函数。 每次下移,编译并测试。 11.7 提炼父类 两个类具有相似特性 为这两个类建立一个父类,将相同特性移至父类 为原本的类新建一个空白的抽象父类 运用值域上移、函数上移、构造函数上移等方法逐一将各子类的共同元素上移到父类。 先搬移值域,通常比较简单。 如果相应的子类函数有不l司的签名式,但用途相同,可以先使用函数重命名将它们的签名式改为相同,然后上移 如果相应的子类函数有相同的签名式,但函数本体不同,可以在父类把它们的共同签名式声明为抽象函数。 如果相应的子类函数有不同的函数本体,但用途相同,可试着使 用算法替换,把其中一个函数的函数木体拷贝到另 一个函数中。如果运转正常,就可以将其上移。 每次上移后,编译井测试。 检查留在子类中的函数,看它们是否还有共同成分。如果它们只使用共同接口,就可以把它们所要求的对象型别改为父类 11.8 提炼接口 若干客户使用类接口中的同一子集,或者两个类的接口有部分相同。 将相同的子集提炼到一个独立接口中。 新建一个空接口。 在接口中声明待提炼类的共通操作。 让相关的classes实现上述接口。 调整客户端的型别声明,得以运用该接口。 11.9 折叠继承体系 子类和父类直接无太大差别。 将它们合为一体。 选择想移除的类:是父类还是子类? 将值域、函数进行上移或下移,把想要移除的类的所有行为和数据搬移到另一个类。 每次移动后,编译并测试。 调整即将被移除的那个类的所有引用点,令它们引用合并后的类。这个动作将会影响变量的声明、参数的型别以及构造函数。 移除以前的目标,此时它己经成为一个空类。 编译,测试。 11.10 塑造模板函数 有一些子类,其中某些函数以相同顺序执行类似的措施,但各措施实际上有所不同。 将各个措施分别放进独立函数中,并保持它们都有相同的签名式,于是原函数也就变得相同了。然后将原函数上移至父类 在各个子类中分解目标函数,使分解后的各个函数要不完全相同。 将各子类内完全相同的函数上移至父类 将那些剩余的、存在于各子类的完全不同的函数重命名,使所有这些函数的签名式完全相同。 修改上述所有签名式后,编译并测试。 将所有原函数一一上移至父类。在父类中将那些有所不同、代表各种不同措施的函数定义为抽象函数。 编译,测试。 移除其他子类中的原函数,每删除一个,编译并测试。 11.11 以委托取代继承 某个子类只使用父类接口中的一部分,或根本不需要继承而来的数据。 在子类中新建一个值域用以保存父类;调整子类函数,令它委托父类;然
文档评论(0)