Re: [問題] Ruby 與 Interface Oriented Design
※ 引述《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
推
02/14 15:22, , 1F
02/14 15:22, 1F
推
02/21 17:01, , 2F
02/21 17:01, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 9 篇):
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章