快速业务通道

提高Java代码重用性的三个措施 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

提高Java代码重用性的三个措施

时间:2011-06-19

措施一:改写类的实例方法

通过类继承实现代码重用不是精确的代码重用技术,因此它并不是最理想的 代码重用机制。换句话说,如果不继承整个类的所有方法和数据成员,我们无法 重用该类里面的单个方法。继承总是带来一些多余的方法和数据成员,它们总是 使得重用类里面某个方法的代码复杂化。另外,派生类对父类的依赖关系也使得 代码进一步复杂化:对父类的改动可能影响子类;修改父类或者子类中的任意一 个类时,我们很难记得哪一个方法被子类覆盖、哪一个方法没有被子类覆盖;最 后,子类中的覆盖方法是否要调用父类中的对应方法有时并不显而易见。

任何方法,只要它执行的是某个单一概念的任务,就其本身而言,它就应该 是首选的可重用代码。为了重用这种代码,我们必须回归到面向过程的编程模式 ,把类的实例方法移出成为全局性的过程。为了提高这种过程的可重用性,过程 代码应该象静态工具方法一样编写:它只能使用自己的输入参数,只能调用其他 全局性的过程,不能使用任何非局部的变量。这种对外部依赖关系的限制简化了 过程的应用,使得过程能够方便地用于任何地方。当然,由于这种组织方式总是 使得代码具有更清晰的结构,即使是不考虑重用性的代码也同样能够从中获益。

在Java中,方法不能脱离类而单独存在。为此,我们可以把相关的过程组织 成为独立的类,并把这些过程定义为公用静态方法。

例如,对于下面这个类:

class Polygon { . . public int getPerimeter() {...} public boolean isConvex() {...} public boolean containsPoint(Point p) {...} . . }

我们可以把它改写成:

class Polygon { . . public int getPerimeter() {return pPolygon.computePerimeter(this);} public boolean isConvex() {return pPolygon.isConvex(this);} public boolean containsPoint(Point p) {return pPolygon.containsPoint(this, p);} . }

其中,pPolygon是:

class pPolygon { static public int computePerimeter(Polygon polygon) {...} static public boolean isConvex(Polygon polygon) {...} static public boolean containsPoint(Polygon polygon, Point p) {...} }

从类的名字pPolygon可以看出,该类所封装的过程主要与Polygon类型的对象 有关。名字前面的p表示该类的唯一目的是组织公用静态过程。在Java中,类的 名字以小写字母开头是一种非标准的做法,但象pPloygon这样的类事实上并不提 供普通Java类的功能。也就是说,它并不代表着一类对象,它只是Java语言组织 代码的一种机制。

在上面这个例子中,改动代码的最终效果是使得应用Polygon功能的客户代码 不必再从Polygon继承。Polygon类的功能现在已经由pPolygon类以过程为单位提 供。客户代码只使用自己需要的代码,无需关心 Polygon类中自己不需要的功能 。但它并不意味着在这种新式过程化编程中类的作用有所削弱。恰恰相反,在组 织和封装对象数据成员的过程中,类起到了不可或缺的作用,而且正如本文接下 来所介绍的,类通过多重接口实现多态性的能力本身也带来了卓越的代码重用支 持。然而,由于用实例方法封装代码功能并不是首选的代码重用手段,所以通过 类继承达到代码重用和多态性支持也不是最理想的。

提高Java代码重用性的三个措施(2)

时间:2011-06-19

措施二:把参数类型改成接口

正如Allen Holub在《Build User Interfaces for Object-Oriented Systems》中所指出的,在面向对象编程中,代码重用真正的要点在于通过接口 参数类型利用多态性,而不是通过类继承:

“……我们通过对接口而不是对类编程达到代码重用的目的。如果某个方法 的所有参数都

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号