该文章转自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的实例源码-最快速的Java代码生成器 rapid-generator.zip" 提供了一种高效...
Java代码可重用性的实现策略有多种,包括接口编程、改写类的实例方法和代码分离等。这些方法可以帮助我们提高开发效率、简化代码和减少开发成本。但是,在实际应用中,我们需要根据实际情况选择合适的策略,避免代码...
"java简单实例程序源代码"这个压缩包包含了一系列章节相关的Java实例源代码,适合初学者和有经验的开发者用来加深对Java语言的理解。以下是这些章节可能涉及的重要知识点的详细解释: 1. **CH11**: 这个章节可能...
本资料集包含了一系列的Java教材实例代码,旨在帮助学习者深入理解Java编程的核心概念和实际应用。下面将对这些实例代码中的关键知识点进行详细的阐述。 1. **基础语法**:Java的基础语法包括变量声明、数据类型...
本文将介绍三种提高 Java 代码重用性的方法:改写类的实例方法、选择最简单的参数接口类型和把参数类型改成接口。 一、改写类的实例方法 在 Java 中,方法不能脱离类而单独存在。为了提高代码的重用性,我们可以把...
"Java入门实例代码"是针对初学者设计的一系列教程,旨在帮助新手快速掌握Java SE(Java Standard Edition)的基础知识。Java SE是Java的核心部分,包含了开发桌面应用、网络应用和移动应用所需的所有工具和API。 在...
8. **泛型**:泛型引入后,Java提高了代码的类型安全性和重用性,`Test.java`可能会展示泛型类或泛型方法的使用。 9. **JVM内存管理**:Java虚拟机(JVM)负责垃圾收集和内存管理,理解堆、栈、方法区等内存区域对...
在Java应用开发中,代码可重用性成为了一个核心议题,因为软件工程师们逐渐认识到,通过重用代码,不仅可以显著提高开发效率,还能节省资源并提升软件生产的整体效率。重用经过验证的、实用的代码可以减少错误和调试...
10. **泛型**:泛型提高了代码的类型安全性和重用性,实例会展示如何在类、接口和集合中使用泛型。 11. **设计模式**:Java经典实例可能会包含常见的设计模式,如单例模式、工厂模式、观察者模式等,这些都是软件...
"Java入门实例源代码_1"这个压缩包提供了一系列的Java编程实例,覆盖了初学者需要掌握的基础知识。下面,我们将逐一解析这些实例所涉及到的关键知识点。 1. **实例1**:通常,实例1会涵盖Java程序的基本结构,包括`...
在Java编程语言中,类的重用是核心概念之一,它极大地提高了代码的效率和可维护性。本节内容主要围绕“Java语言程序设计_第4章_类的重用”展开,通过“第4章 类的重用(熊).ppt”的课件和源代码,我们将深入探讨这...
为了更高效地利用这个库,开发者应该熟悉WebDriver的概念,掌握如何编写基于Page Object模式的测试脚本,这将有助于提高代码的可维护性和可重用性。同时,理解Selenium WebDriver的元素定位策略,如ID、XPath、CSS...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决问题的经验总结,可以提高代码的可重用性、可维护性和灵活性。设计模式不是具体的代码或库,而是一种通用解决方案的描述,适用于多种编程语言,Java也...
Java设计模式是软件开发中的一种最佳实践,它们是解决常见问题的经验总结,旨在提高代码的可重用性、可维护性和可扩展性。本篇Java设计模式(疯狂Java联盟版)详细介绍了二十三种设计模式,包括创建型、结构型和行为...
- 继承:一个类可以从另一个类继承属性和方法,实现代码复用。 - 封装:隐藏内部实现细节,只暴露必要的接口。 - 多态:同一种操作作用于不同的对象,可以有不同的解释,产生不同的效果。 6. **实验6-字符串**:...
10. 泛型:泛型是Java 5引入的新特性,允许在类、接口和方法中使用类型参数,提高代码的类型安全性和重用性。 以上只是Java面向对象编程的一部分核心知识点,实际的"Java核心卷轴1--pdf版"可能还包括更多内容,如...
本实验题中涉及到了类的继承、抽象类以及方法的实现,这些都是Java面向对象编程的重要知识点。 首先,我们来看`Student`类,它包含学生的名字(name)以及三门课程的成绩(classA, classB, classC)。类中定义了一...
在本Java课程设计实例中,我们将探讨如何构建一个计算器应用,这是一个常见的编程练习,旨在帮助学生深入理解面向对象编程的概念,以及如何将这些概念应用于实际项目。计算器项目通常包括基本的算术运算(如加、减、...