[討論] protocol 與 java 的 interface
學 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
推
02/14 16:28, , 1F
02/14 16:28, 1F
→
02/14 16:29, , 2F
02/14 16:29, 2F
→
02/14 16:30, , 3F
02/14 16:30, 3F
→
02/14 16:30, , 4F
02/14 16:30, 4F
→
02/14 16:31, , 5F
02/14 16:31, 5F
→
02/14 16:32, , 6F
02/14 16:32, 6F
→
02/14 16:32, , 7F
02/14 16:32, 7F
你是說, Obj-C 在設計的時候, C++ 還沒發明出來是嗎?
因為這句也可以理解成 "沒有使用 C++"
但 C++ 可以用前置處理器做掉,然後 .cpp 就變 .c, 再交由標準 C compiler 去跑
所以如果不是 "C++ 還沒發明出來", 而是 "沒有使用 C++"
那我就無法理解了
→
02/14 16:33, , 8F
02/14 16:33, 8F
如果是"當時還沒有 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)
→
02/14 20:28, , 9F
02/14 20:28, 9F
→
02/14 20:30, , 10F
02/14 20:30, 10F
→
02/14 20:31, , 11F
02/14 20:31, 11F
→
02/14 20:36, , 12F
02/14 20:36, 12F
→
02/14 20:37, , 13F
02/14 20:37, 13F
→
02/14 20:38, , 14F
02/14 20:38, 14F
推
02/15 01:06, , 15F
02/15 01:06, 15F
→
02/15 01:06, , 16F
02/15 01:06, 16F
> 貝爾實驗室的比雅尼·斯特勞斯特魯普博士在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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
MacDev 近期熱門文章
PTT數位生活區 即時熱門文章