iOS軟件開發(fā)基礎(chǔ)-復(fù)合_第1頁
iOS軟件開發(fā)基礎(chǔ)-復(fù)合_第2頁
iOS軟件開發(fā)基礎(chǔ)-復(fù)合_第3頁
iOS軟件開發(fā)基礎(chǔ)-復(fù)合_第4頁
iOS軟件開發(fā)基礎(chǔ)-復(fù)合_第5頁
已閱讀5頁,還剩20頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、若希望輸出對(duì)象的信息(一般為實(shí)例變量的值),若希望輸出對(duì)象的信息(一般為實(shí)例變量的值),則可以在類中添加則可以在類中添加description方法,該方法的返回值方法,該方法的返回值類型為類型為NSString *,即要求返回一個(gè)字符串用以描述當(dāng),即要求返回一個(gè)字符串用以描述當(dāng)前的對(duì)象的實(shí)例變量。前的對(duì)象的實(shí)例變量。通過在通過在NSLog()中使用中使用%格式說明符來輸出對(duì)象。格式說明符來輸出對(duì)象。NSObject類中名為類中名為description的方法可以返回對(duì)象的方法可以返回對(duì)象所屬所屬類的名稱和實(shí)例在內(nèi)存中的地址類的名稱和實(shí)例在內(nèi)存中的地址。我們可以通過我們可以通過NSLog()使用

2、使用%格式說明符來輸出對(duì)象格式說明符來輸出對(duì)象。NSLog()處理處理%時(shí),它會(huì)詢問參數(shù)列表中相應(yīng)的對(duì)象時(shí),它會(huì)詢問參數(shù)列表中相應(yīng)的對(duì)象以得到這個(gè)對(duì)象的描述。也就是說:以得到這個(gè)對(duì)象的描述。也就是說:NSLog()給這個(gè)對(duì)象給這個(gè)對(duì)象發(fā)送描述消息,然后對(duì)象的發(fā)送描述消息,然后對(duì)象的description方法生成一個(gè)方法生成一個(gè)NSString并返回。之后并返回。之后NSLog在其輸出中包含這個(gè)字符在其輸出中包含這個(gè)字符串。串。例如,在例如,在main中添加如下測試語句:中添加如下測試語句:則輸出結(jié)果為:則輸出結(jié)果為:可以根據(jù)需要,可以根據(jù)需要,在自定義類中重寫在自定義類中重寫descripti

3、on方法方法,來獲取這個(gè)類的更詳盡的信息。注意,來獲取這個(gè)類的更詳盡的信息。注意,description方法方法可以不在類的接口中進(jìn)行聲明??梢圆辉陬惖慕涌谥羞M(jìn)行聲明。在自定義的在自定義的description方法中,需要返回一個(gè)字符串方法中,需要返回一個(gè)字符串,即,即NSString *。例如,在實(shí)現(xiàn)文件中重寫例如,在實(shí)現(xiàn)文件中重寫description方法:方法:則則 輸出結(jié)果為:輸出結(jié)果為:繼承繼承復(fù)合復(fù)合超類子類1子類2整體部件1部件2集體個(gè)體1個(gè)體2繼承在對(duì)象間建立了繼承在對(duì)象間建立了“is a”is a”(是是一個(gè))一個(gè))的關(guān)系。的關(guān)系。三角形是一個(gè)形狀。三角形是一個(gè)形狀。復(fù)合建立

4、的則是復(fù)合建立的則是“has a”has a”(有有一個(gè))一個(gè))的關(guān)系。的關(guān)系。如果能說如果能說“X X有一個(gè)有一個(gè)Y”Y”,就可以使用復(fù)合,就可以使用復(fù)合復(fù)合復(fù)合復(fù)合復(fù)合繼承繼承復(fù)合復(fù)合/組合組合:在一個(gè)新的對(duì)象里使用一些已有的對(duì)象,使之成為新對(duì)象的一部分,新對(duì)象通過調(diào)用已有對(duì)象的方法達(dá)到復(fù)用其已有功能的目的。interface Unicycle : NSObject Pedal *pedal;/踏板 Tire *tire; /輪子end / Unicycle獨(dú)輪車UnicyclePedalTire在在Objective-C中,復(fù)合是通過中,復(fù)合是通過包包含作為實(shí)例變量的對(duì)象指針含作為實(shí)例變

