Objective-C面向对象-实例变量的访问以及数据封装

用于处理分数的Objective-C类的基础上,增加两个名为获取函数 (getter) 的实例方法,来实现对实例变量的检索。

之前,我们已经知道处理分数的方法如何通过名称直接访问两个实例变量 numerator 和 denominator 的情况。事实上,实例方法总是可以直接访问它的实例变量。然而,类方法则不能,因为它只处理类本身,并不处理任何实例。但是如果要从其他位置访问实例变量,该如何是好?例如,从 main 例程内部来访问。在这种情况下不能直接访问这些实例变量,因为它们是隐藏的。将实例变量隐藏起来的这种做法实际上是称为 数据封装 的关键概念。它使得编写类定义的人再不必担心程序员 (类的使用者) 是否破坏类的内部细节情况下,扩展和修改他的类定义。数据封装提供了程序员和类的开发者之间的良好隔离层。

通过编写特殊方法来检索实例变量的值,可以用一种新的方式来访问它们。例如,创建两个命名为 numerator 和 denominator 的方法,它们用来访问作为消息接收者的 Fraction 的相应实例变量。结果将是相应整数值,你将返回这些值。以下是这两个新方法的声明:

-(int) numerator;
-(int) denominator;

下面是定义:

-(int) numerator
{
return numerator;
}

-(int) denominator
{
return denominator;
}

需要注意的是,它们访问的方法名和实例变量名是相同的,这种做法不存在任何问题;事实上这是非常常见的做法。以下是代码 3-4:

01  // Program to access instance variables - cont'd
02 
03  #import <Foundation/Foundation.h>
04 
05  //---- @interface section ----
06 
07  @interface   Fraction :  NSObject
08  {
09       int   numerator ;
10       int   denominator ;
11  }
12 
13  - ( void )          print ;
14  - ( void )          setNumerator:   ( int )   n ;
15  - ( void )          setDenominator:   ( int )   d ;
16  - ( int )          numerator ;
17  - ( int )          denominator ;
18 
19  @end
20 
21 
22  //---- @implementation section ----
23 
24  @implementation   Fraction
25 
26  - ( void )   print
27  {
28       NSLog   ( @"%i/%i" ,   numerator ,   denominator );
29  }
30 
31  - ( void )   setNumerator:   ( int )   n
32  {
33       numerator   =   n ;
34  }
35 
36  - ( void )   setDenominator:   ( int ) d
37  {
38       denominator   =   d ;
39  }
40 
41  - ( int )   numerator
42  {
43       return   numerator ;
44  }
45 
46  - ( int )   denominator
47  {
48       return   denominator ;
49  }
50 
51  @end
52 
53 
54  //---- program section ----
55 
56  int   main   ( int   argc ,   const   char   *   argv [])
57  {
58       NSAutoreleasePool   *   pool   =   [[ NSAutoreleasePool   alloc ]   init ];
59       Fraction   * myFraction   =   [[ Fraction   alloc ]   init ];
60      
61       // Set fraction to 1/3
62      
63       [ myFraction   setNumerator:   1 ];
64       [ myFraction   setDenominator:   3 ];
65      
66       // Display the fraction using our two new methods
67      
68       NSLog ( @"The value of myFraction is: %i/%i" ,   [ myFraction   numerator ],   [ myFraction   denominator ]);
69      
70       [ myFraction   release ];     
71       [ pool   drain ];
72      
73       return   0 ;
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 代码的最终输出结果:

The value of myFraction is: 1/3


Mike在CSDN上传的源码链接:Fraction_Access

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值