0

我有一个代表考试的类,它可以开始/重置/暂停考试,所以方法如下:

- (void)startExam;
- (void)resetExam;
- (void)pauseExam;

但据我所知,如果方法名称以某个名词结尾,它应该有该名词的参数,例如:

- (void)startExam:(Exam *)exam;

但是在这种情况下,该类被命名为“Exam”,所以当使用该类时,人们会知道该对象是一个考试,所以似乎更好的命名方式是:

@interface Exam : NSObject
- (void)start;
- (void)reset;
- (void)pause;
@end

所以我可以使用如下:

Exam *exam = [[[Exam alloc] init] autoreleased];
[exam start];

看起来比:

[exam startExam];

或者

[exam examStart];

但这看起来确实太通用了,我觉得 NSObject(或任何超类)将来可能会添加同名的方法,例如,Java 对象有 notify、notifyAll、wait 和子类不应该覆盖这些其他目的。这在Objective C中也是如此吗?

那么在这种情况下,最好的命名约定是什么?

谢谢!

4

3 回答 3

1

在目标 C 中,实际上没有人会期望该方法startExam接受任何论证。这将是方法startExam:(注意尾随的冒号)。这些是不同的方法,您甚至可以在同一个类中同时使用它们。所以,我会去startExam

于 2012-06-14T08:25:40.597 回答
1

开始/暂停/重置属于类Exam。所以我会去:

@interface Exam : NSObject
- (void)start;
- (void)reset;
- (void)pause;
@end

当我使用 Class 的对象时,Exam我只是在脑海中读到它:

[myExam start]; 

对我来说比这更有意义:

[myExam startExam];

至于有输入参数的那个:

- (void)startWith:(Exam *)exam;

PS:但我可以看到自己按照 Dirk 的建议去做。

于 2012-06-14T08:29:08.053 回答
0

但这确实看起来太笼统了,

对我来说不是。考虑到对象模型的考试,您的方法中的“考试”一词是多余的。如果你看到代码

[myExam start];

除了考试还有什么开始?

于 2012-06-14T08:31:45.247 回答