5、量的對(duì)象指針實(shí)現(xiàn)的。實(shí)現(xiàn)的。在復(fù)合中,對(duì)象可以引用其他對(duì)象,在復(fù)合中,對(duì)象可以引用其他對(duì)象,在引用時(shí)還可以利用其他對(duì)象提供在引用時(shí)還可以利用其他對(duì)象提供的特性。的特性。實(shí)例汽車組裝版本一:單一零件類型1一輛汽車一輛汽車 有有 1臺(tái)發(fā)動(dòng)機(jī)臺(tái)發(fā)動(dòng)機(jī) 和和 4個(gè)輪胎個(gè)輪胎CarEngineTire1411interface Tire : NSObjectendimplementation Tire- (NSString *) descriptionreturn (I am a tire. I last a while);endinterface Engine : NSObjectendimpleme

6、ntation Engine- (NSString *) descriptionreturn (I am an engine. Vrooom!); end12interface Car : NSObjectTire *tires4;property (nonatomic, retain) Engine *engine;- (Tire *) tireAtIndex: (int) index;- (void) setTire: (Tire *) tire atIndex: (int) index;- (void) print;end / Car方法名是方法名是setTire:atIndex:用一個(gè)

7、用一個(gè)Engine對(duì)象和四個(gè)對(duì)象和四個(gè)Tire對(duì)象組對(duì)象組合出虛擬的合出虛擬的Car實(shí)例,則該虛擬實(shí)例,則該虛擬Car實(shí)例應(yīng)該擁有一個(gè)指向?qū)嵗龖?yīng)該擁有一個(gè)指向Engine對(duì)象對(duì)象的指針和四個(gè)指向的指針和四個(gè)指向Tire對(duì)象的指針。對(duì)象的指針。13- (void) setTire: (Tire *) tire atIndex: (int) indexif (index 3) NSLog (bad index (%d) in setTire:atIndex:,index);exit (1); tiresindex = tire; / setTire:atIndex:-(Tire *)tireAtI

8、ndex: (int) index if (index 3) NSLog (bad index (%d) in tireAtIndex:”, index); exit (1); return (tiresindex); / tireAtIndex:Tire *tire = Tire new;car setTire: tire atIndex: 2;NSLog (tire number two is %,car tireAtIndex: 2);防御式編程防御式編程:在存取方法中使用通用代:在存取方法中使用通用代碼來檢查實(shí)例變量的數(shù)組索引碼來檢查實(shí)例變量的數(shù)組索引,以保證它以保證它是有效數(shù)值是有效

9、數(shù)值,若是超出了有效范圍,那么若是超出了有效范圍,那么程序就會(huì)輸出錯(cuò)誤信息并且退出。程序就會(huì)輸出錯(cuò)誤信息并且退出。- (void) printNSLog (%, engine);NSLog (%, tires0);NSLog (%, tires1);NSLog (%, tires2);NSLog (%, tires3);14 Car *aCar = Car allocinit; aCar.engine = Engine allocinit;for (int i=0; i4; i+) aCar setTire:Tire allocinit atIndex:i;aCar print;實(shí)例汽車組裝版

10、本二:多零件類型2用用繼承繼承方式來創(chuàng)建新的發(fā)動(dòng)機(jī)和輪胎種類方式來創(chuàng)建新的發(fā)動(dòng)機(jī)和輪胎種類,然后,然后利用利用Car類的存取方法(復(fù)合方式)類的存取方法(復(fù)合方式)給汽車配置新的移動(dòng)部件。給汽車配置新的移動(dòng)部件。原來的程序只能創(chuàng)建原來的程序只能創(chuàng)建相同類型發(fā)動(dòng)機(jī)和輪相同類型發(fā)動(dòng)機(jī)和輪胎的汽車。胎的汽車。改裝后的汽車:改裝后的汽車:17interface Slant6 : Engineendimplementation Slant6- (NSString *) descriptionreturn (I am a slant- 6. VROOOM!);end18interface AllWeath

11、erRadial : Tireendimplementation AllWeatherRadial- (NSString *) descriptionreturn (I am a tire for rain or shine.);end19 Car *aCar = Car allocinit; aCar.engine = Slant6 allocinit;for (int i=0; i4; i+) aCar setTire:AllWeatherRadial allocinit atIndex:i;aCar print;實(shí)例汽車組裝版本三:增加輪胎屬性3rainHandling/潮濕系數(shù)snowHandling/積雪系數(shù)AllWeatherRadialinitWithPressure: ThreadDepth:RainHandling: SnowHandling:pressure/輪胎壓力treadDepth/胎面花紋深度TireinitWithPressure:ThreadDepth:initWithPressure:initWithThreadD

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論