Java 版 (精华区)

发信人: cameran (竹晨), 信区: Java
标  题: 读写方法增强 Java 代码的健壮性
发信站: 哈工大紫丁香 (2001年10月10日09:33:42 星期三), 站内信件

读写方法增强 Java 代码的健壮性  英文原文
 Scott W. Ambler
总裁,Ronin International
2000 年 10 月 12 日
Scott Ambler 解释了如何使用读写方法,以及为什么使用这些读写方法会成为您的组织
可以推行的一种最重要的标准。本文改编自 The Object Primer 2nd Edition 的第 8 
章。
封装和信息隐藏是导致健壮类和组件设计的基本原则。Java 开发人员用来增强封装性和
支持信息隐藏的一种重要技术就是恰当地使用读写方法。
读写方法 -- 直接操纵字段值的成员函数 -- 分成两类:setter 和 getter。setter 是
修改字段的值,而 getter 是获取其值。虽然读写方法对代码增加了少量的开销,但与
其它因素(譬如,有问题的数据库设计)相比,这点性能上的损失是微不足道的。读写
方法可以帮助隐藏类实现的细节,因而增强了代码的健壮性。通过最多两个控制点(从
这两个控制点来访问字段),一个 setter 和一个 getter,使您能够通过将需要更改的
点数降低到最少来增强类的可维护性。
图 1 描述了 Person 类 homeAddress 字段的 getter 和 setter 成员函数的实现。ge
tter 和 setter 是很有用的,因为它们使您能够封装可应用于数据字段的重要商业规则
、转换逻辑和验证逻辑。例如,图 2 呈现了 setter 成员函数的一种替代实现。请查看
 setter 成员函数如何通过首先调用 validate() 成员函数来验证已传递的地址类的有
效性。如果它是有效的,那么该函数设置 homeAddress 字段的值。如果地址无效,该函
数抛出一个异常。
图 1. Person 类 homeAddress 字段的 getter 和 setter
/**
* Answers the person's home address
*
* @return homeAddress
*/
public Address getHomeAddress()
{
  return homeAddress;
}
/**
* Sets the person's home address
*
* @param homeAddress
*/
public void setHomeAddress(Address homeAddress)
{
  this.homeAddress = homeAddress;
}
图 2. setHomeAddress() 成员函数的替代实现 /**
* Sets the person's home address
*
* @param homeAddress
* @return homeAddress
*/
public Address setHomeAddress(Address homeAddress) throws InvalidDataExcepti
on
{
  // Only set the address if it is valid
  if (homeAddress.validate() ) {
        this.homeAddress = homeAddress;
  }
  else {
        throw new InvalidDataException();
  }
}
您的组织可以推行的最重要的标准之一是使用读写方法。一些开发人员不想使用读写方
法成员函数,因为他们不想额外敲键盘输入几个必须的字符(例如,对于 getter,您需
要在字段名称前面和后面输入 get 和 ()。是否使用读写方法的底线是这样的:对于因
使用读写方法而增加的可维护性和可扩展性的考虑一定要重于其使用的恰当性。
getter 成员函数应以 get + 字段名称来命名,除非该字段表示一个布尔值(真或假)
,并且 getter 以 is + 字段名称命名。setter 成员函数应以 set + 字段名称来命名
,不考虑该字段的类型。正如表 1 中所见,字段名称总是使用将每个字的首字母大写,
而其它字母小写的混合写法。在 Java Development Kit (JDK) 中一直使用这种命名约
定,而且这种约定在 JavaBean 开发以及在 Enterprise JavaBean (EJB) 2.0 中用于持
久字段中也是必须的。
表 1.读写方法命名示例
字段 类型 getter 名称 setter 名称
name  string  getName setName
homeAddress Adress object getHomeAddress setHomeAddress
persistent boolean isPersistent setPersistent
zipCode int getZipCode setZipCode
instructors Vector of Professor objects getInstructors setInstructors
参考资料
有关读写方法方法的详细信息,请参阅:
developerWorks 网站上的 Scott Ambler 的其它技巧和文章
Building Object Applications That Work: Your Step-By-Step Handbook for Devel
oping Robust Systems with Object Technology,Scott W. Ambler 著。New York:C
ambridge University Press,1998。
Process Patterns -- Building Large-Scale Systems Using Object Technology ,S
cott Ambler 著。New York:Cambridge University Press,1998。
The Object Primer 2nd Edition,由 Scott W. Ambler 著。New York:Cambridge Un
iversity Press,2000。
The Unified Process Construction Phase,Scott W. Ambler 和 Larry L. Constant
ine 著。Gilroy,CA:R&D Books,2000。
The Java Language Specification ,James Gosling,Bill Joy 和 Guy Steele 著。
Reading,MA:Addison-Wesley Longman,Inc.,1996。
Advanced Java: Idioms, Pitfalls, Styles and Programming Tips,Chris Laffra 著
。Upper Saddle River,NJ:Prentice Hall Inc.,1997。
Essential Java Style: Patterns for Implementation,Jeff Langr 著。Upper Sadd
le River,NJ:Prentice-Hall PTR,1999。
Java 2 Performance and Idiom Guide: Guidelines for Java 2 Performance, Codin
g, and Testing ,Craig Larman 和 Rhett Guthrie 著。Upper Saddle River,NJ:P
rentice Hall Inc.,2000。
Object-Oriented Software Construction, Second Edition,Bertrand Meyer 著。Up
per Saddle River,NJ:Prentice-Hall PTR,1997。
The Elements of Java Style,Alan Vermeulen、Scott W. Ambler、Greg Bumgardner
、Eldon Metz、Trevor Misfeldt、Jim Shur 和 Patrick Thompson 著。New York:Ca
mbridge University Press,2000。
关于作者
Scott W. Ambler 是 Ronin International 的总裁,该公司是一家专门提供面向对象过
程指导、体系结构建模和 Enterprise JavaBean (EJB) 开发的咨询企业。他自己著作了
或者与其他人合著了几本有关面向对象开发的书籍,包括最近出版的 The Object Prim
er 2nd Edition,该书详细介绍了本文所概述的主题。可以通过 scott.ambler@ronin-
intl.com 与他联系,他的网站位于 www.ambysoft.com。

--
欲讯秋情众莫知, 喃喃负手叩东篱。
孤标傲世偕谁隐,一样花开为底迟?
圃露庭霜何寂寞,鸿归蛩病可相思?
休言举世无谈者,解语何妨片语时。

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.239.175]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:2.913毫秒