MacDev 板


LINE

學 java 時,學到 interface 這東西取代了 C 的函式指標 同事在用了後覺得不錯 反而在 C++,再也不用函式指標了 大量的使用 interface 說真的一開始給我帶來很大的門檻 但等我也學 Java,被逼著學會後 的確覺得這樣的架構還挺美妙的~ 怎麼說呢... 嗯,我一次用一整組函式指標組成的 interface 而不是一個一個指標去註冊 這樣在多個函式具有一種架構時,更可以看出它們的關係 VC 的 interface 其實就和 class 一樣 只是 RD 要有自律,不要在 base class 去 implement 裏面的函式 保留起來做純虛擬 class, 那就是 interface 了 VC 支援多重繼承, Java 不支援;但 Java 可以"繼承" interface 在我看來就是這樣,所以 繼承 兩字我要打引號 也許有人會說是 implement 吧.. 到了 Object C, 看到 protocol 看來看去它就和 java 的 interface 一樣嘛 (如果要說不一樣,那我就學不會它了) 可是它的檢查好鬆喔.. 1.我宣告我的 class 使用某 protocol 然後不實作它 Compile OK!! 2.我不宣告我的 class 使用某 protocol,但我實作它 然後在某個要求傳入實作 protocol 物件的場合,把我這個 class 物件傳進去 Compile 也 OK!! Holy 謝~ 你給我這樣在 C++ or Java 玩玩看 Compiler 一定不會饒過你的 結果 Object C 把這輕輕放下了 至此,我只好這樣去理解了: protocol, 是提高可讀性而已啊,讓你知道 "這裏有個規矩可以遵守" 其實你就把它當個 base class 看就好 你要不要在你的 class 裏,打個 < > 符號,把 protocol 寫在裏面宣告 宣告後要不要實作 都隨便你了啊~~ -- 活動/美食計劃 蘭嶼 魚白 勝興車站 星月天空 武陵 草嶺古道 嘉義阿里山小火車 保齡球  司馬庫斯 手包水餃 日月潭纜車 合歡攻頂 馬祖 鹽山 南庄 澎湖 溪頭/松林町 南投天梯 --



※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 60.251.197.63
1F:推 Blueshiva:Protocal定義裡面可以指定一定要實作哪些method 02/14 16:28
2F:→ Blueshiva:然後,Obj-C的精神是message傳遞,每個所謂的 method 呼 02/14 16:29
3F:→ Blueshiva:叫,都是呼叫一個固定的function(底層的C實作),參數帶 02/14 16:30
4F:→ Blueshiva:你要呼叫的"method特徵",所以只要被呼叫的object有對應 02/14 16:30
5F:→ Blueshiva:的method特徵實作,就會被叫出來執行 02/14 16:31
6F:→ Blueshiva:基本上,你要理解Obj-C的設計,你需要先知道,Obj-C設計 02/14 16:32
7F:→ Blueshiva:的時候"沒有C++,沒有Java,它是純C去做出物件的行為" 02/14 16:32
你是說, Obj-C 在設計的時候, C++ 還沒發明出來是嗎? 因為這句也可以理解成 "沒有使用 C++" 但 C++ 可以用前置處理器做掉,然後 .cpp 就變 .c, 再交由標準 C compiler 去跑 所以如果不是 "C++ 還沒發明出來", 而是 "沒有使用 C++" 那我就無法理解了
8F:→ Blueshiva:然後就比較能體會為什麼要這樣設計 02/14 16:33
如果是"當時還沒有 C++", 那我就懂為何它要自稱 Object 語言了 XD 因為 C++ 也是 Object 語言 就好像一家在濁水溪的米取名叫濁水溪米,但明明其他很多米也是濁水溪米 那我會覺得"你怎麼把大家的名字拿去註冊了啊,根本先講先贏嘛" --- 那有個效率上的問題,在 wiki 上我竟查到,它用訊息效率也不差.. 啊?怎麼做到的 C++ 的做法其實只是語法符號 基本上 class 可以用 struct 取代 function pointer 在 C 時代早就有了 只要在 strcut 內擺入 fp struct 就可以運作得和 class 一樣 當然, private, public 等等權限檢查,那是沒有了 可以說 C++ compiler 帶來的'必要性差異',就在權限檢查 所以 C++ 置換成 C,是絕對可行;而且有一個很標準的模型 Obj-C 的 head file 可以分兩三處各別宣告 XDDD 所謂 category,老實說這是我從前的夢想 我一直想要臨時增加一些宣告,但不要給其他 .c/cpp 檔看到 繼承到不同的子類別再各別寫? 但所有功能在 class 內都要有 private 引用的能力 可以說全都該寫到 base class 內 然後再依不同狀況 public 出去 可是子類別都必需 include 父類別,而 .h 就會公開 雖然 obj 可以不公開,但也被看到很多了 category 似乎可以解決這個問題(我還沒很清楚) 其實以前看過 C# 簡介(但我沒學),好像就有這個能力 .h 可以拆開到幾個地方 用 message 是可以理解了,那當然做得到 但程式又怎麼快得起來 :P messge 怎麼找得到 code 來執行 目前我的理解是像微軟的 DLL, 動態的東西就是要這樣,甚至函式都有保留完整 symbol 然後才可以去做字串比對,找出來執行 字串比對,就不快啦~ 但如果它不想快,只想當高階語言 (反正電腦會愈來愈快) 那就很容易理解了 ※ 編輯: HuangJC 來自: 60.251.197.63 (02/14 16:51)
9F:→ yuanruo:class有一個method_list 會根據你傳入的SEL做比較 02/14 20:28
10F:→ yuanruo:SEL就你的方法名 它是用一個優化過的hash table 的set 02/14 20:30
11F:→ yuanruo:所以找到class的SEL後再根據你IMP的位置去找 02/14 20:31
12F:→ yuanruo:我記得這個set有原本系統dyld給你創的cache set,讓你能 02/14 20:36
13F:→ yuanruo:讓你優先查找系統你導入framework的method 和決定是否需要 02/14 20:37
14F:→ yuanruo:括展你自己加入方法的method_list 02/14 20:38
15F:推 Blueshiva:你去查一下程式語言的發展史,不就知道ObjC是"不用C++" 02/15 01:06
16F:→ Blueshiva:(老實說我不是很確定這句話是啥意思)還是"沒得用C++"了? 02/15 01:06
> 貝爾實驗室的比雅尼·斯特勞斯特魯普博士在20世紀80年代發明並實現了C++ > 1980年代初,Stepstone 公司的 Brad Cox 與 Tom Love 發明了 Objective-C from wiki 要更考古才知道答案,不然我以為 1980 就是80年代,差不多差不多 要是說"戰",那是了,兩派工程師不知會不會吵起來 其實我不是要選擇;吃人頭路我已經沒有選擇了(可以只憑 C++ 寫出來嗎?) 而是去搞懂它的差異,也比較能運用它 話說回來,我買了一本 Object C 的書,應該是專教語言才對 結果它還是一直提 Mac,好像除了它沒人在用似的 難道市場說明了.. 咳咳 ※ 編輯: HuangJC 來自: 60.251.197.63 (02/15 01:28)







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Soft_Job站內搜尋

TOP