6.3 方法组合

定义新方法后,可将其用于表达式中或用来创建其他方法。例如,假设有人向你提供了两个点——圆心和圆周上的一点,并要求你计算这个圆的面积。那么我们可以假设圆心坐标存储在变量 xcyc 中,而圆周上那个点的坐标存储在 xpyp 中。

第一步要做的是计算出这个圆的半径,即两个点间的距离。所幸我们已经有执行这种计算的方法 —— distance

  1. double radius = distance(xc, yc, xp, yp);

第二步是根据得到的半径计算圆的面积。我们也有执行这种计算的方法 —— calculateArea

  1. double area = calculateArea(radius);
  2. return area;

将这些代码放到一个新的方法中,结果如下:

  1. public static double circleArea
  2. (double xc, double yc, double xp, double yp) {
  3. double radius = distance(xc, yc, xp, yp);
  4. double area = calculateArea(radius);
  5. return area;
  6. }

临时变量 radiusarea 对开发和调试来说很有用,但是程序能正确运行后就可以组合方法调用,从而让程序更简洁:

  1. public static double circleArea
  2. (double xc, double yc, double xp, double yp) {
  3. return calculateArea(distance(xc, yc, xp, yp));
  4. }

这个示例演示了功能分解(functional decomposition)的过程,即将复杂的计算分成简单的方法,分别对这些方法进行测试,然后再组合这些方法来执行计算。这种做法可缩短调试时间,并且编写出来的代码准确度更高且更容易维护。