Java语言程序设计 教学课件 作者 于红 第6章_实用类与类的设计.ppt
文本预览下载声明
7)设计方案的审查与重构 如果说,前述每个方法的推理和设计都具备合理性的话,那么,类的整体设计方案则不一定是合理有效的,尽管这里讨论的是单类的设计问题,也需要进行如下多方面的分析: 方法结构的合理性——结构简明有效、逻辑清晰。 方法接口的健壮性——即使将来方法的实现方式有所不同,方法接口也可以保持不变。 方法实现的外部独立性——一个方法的实现要尽可能与本类的细节保持高相关性,也要尽可能降低与外部类的耦合性,特别体现在对参数类的细节访问上尽可能要少。 方法间的有效重用——提高方法内部的设计效率。 方法、成员变量等的修饰符的合理使用——考察可见性、静态、终止、抽象等修饰的合理安排。 类实例化的价值、被继承的价值、实例化的数量、实例化的成功与失败、加载与卸载环节的特殊需求等。 临界资源分析——考察线程安全性并选择合理的并发方案。 探讨整个类有没有进行进一步抽象或分离的必要——设计过程是一个推理演化的过程,超类抽象、接口抽象、类的分离(然后再组合)可能都会在类的审查重构时候发生。 8)对类进行充分的测试 在测试驱动模式下,设计的过程也是测试的过程,这样不仅能够有效地完成设计,也会促使类的编程接口更加友好。一般情况下,可以针对每个事物类编写一个甚至多个测试类,这些测试类,也可以作为事物类的应用实例。 2. 单词分解类 在简单地进行程序设计的情况下,单词分解可能是一个很简单的问题,如Copyright(C) 2010 XXX.这一句话分解的结果是Copyright、C、2010、XXX共四个单词,如果用程序来表达,下面的一段代码可以完成单词分解的功能: public class analyzer{ public static void main(String[] args) { String sentence=Copyright(C) 2010 XXX.; //原始句子 String separator= ,;().; //分隔符 int i, j; i=0; while(isentence.length()){//循环流程:跳过连续的分隔符,取出一个单词 if (separator.indexOf(sentence.charAt(i))=0) {++i; continue;} //跳过连续的分隔符 j=i; //当前字符一定是一个单词的开始 while (isentence.length() separator.indexOf(sentence.charAt(i))==-1) ++i; //跳过单词到下一个分隔符或者字符串结束 System.out.println(sentence.substring(j,i)); //取出一个单词 } } } 上述代码中有效的内容不过10行左右,但是这样进行程序设计,仅仅是完成了一次查找和输出过程,不仅可能没有完成任务,甚至是做了不该做的事情,难于满足使用者(程序员)的要求,因而可复用的价值很低。实际的需求可能就是“设计一个单词分解类”,[语意不清,请核对]但如果能够仔细研究一下,从满足各种可能的用户期望的角度考虑,再充分考虑代码的可复用性以及对象的重用性,那么如下的类的设计描述(API形式)也仅能反映出部分需求: public class analyzer{ private String sentence; //原始句子 private String[] identifier; //单词(此处使用数组而不是ArrayList等类型,增加一点实现上的难度) private String separator= ,;; //分隔符 private int sPos=0; public analyzer(String sen, String sep); //构造方法,构造时完成分解 public void setSentence(String s); //更改句子的方法,在更改的过程中也完成分解 public void setSeparator(String s); //更改分隔符的方法,在更改的过程中也完成分解 private void make(); //分解方法 public String getString(int pos); //取出指定序
显示全部