AgileJava 读书笔记 (一)
AgileJava是一本基于测试驱动开发的方法帮助你学会如何雕琢你的Java代码,从而得到稳定的面向对象设计和高可维护、高质量的系统。全书以一个学生管理系统为例子,一步一步教你如何设计你的系统,编写出高质量的代码,重构已有的代码等。
下面是我对本书学习的跟踪记录:
1 需要的软件
IDE或者程序编辑器
IDE:Eclipse、Myeclipse、Borland Jbuilder、NetBeans等
程序编辑器 记事本、TextPad、UltraEdit和SlickEdit等。
Java虚拟机
Java 2 Sdk 版本 5.0
Junit
您可以从Http://www.Junit.org上免费下载JUnit 就是将JUnit.zip文件内容解压缩到硬盘上本书使用的是Junit 3.8.1。
Ant
Ant是一个基于XML的编译工具,Ant现在已经成为了编译和部署Java项目的标准。这个工具可能已经过时了。
2 编写测试类测试环境
第一章 起步
软件开发是一个主要问题是代码维护的高成本:原因之一是匆忙行动或者纯粹疏忽导致的代码混乱。软件开发的主要任务是让软件可以工作,可以通过在编码之前先编写测试代码来应对这个挑战。其次,您的工作要确保代码是干净的。可以通过两种机制来实现
1. 保证在系统中没有重复的代码。
2. 保证代码是干净的,并且富有表现力,可以清晰地体现程序员的意图。
看一个测试代码
Public void testCreate(){
Student student = new Student(“Jane Doe”);
String studentName = student.getName();
assertEquals(“Jane Doe”,studentName);
String secondStudent = new Student(“Joe Blow”);
String secondStudentName = secondStudent.getName();
assertEquals(“Joe Blow” ,secondStudentName);
assertEquals(“Jane Doe”,studentName);
}
第一步 要清除不必要的局部变量:studentName 和 secondStudentName 。它们丝毫无助于对方法的理解,它们可以被studentd对象的查询所替代,就像最后一个assertEquals。
应该改写为: assertEquals(“Jane Doe”,student.getName());
第二步 代码中到处嵌入字符串被视作不良的编程习惯。一个原因是,如果每个字符串所代表的意义不清晰地话,将很难理解这样的代码。在这个例子中,违背了不能有重复代码的准则。每个字符串(JaneDoe)都出现两次。而且这样的可能性意味着,改变了一个,没有改变另一个,从而代码中引入了缺陷。
消除此冗余的方法使用字符串常量代替一个字符串。
final String firstStudentName = “Jane Doe”;
这种开发流程是:
1 编写一个小测试,来断言某些功能正确与否。
2 运行测试,如果结果是失败。
3 编写代码,使测试通过。
4 重构测试和代码,消除重复的概念,确保代码富有表现力。
这样的循环,会很快成为一种根深蒂固、自然地开发流程。
其他注意地方:
1 成员变量和参数使用相同的名字,但是在必要的地方用Java关键字this来调用成员变量。
2 不要把成员变量直接暴露给其他对象。允许其他对象访问成员变量是一个坏注意
class Student {
private String name;
……
3 命名约定:采用驼峰模式命名规则,用名词来为成员变量命名,名字要能描述该成员变量被用作什么或者它表示什么,而不是如何实现。如firstName,trimer,description等。方法通常是动作或者查询:发送消息告诉对象做某件事情,或者您向对象请求获取某些信息。应该使用动词命名动作型方法。如:sell isDoorClosed等。取对象的属性方法一般的命名规则是getXxx这种形式,如取学生的姓名 getName方法。类名使用大写的驼峰模式,应该总用名词表示对象,对象是事物(实例)的抽象,不要使用复数名词作为类名。例如Student,LingList等。