3.4 @interface部分
定义新类时,必须做一些事情。首先,要通知Objective-C编译器这个类来自何处。就是说,必须命名它的父类。其次,必须确定这个类对象要存储的数据的类型。就是说,必须描述类成员将包含的数据。我们把这些成员叫做实例变量。最后,还必须定义在处理该类的对象时将要用到的各种操作或方法的类型。这些工作都在程序中名为@interface的特殊部分内完成。该部分的一般格式类似于:
@interface NewClassName:ParentClassName
{
memberDeclarations;
}
methodDeclarations;
@end
按照约定,类名以大写字母开头,尽管没有要求这么做。但这种约定能使其他人在阅读你的程序时,仅仅通过观察名称的第一个字母就能把类名和其他变量类型区分开来。让我们暂时转换一下话题,先谈论一些在Objective-C中制定名称的有关规则。
3.4.1 选择名称
在第2章“用Objective-C进行程序设计”中,使用了几个变量来存储整型值。例如,在程序2.4中使用变量sum来存储两个数50和25相加的结果。
Objective-C语言还允许变量存储非整型的数据类型,只要在程序中使用变量之前,对它进行适当的声明即可。变量可以用于存储浮点数、字符,甚至是对象(或者更确切地说,是对对象的引用)。
制定名称的规则相当简单:名称必须以字母或下划线(_)开头,之后可以是任何(大写或小写)字母、下划线或者0到9之间的数字组合。下面是一列合法的名称:
·sum
·pieceFlag
·i
·myLocation
·numberOfMoves
·_sysFlag
·ChessBoard
另一方面,根据规定,以下名称是非法的:
·sum$value—$是一个非法字符。
·piece flag—名称中间不允许插入空格。
·3Spencer—名称不能以数字开头。
·int—这是一个保留字。
int不能用作变量名,因为其用途对Objective-C编译器而言有特殊含义。这个使用称为保留名或保留字,一般来说,任何对Objective-C编译器有特殊意义的名称都不能作为变量名使用。附录B“Objective-C 2.0语言总结”,提供了这些保留名的完整列表。
应该始终记住,Objective-C中的大写字母和小写字母是有区别的。因此,变量名sum、Sum和SUM,都表示不同的变量。注意,在命名类时,类名要以大写字母开始。另一方面,实例变量、对象以及方法的名称,通常以小写字母开始。为使程序具有可读性,名称中要用大写字母来表示新单词的开始,如以下例子所示:
·AddressBook—可能是一个类名。
·currentEntry—可能是一个对象。
·current_entry—一些程序员还使用下划线作为单词的分隔符。
·addNewEntry—可能是一个方法名。
确定名称时,要遵循同样的标准:千万不要偷懒。要找出能反应出变量或对象使用意图的名称。原因是明显的。就像使用注释语句一样,富有意义的名称可以显著增强程序的可读性,并可在调试和归档阶段受益匪浅。事实上,因为程序具有更强的自解释性(self-explanatory),所以归档的任务将很可能大大减少。
以下是代码清单3-2中的@interface部分:
//———-@interface section———-
@interface Fraction:NSObject
{
int numerator;
int denominator;
}
-(void)print;
-(void)setNumerator:(int)n;
-(void)setDenominator:(int)d;
@end
新类(NewClassName)的名称为Fraction,其父类为NSObject。(我们将在第8章“继承”中讲解有关父类的更详细内容。)NSObject类在文件NSObject.h中定义,导入Foundation.h文件时会在程序中自动包括这个类。