重讀了一下《Objective-C基礎(chǔ)教程》,發(fā)現(xiàn)書(shū)中關(guān)于面向?qū)ο缶幊瘫举|(zhì),有一章獨(dú)特的解釋。
什么是面向?qū)ο?/h2>OOP是一種編程架構(gòu),可構(gòu)建由多個(gè)對(duì)象組成的軟件。
OOP是一種編程架構(gòu),可構(gòu)建由多個(gè)對(duì)象組成的軟件。
想象對(duì)象就像軟件中的一個(gè)個(gè)小機(jī)器人,它們各自完成特定的工作,并互相傳遞信息,完成多種合作的工作。
面向?qū)ο蟮哪康?/h2>減少修改正常工作的代碼
面向?qū)ο缶幊痰暮诵氖情g接
減少修改正常工作的代碼
間接并不神秘
變量就是一種間接
'''
for (int i = 1; i <= 10; i++) NSLog(@"%d", i);
'''
通過(guò)把10替換成count,輸出范圍的改變就再也不會(huì)導(dǎo)致循環(huán)方法的修改:
'''
int count = 10
for (int i = 1; i <= count; i++) ?NSLog(@"%d", i);
'''
文件名也是一種間接
通過(guò)文件名讀取一個(gè)電話號(hào)碼文件,文件內(nèi)容的增減,比如從一個(gè)市號(hào)碼擴(kuò)展到全國(guó)號(hào)碼不會(huì)導(dǎo)致處理方法的修改。
objective-c 類中的 self
對(duì)自身的一種間接訪問(wèn),獲得類內(nèi)部的其它變量,而不用關(guān)心這些變量的實(shí)際存儲(chǔ)。
因此對(duì)象是一種指針,是對(duì)數(shù)據(jù)及其操作的一種“間接”。
假設(shè)一個(gè)Shape類,[shape draw] 真正調(diào)用的方法,是由子類實(shí)現(xiàn)的draw方法決定的,如Circle 類,繼承自 Shape,它的draw 能真正繪制一個(gè)圓形。
下面是一個(gè)方法執(zhí)行的過(guò)程
1) ?查詢消息的目標(biāo)對(duì)象屬于哪個(gè)類。
2)對(duì)應(yīng)的類查找代碼塊,獲取方法的地址。
3)Objective-C運(yùn)行該方法的代碼。
“間接”實(shí)現(xiàn)了隱藏
設(shè)計(jì)一系列基本對(duì)象,對(duì)外公開(kāi)抽象對(duì)象及其基本操作,并隱藏具體的實(shí)現(xiàn)細(xì)節(jié)。
那么問(wèn)題來(lái)了,隱藏帶來(lái)了什么好處?隱藏迫使調(diào)用者發(fā)布指令,而不是傳遞數(shù)據(jù),完成功能的過(guò)程交給了對(duì)象本身。所以值得注意的是:對(duì)于一個(gè)繪圖程序,一個(gè)只傳遞了三角形三點(diǎn)數(shù)據(jù)而不能繪制本身的“三角形對(duì)象”,是設(shè)計(jì)不良的對(duì)象。