作者zanyking (最後的六年级生)
看板java
标题Re: [问题] 面试时被问到介面功能
时间Sun Oct 20 02:24:53 2013
※ 引述《sbrhsieh (十年一梦)》之铭言:
: 这种说法已看过多次,但老实说我觉得蛮没有说服力的。
: 采用 interface 来实作多重型别时,就可以省去 ambiguity 的麻烦,是
: 一厢情愿的想法。
: 当一个 class implements 了两个拥有相同 name/signature method 的 interface
: 时,只能提供一个 implementation,但是两个 interface 内的同 name/signature
: method 的意义不一定相同,所以你不总是能够提供适当的 method implementation。
: 若"所以java解决这个问题"中的问题是指编译时会产生有时让人摸不着头绪的
: ambiguity 讯息,那我觉得 Java 的作法真的不算是一种进步。
这就要看看问题的观点是站在哪边。
从某种角度看:实作一个class的时候有两个interface (A&B)的method竟然相同,而且
当这个class的instance交给不同的使用者在用的时候,使用者以不同的interface看待
method其『意义』不同。
这其实也可以说,让这个class同时实作这两个interface是一种不良的设计。
也许有人可以找个非常漂亮的例子来说明一定得这麽做的理由,但坦白说,除了类似
I18N toString这样的情境我偶而会希望可以有这种功能外,其他时候我实在难以找到
可以善用这样的语言功能的例子。
而java这种『严格』『罗嗦』的特性反倒使得程式码一眼望去『总是可信任』的。
这个method的实现就是从ref type开始往上找到的第一个实作就是了。
也就是因为语言就是有着这样的设计限制,所以我工作的当下不用去想『如果这个猫不猫
兔不兔的物件得要在别人看他像猫的时候喵一声、像兔的时候耳朵抖两下时怎麽办?』
这种问题。而且我不只不用在阅读程式码的时候去想这问题,我设计架构的时候也可以
节省脑神经去考虑这种容易误用且总是有替代方案的作法。
或许得到的解法『不漂亮』,但因为限制的坏处带来的『不用考虑』,使得设计效率
是稳定的,程式产出增加,这反而成为一种好处。
其他的语言在这件事情上没有限制,而坏处没有被诟病,很多时候原因是这些语言的
热门是建立在特定平台、framework的兴起。於是语言没有节制的部份被平台与Framework
约制了而使得大批的中低阶开发者一开始就在范围里活动,所以不出事。
这种高级语言功能被恶用导致臭名昭彰的恶例就是C++,功能包山包海,函式库充满
各种误用的历史包袱...但或许也因为它的下场,人们找到更好的方式去设计发展下一代
的语言与开发环境。
至於进步,我是认为Java在这件事情上虽没有进步但是它『变好用』了。
而它变好用的方式就是『取消这个功能』,使得使用者不再浪费时间去想这种问题。
就追求知识的人来说这让人不爽,但就完成工作的人来说,这简约乾净的UX设计实在
太好了。
--
生命起源於简单的化学反应,灵魂是脑神经上头的火花。
掌纹没有含意,不过是具有止滑功用的纹路。
而神不存在,死去的人们只是等待细菌分解的腐肉而已。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.193.164.59
1F:推 lovdkkkk:(y) 另推 "如果这个猫不猫兔不兔的..." 10/20 08:37
2F:→ dream1124:推 10/20 19:19
3F:→ swpoker:所以动态语言都推TDD不是没有原因的 10/21 09:04
4F:→ swpoker:说真的~应该要给我m的阿~好歹是我开头钓的哩 10/21 09:17
5F:推 PsMonkey:朕封你为第一任海钓王得主 XD 10/21 10:57