一、什麼是複合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關係