[讨论] protocol 与 java 的 interface

楼主: HuangJC (吹笛牧童)   2014-02-14 16:08:12
学 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 写在里面宣告
宣告后要不要实作
都随便你了啊~~
作者: Blueshiva (龙野南云)   2014-02-14 16:28:00
Protocal定义里面可以指定一定要实作哪些method然后,Obj-C的精神是message传递,每个所谓的 method 呼叫,都是呼叫一个固定的function(底层的C实作),参数带你要呼叫的"method特征",所以只要被呼叫的object有对应的method特征实作,就会被叫出来执行基本上,你要理解Obj-C的设计,你需要先知道,Obj-C设计的时候"没有C++,没有Java,它是纯C去做出物件的行为"然后就比较能体会为什么要这样设计
作者: yuanruo (罪を憎んで人を憎まず)   2014-02-14 20:28:00
class有一个method_list 会根据你传入的SEL做比较SEL就你的方法名 它是用一个优化过的hash table 的set所以找到class的SEL后再根据你IMP的位置去找我记得这个set有原本系统dyld给你创的cache set,让你能让你优先查找系统你导入framework的method 和决定是否需要括展你自己加入方法的method_list
作者: Blueshiva (龙野南云)   2014-02-15 01:06:00
你去查一下程式语言的发展史,不就知道ObjC是"不用C++"(老实说我不是很确定这句话是啥意思)还是"没得用C++"了?

Links booklink

Contact Us: admin [ a t ] ucptt.com