《Flash程序员的Objective-C教程–类结构拆分.doc》由会员分享,可在线阅读,更多相关《Flash程序员的Objective-C教程–类结构拆分.doc(3页珍藏版)》请在金锄头文库上搜索。
1、Flash程序员的Objective-C教程(2) 类结构拆分在上一篇教程中,我们编写了基本的接口和类实现,但还没有做文件拆分,所有的代码都集中在一个文件中。这样做的缺点显而易见,随着项目的扩大和代码量的增加,项目的可维护性将会变得非常困难。大部分面向对象的语言,都支持通过文件拆分的形式,将源码按照一定的规则,分散在若干个文件中。在ActionScript中,想必我们已经很熟悉了,每一个类一般都会单独作为一个文件存在。而在Objective-C中,由于类通常为拆分为接口和实现两个部分,所以类的代码,通常也分别放在两个文件里。.h文件,头文件,存放类的interface指令,公共struct定义
2、,enum常量,#defines和extern全局变量等等,头文件名称应该与类名称相同,比如Triangle.h.m文件,所有实现细节(包括类的implementation指令,全局变量定义,私有struct等,与类同名,比如Triangle.m)根据这个原则,我们将之前的图形代码,拆分出如下的文件结构:首先是Shape的接口,Shape.h文件:#import / 用枚举来定义颜色值typedef enum kRedColor, kGreenColor, kBlueColor ShapeColor;/ 定义图形区域的结构类型typedef struct int x, y, width, he
3、ight; ShapeRect;/ 图形基类的定义,包括接口和实现interface Shape : NSObject ShapeColorfillColor; ShapeRect bounds;- (void) setFillColor: (ShapeColor) fillColor;- (void) setBounds: (ShapeRect) bounds;- (void) draw;end / Shape复制代码Shape.m的定义,注意要导入接口定义#import Shape.h:#import Shape.himplementation Shape- (void) setFillC
4、olor: (ShapeColor) c fillColor = c; / setFillColor- (void) setBounds: (ShapeRect) b bounds = b; / setBounds- (void) draw / drawend / Shape复制代码然后是三角形的接口和类,跟Shape类似:Triangle.h#import Shape.hinterface Triangle : Shapeend复制代码Triangle.m#import Triangle.himplementation Triangle/ -/ 将颜色定义的枚举值,转换为可供阅读的字符串,这
5、里把这个方法作为类的静态方法+ (id) colorName: (ShapeColor) color NSString *colorName; switch (color) case kRedColor: colorName = 红; break; case kGreenColor: colorName = 绿; break; case kBlueColor: colorName = 蓝; break; default: colorName = 不支持的色值; break; return (colorName); / colorName- (void) draw NSString *cname
6、 = Triangle colorName:(fillColor); NSLog (drawing a triangle at (%d %d %d %d) in %, bounds.x, bounds.y, bounds.width, bounds.height, cname); / drawend / Triangle复制代码然后对于main中的代码,就变得非常简单了:#import #import Shape.h#import Triangle.h/ -/入口方法int main(int argc, const char * argv) ShapeRect rect0 = 0, 0, 10, 30 ;/定义图形区域 Shape *shape0 = Triangle new;/实例化 shape0 setBounds: rect0;/调用setBounds方法 shape0 setFillColor: kRedColor;/调用setFillColor方法 shape0 draw;/调用draw方法 return (0);复制代码