用于处理分数的Objective-C类的基础上,增加两个名为获取函数 (getter) 的实例方法,来实现对实例变量的检索。
之前,我们已经知道处理分数的方法如何通过名称直接访问两个实例变量 numerator 和 denominator 的情况。事实上,实例方法总是可以直接访问它的实例变量。然而,类方法则不能,因为它只处理类本身,并不处理任何实例。但是如果要从其他位置访问实例变量,该如何是好?例如,从 main 例程内部来访问。在这种情况下不能直接访问这些实例变量,因为它们是隐藏的。将实例变量隐藏起来的这种做法实际上是称为
数据封装
的关键概念。它使得编写类定义的人再不必担心程序员 (类的使用者) 是否破坏类的内部细节情况下,扩展和修改他的类定义。数据封装提供了程序员和类的开发者之间的良好隔离层。
通过编写特殊方法来检索实例变量的值,可以用一种新的方式来访问它们。例如,创建两个命名为 numerator 和 denominator 的方法,它们用来访问作为消息接收者的 Fraction 的相应实例变量。结果将是相应整数值,你将返回这些值。以下是这两个新方法的声明:
-(int) numerator;
-(int) denominator;
下面是定义:
-(int) numerator
{
return numerator;
}
-(int) denominator
{
return denominator;
}
需要注意的是,它们访问的方法名和实例变量名是相同的,这种做法不存在任何问题;事实上这是非常常见的做法。以下是代码 3-4:
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
NSLog语句
NSLog(@"The value of myFraction is: %i/%i", [myFraction numerator], [myFraction denominator]);
显示发送给 myFraction 两条消息的结果,第一条消息检索 numerator 的值,而第二条则检索 denominator 的值。设置实例变量值的方法通常称为设置函数 (setter),而用于检索实例变量值的方法叫做获取函数 (getter)。对于 Fraction 类而言,setNumerator: 和 setDenominator: 是设置函数,numerator 和 denominator 是获取函数。
上述
Objective-C 代码的最终输出结果: