该文章转自IT实验室,希望能起到抛砖引玉的效果。牛牛们有好方法发上来共同学习下
-----------------------------------------------------------------
措施一:改写类的实例方法
通过类继承实现代码重用不是精确的代码重用技术,因此它并不是最理想的代码重用机制。换句话说,如果不继承整个类的所有方法和数据成员,我们无法重用该类里面的单个方法。继承总是带来一些多余的方法和数据成员,它们总是使得重用类里面某个方法的代码复杂化。另外,派生类对父类的依赖关系也使得代码进一步复杂化:对父类的改动可能影响子类;修改父类或者子类中的任意一个类时,我们很难记得哪一个方法被子类覆盖、哪一个方法没有被子类覆盖;最后,子类中的覆盖方法是否要调用父类中的对应方法有时并不显而易见。
任何方法,只要它执行的是某个单一概念的任务,就其本身而言,它就应该是首选的可重用代码。为了重用这种代码,我们必须回归到面向过程的编程模式,把类的实例方法移出成为全局性的过程。为了提高这种过程的可重用性,过程代码应该象静态工具方法一样编写:它只能使用自己的输入参数,只能调用其他全局性的过程,不能使用任何非局部的变量。这种对外部依赖关系的限制简化了过程的应用,使得过程能够方便地用于任何地方。当然,由于这种组织方式总是使得代码具有更清晰的结构,即使是不考虑重用性的代码也同样能够从中获益。
在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 提高代码重用性的三个措施 代码重用性
关于能提高Java代码可重用性的三个措施
第四章 面向对象的概念和 Java 实现-2 回顾 类是具有相同属性和行为的一组对象的 集合 , 对象是类的实例 封装是隐藏对象实现细节的过程,以便不让用户看到实现的细节 类可用Class 来定义,类的变量和方法可被该类的...
基于Java代码重用性的研究.pdf
Java代码可重用性的实现策略
在本篇文章中小编给各位分享了关于如何提高java代码的重用性的相关知识点内容,有需要的朋友们参考下。
从源码中抽取设计模式对于提高软件可理解性和可维护性、软件设计重用以及软件重构具有重要意义。面向Java语言提出了一种静态和动态分析相结合的源码中设计模式的抽取方法。具体地, 研究了源码中设计模式抽取的静态...
本代码资源是一个关于Java语言中包装类的讲解案例代码。通过使用实际的示例代码,详细讲解了包装类的定义、用法和优势。 适用人群: 有一定Java编程基础的开发者;对包装类概念感兴趣或希望加深理解的学习者。 ...
第1章 重用性介绍 1.1 什么是重用性 1.1.1 提取代码来作为重用 1.1.2 可重用代码的基本特性 1.2 重用的神话 1.3 重用的障碍 1.3.1 非技术障碍 1.3.2 技术障碍 1.4 希望是否尚存 1.5 这本书能给我们带来...
一旦一段代码被封装和重用,那么只需要检查很少的一段代码即可确保程序的正确性。接下来通过本文给大家介绍Java代码重用之功能与上下文重用的相关知识,感兴趣的朋友跟随脚本之家小编一起学习吧
工具允许设置白名单,使Java关键字、保留字、系统类、特殊用途的变量名不被改名,提高混淆和重用的灵活性。白名单可以使用通配符,支持前匹配和后匹配,提高设置白名单的效率。 工具可以单个文件进行混淆,也可以...
在java应用开发中,代码的重用得到了越来越多的软件工程师的重视,因为对于某些代码的重用不仅可以提高程序开发的效率,而且还能够将一些比较实用的代码有效地运用到其它的项目中,以节约软件开发的成本、提高软件生产的...
Core Java Day01 2011/10/9 ==================== 1 面向对象(OO) 2 Java 类型, 引用变量 与 堆对象 案例: 平面绘图坐标系中的一个点(Point),定义合理的属性 坐标是int类型. O+-----------------------------...
程序可以采用 JAVA 开发,但是因为它的虚拟机 (Virtual Machine) Dalvik ,是将 JAVA 的 bytecode 转成 自 己的格式,回避掉需要付给 SUN 有关 JAVA 的授权费用。 对手机制造者的影响 � Android 是款开源的移动计算...
可重用代码管理器 增加代码复写率 提高编程效率
内容概要: 本文档详细介绍了Java编程中的类和对象的概念。通过示例代码和详细解释,帮助读者理解类和对象的概念、特点和...推荐深入学习和实践面向对象编程的概念、原则和设计模式,以提升代码的可重用性和可维护性。
Java语言程序设计_第4章_类的重用课件及源代码 第4章 类的重用(熊).ppt
JAVA编程实验:类的重用
封装:把方法和变量都封装到一个类里,提高代码的安全性 继承:单继承 提高代码的重用性 多态:多态就是同一个类或者接口,使用不同的实例而执行不同操作,提高 代码的灵活性。 3. 基本数据类型
本代码资源是一个关于Java语言中泛型的讲解案例代码。通过使用实际的示例代码,详细讲解了泛型的定义、用法和优势。 适用人群: 有一定Java编程基础的开发者;对泛型概念感兴趣或希望加深理解的学习者。 使用场景...