访问器/获取器 - 用于检查实例变量值的公共方法 为了让客户端能够使用一个类,ADT 的实现者通常需要提供一个或多个公共函数以允许用户“查看”(检查) 对象的私有实例变量的当前值。这些“只读”类型的方法称为访问器函数。
例如,类 TwoDice 的两个适当的访问器函数是 getDice1() 和 getDice2(),可用于查找其中一个骰子的当前值。getDice1() 的定义是:
public int getDice1()
{
return dice1 ;
}
getDice2() 的定义类似。我们可以使用这些函数将第一个骰子的值存储在整数变量 valueOfDie1 中,如下所示:
TwoDice roll = new TwoDice() ;
int valueOfDie1 = roll.getDice1() ;
在方法调用roll.getDice1() 中,对象roll 是当前对象(调用该方法的对象),因此将getDice1() 应用于该对象将返回值roll.dice1。
Mutators /Setters - 用于改变实例变量值的公共方法。变异器应包括数据验证,以确保实例变量的值不超出其允许范围。例如,TwoDice 类有一个有趣的属性,即一旦创建了 TwoDice 对象,它的值就不能更改 - 没有提供任何公共方法来允许客户端代码这样做。这样的对象被认为是不可变的,这意味着它们一旦被创建就不能被修改。许多 Java 自己的类具有仅提供不可变对象的特性——其中两个示例是 String 和 Color 类。
类设计者通常提供所谓的 mutator 或 setter 方法,以使客户端代码能够修改对象的值。这是潜在的危险,因为它可能会损害私人数据的安全性。因此,ADT 的实现者必须提供适当的数据验证,以确保将属性(实例变量)的值正确设置在其允许值的范围内。我们的 TwoDice 类的合适的 mutator 方法是 setDice1( int n ) 和 setDice2( int n ),其中第一个的定义如下:
public void setDice1( int n )
{
assert (n >= 1) && (n <= 6) : "value of dice1 out of range: " + n ;
dice1 = n ;
}
这里有趣的是使用一个断言,如果它评估为假,则会导致程序执行被终止。