作者polarpolar (破啦贝尔)
看板Ruby
标题Re: [问题] Ruby 与 Interface Oriented Design
时间Wed Feb 14 12:06:53 2007
※ 引述《ankasc (初夏。)》之铭言:
: 原本想推文的,不过刚看了版规....XD
: 看到你的问题,第一个让我想到module, class.....??
: module好像只是用来include?
: class用来继承,可是跟interface的意义又不同,
: 不过ruby应该也没有implement interface吧....
: http://www-128.ibm.com/developerworks/tw/library/j-ruby/
: 看文中"Ruby 中的多态性"的部分....虽然感觉还是没讲...XD
: ---
: 不过又话说,讨论ruby的人还真是不多,
: 开始有点担心我的问题会不会层出不穷啊....Orz
Ruby 的 module 不只是拿来 Mixin 的,
而在与 interface 比较之前,
要先了解 include 与 implement 有何不同?
先说说为什麽大家对 interface 看法两极?
那是因为 interface 虽然提供给编译器一份「规格」,
但 implement 後里面还是得写程式,
这样的做法没什麽不好,
但是对於 reuse 一派的信众来说,可是触犯大忌。
回过头来看 module,
Ruby 有个类似 implement 的运作方式,
就举最常见的鸭子当例子好了:
class Duck < Flying
# ...
end
在 JAVA 里面,implement Flying 这个 interface
代表他一定能飞,
没有 implement Flying 则不能保证,
但在 Ruby 里面允许你在任何地方 Override fly() 这个 method
甚至还可以 undefine methods
那我们还能保证这鸭子能飞吗?
不能。
因此 Ruby 的多型其实是很模糊的,
include module 这个动作可以看作是
某个 class 被「注入」某些 methods,
至於之後这些 methods 会怎样,
Ruby 则不保证,
也因此 Ruby 不用宣告变数,为什麽?
因为宣告了也没有用 囧
因此 module 本身不只能拿来 include,
它还可以当类似函式库,当作一群 methods 方便呼叫,
而且 Ruby 里的 Module 可以 nesting
对於分类函式库算很有帮助,
不一定什麽都要被 OO 绑死啦~
---
不是讨论 Ruby 的人不多,
而是我认为很多发问者都把重点都放错地方,
没人想回应...... (′▽‵)>
正因为 Ruby 是奇怪的语言,
所以造成很多人都想用奇怪的招数来解决问题,
或甚至还没有学好「正常」的步数就来接触 Ruby、Python 之类的语言,
导致越级思考,走火入魔......
要记住 Ruby 的 pure-OO 也好,
minin、singleton、anonymous class、anonymous function 也好,
这些都是用来方便开发,而不是用来使问题复杂化的。
加油 XD
--
╭───╮╭───╮┬ ╭───╮╭───╮2
│ ││ ││ │___│├───╯
├───╯╰───╯╰───│ ││ \
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.119.98.33
1F:推 godfat:推越级思考,走火入魔 XD 很多问题真不知道从何回答起 = =b 02/14 15:22
2F:推 huge:因为宣告了也没有用 囧 02/21 17:01