诊断Java代码:设计轻松的代码维护
日期:2007年5月2日 作者: 查看:[大字体 中字体 小字体]-
有效调试源自良好的编程。设计易于维护的程序是程序员面临的最困难挑战之一,其部分原因在于程序通常并不是由那些编写代码的程序员维护的。
为了有效维护这样的程序,新程序员必须能够快速了解程序的工作原理,如果程序员能够单独理解整个程序中各个小部分,那么就可以容易地了解程序的工作原理。
通过讨论可变性、可译码性、私有方法、最终方法、最终类、本地代码、单元测试以及重构问题,我们将简述编写程序的一些方法,以帮助使程序更易理解和维护。
可变性和可译码性
首先讨论可变性问题。如果在一个程序的计算期间,其每一部分所处理的数据都没有被该程序的其它、远程部分更改,那么就很容易单独理解该程序的各个部分。
太多信息
例如,请考虑一个使用容器类实例的程序,可以修改其中的成分链接。每次将容器从程序某一部分上的方法传递到该程序其它部分的方法,以及每次调用 new 表达式(其中容器被作为参数传递)时,容器就可能脱离调用方法的控制发生改变。
在我们首先理解调用方法调用的每个方法如何修改容器之前,我们不能真正确保我们理解了调用方法,由此我们诊断错误的能力也就更差。如果这些被调用的每个方法都依次调用其它修改方法,那么维护程序员为了理解单个方法必须阅读的代码总量会迅速增加,多得无法控制。
由于这个原因,对可变容器和不可变容器使用不同类会非常有利。在不可变版本中,容器的字段可以标记成 final。
求助于函数样式
相对于修改旧数据,为构造新数据而进行代码编写称为函数样式,因为程序的方法与数学函数相似,其行为是根据每个输入所返回的输出来单独描述的。
函数样式经常被忽略的优点是相当容易单独理解程序的个别组件。如果方法所操纵的数据决不会被其主体中执行的任何操作改变,那么程序员要理解该方法必须做的就是理解那些操作返回的结果。将之与前面的一个方法调用几个其它方法的方案相对照,那个方案中的其它几个方法都修改这一方法所操作的数据结构。
Java 语言的一个相当好的特性是它允许我们使用 final 关键字(作为类型检查器的伪指令)来声明何时我们要使某个数据成为不可变。
使用 final 关键字来避免变化是“钉住”类的方法行为的一个好方法。每次修改字段时,都有可能改变引用该字段的方法的行为。另外,将字段标记为 final 让阅读程序的其他程序员立即知道:不管整个程序有多大,决不要修改该字段。例如,请考虑下列表示不可变列表的类层次结构。
清单 1. 表示不可变列表的类层次结构
abstract class List {...}
class Empty extends List {...}
class Cons extends List {
private final Object first;
private final List rest;
}
这些类中的所有字段都被标记成 final。要确保这些类的实例不可变,这样做够了吗?不太够。当然,即使字段被标记成 final,该字段本身的组件可能不是 final,记住这一点很重要。当那些组件更改时,引用那些组件的程序的任何部分可能会被修改,而不管字段本身是否改变。在上面的示例中,尽管列表的组成元素不能被修改,但是我们必须检查那些元素本身没有包含可能被修改的非最终字段。
- [1] [2] [3] [4] 下一页
-
- 诊断Java代码:设计轻松的代码维护 相关文章:
- ·诊断Java代码:设计轻松的代码维护
- 诊断Java代码:设计轻松的代码维护 相关软件
- 特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作
- 者.文章版权归文章原始作者所有.对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转
- 载的文章有版权问题请联系编辑人员,我们尽快予以更正. 转载请注明来源:http://www.hackhome.com
上一篇:谈谈Java:Checked Exception与Runtime Exception 的区别
下一篇:Java趋势:脚本语言引领风骚
精品推荐
热点TOP10
- ·JAVA教程 第五讲 AWT图形用户界面设计
- ·SP 短信开发-基础知识篇
- ·使用JAVAMAIL发邮件的一个例子(转)
- ·J2ME蓝牙程序开发实战入门
- ·用Java实现音频播放
- ·精通必学:Eclipse快捷键指南
- ·用Java实现SMTP服务器
- ·使用SimpleDateFormat必须注意的问题
- ·Java基础:你是否了解KVM的常量池
- ·关于EJB调用原理分析
- ·Java语言数据库操作的基本流程
- ·Leopard新问题 不能用最新版Java
- ·Sun:JavaFX Mobile和JavaFX Script
- ·Java EE6提案的两大主题:拓展性和概要
- ·Java会因为RoR的流行而过时吗?
- ·Java资料:Swing中的事件处理详细资料
- ·Java知识:Web应用下实现定时任务简便方法
- ·技巧:Java中用动态代理类实现记忆功能
- ·新手入门:写Java程序的三十个基本规则
- ·入门:Java初学者入门要注意的基础知识
特别推荐
- ·Java精华积累:初学者都应该搞懂的问题
- ·Java多媒体框架设计自动播放机实例详解
- ·如何有效防止Java程序源码被人偷窥?
- ·Cell插件在J2EE系统中的应用
- ·初学者想学Hibernate,初级基础教程
- ·Java语言实现支持视频点播的WEB服务器
- ·关于Java编程的中文问题的几条分析原则
- ·确保J2ME无线移动商业应用程序的安全性
- ·Java开源技术:Eclipse的使用技巧详解
- ·新手入门:Java中的修饰词使用方法总结
- ·JAVA开发者应该去的20个英文网站
- ·使用JDBC创建数据库访问程序
- ·JDK的命令详解
- ·Java学习从入门到精通(附FAQ)
- ·Tomcat性能调整
- ·JSF:Java中面向Web开发的生旦净末丑
- ·对Java语言入门初学者的一些建议
- ·Java技术的新方向
- ·Jive源代码研究
- ·谨慎使用Date和Time类
