第五章复合
一、什么是复合composition
编程中的复合就好像音乐中多个乐器组合在一起使用
在Objective-C中,复合是通过包含作为实例变量的对象指针实现的
举例代码:Unicycle类中拥有一个指向Pedal对象的指针和一个指向Tire对象的指针
@interface Unicycle : NSObject
{
Pedal *pedal;
Tire *tire;
}
@end // Unicycle
我们可以说Pedal和Tire通过复合的方式组成了Unicycle
严格的讲,对象间的组合才叫复合,int、float、enum和struct等基本类型都被认为是对象的一部分
二、存取方法accessor method
存取方法是用来读取或改变对象特定属性的方法,即专门为类中成员变量赋值的方法
在对其他对象的属性进行操作时,应始终使用对象所提供的存取方法,永远不直接改变其他对象属性的数值
举例代码:
@interface Car : NSObject
{
Engine *engine;
Tire *tires[4];
}
-(Engine *) engine; Engine对象的getter
-(void) setEngine:(Engine *) newEngine; Engine对象的setter
-(Tire *) tireAtIndex :(int) index; Tire对象的getter
-(void) setTire : (Tire *)tire Tire对象的setter,需要序号参数
atIndex :(int)index;
-(void) print;
@end//Car
setter方法通常根据更改的属性前加上前缀set来命名
getter方法则仅仅根据其返回的属性的名称命名
因为get在Cocoa中有特殊的含义,使用get意味着这个方法会通过你当做参数传入 的指针来返回数值,这意味着使用get开头的方法传入的通常都是指针
三、复合还是继承
何时用继承,何时用复合呢?
继承在对象间建立了is a关系
复合建立的has a关系