第3章 代码中存在的问题.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第3章 代码中存在的问题

第3章 代码中存在的问题 一、代码重复 如果两个毫不相关的类内出现重复代码,将重复代码提炼到一个独立类中,然后在另一个类内使用这个新类。但是,重复代码所在的函数也可能的确只应该属于某个 类,另一个类只能调用它,或这个函数可能属于第三个类,而另两个应该引用这第三个类。 二、过长的函数 三、过大的类 如果想利用单一类做太多事情,其内往往就会出现太多实例变量。一旦如此,代码重复也就随机出现。 四、过长参数列 五 发散式变化 六、霰弹式修改 七、数据依赖 八、数据泥团 * 同一个类中两个函数具有相同的表达式,或者在一个以上的地点出现相同的程序结构。 提炼出重复的代码,让这两个地点都调用被提炼出来的那一段代码,将它们合而为一。 两个互为兄弟的子类内含相同表达式。需对两个类进行提炼,将被提炼出来的代码使用放入一个子类内。如果代码之间只是类似,并非完全相同,那么将相似部分和差异部分割开,构成单独一个函数。如果有些函数以不同的算法做相同的事,选择其中较清晰的一个,将其他函数的算法替换掉。 当感觉需要以注释来说明什么的时候,就把需要说明的东西写进一个独立函数,并以其用途(而非实现手法)命名。可以对一组或甚至一行代码做这件事。哪怕替换后的函数调用动作比函数自身还长,只要函数名称能够解释其用途,也该那么做。关键不在于函数的长度,而在于函数“做什么”和“如何做”之间的语义距离。 找到函数中适合集在一起的部分,将它们提炼出来形成新函数。一个很好的技巧是:寻找注释。它们通常是指出“代码用途和实现手法间的语义距离”的信号。如果代码前方有一行注释,就是在提醒可以将这段代码替换成函数,而且可以在注释的基础上给这个函数命名。即使只有一行代码,如果它需要以注释来说明,那也值得将它提炼到独立函数去。 条件式和循环常常也是提炼的信号。应该将循环和其内的代码提炼到一个独立函数。 可以将彼此相关的数个变量一起提炼至新类内。通常如果类的多个变量有相同的字首或字尾,这就意味有机会把它们提炼到某个组件内。如果这个组件适合作为一个 子类,会发现提取类往往比较简单。 如果类是个GUI,可能需要把数据和行为移到一个独立的领域对象去。两边 各保留一些重复数据,并令这些数据同步。这种情况下,如果使用旧式 AWT组件,可以采用这种方式去掉 GUI 类并代以 Swing组件。 太长的参数列难以理解,会造成前后不一致、不易使用,而且一旦需要更多数据,就不得不修改它。如果将对象传递给函数,大多数修改都将没有必要,因为很可能只需 (在函数内) 增加一两条请求 ,就能得到更多数据。 有一个重要的例外。有时候不希望造成“被调用之对象”与“较大对象”间的某种依存关系。这时候可将数据从对象中拆解出来单独作为参数。但是应注意其所引发的代价。如果参数列太长或变化太频繁,就需要重新考虑依存结构。 如果某个类经常因为不同的原因在不同的方向上发生变化,那么也许将这个对象分成两个或多个会更好,这样每个对象就可以只因一种变化而需要修改。 针对某一外界变化的所有相应修改,都只应该发生在单一的类中,而这个新类内的所有内容都应该反应该外界变化。为此应该找出因著某特定原因而造成的所有变化,然后将它们提炼到另一个类。 如果每遇到某种变化,都必须在许多不同的 类内作出许多小修改以回应,需要修改的代码散布四处,不但很难找到它们,也很容易忘记某个重要的修改。 这种情况下,应该通过移动方法和值域把所有需要修改的代码放进同一个类。如果没有合适的类可以安置这些代码,就创造一个。通常可以把一系列相关行为放进同个类。这可能会造成少量发散变化,易于处理。 对象技术的特点:将数据和其操作行为包装在一起。 函数对某个类的依赖高过对自己所处的host类,通常的形式便是数据。在很多情况看到某个函数为了计算某值,从另一个对象那儿调用大量取值函数。解决方法是把它移到该去的地方。有时候函数中只有一部分受存在依赖,这时候应该把这部分提炼到独立函数中。 有时一个函数往往会用多个类特性,那么它究竟该被置于何处呢?我们的原则是:判断哪个类 拥有最多被此函数使用的数据,然后就把这个函数和那些数据摆在一起。如果先将这个函数分解为数个较小函数并分别置放于不同地点,上述步骤也就比较容易完成了。 常常可以在很多地方看到相同的多个数据项:两个 类具有的相同值域、许多函数签名式中的相同参数。这些“总是绑在一起出现的数据”应该放进属于它们自己的对象中。 首先找出这些数据的值域出

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档