作者adrianshum (Alien)
看板Ruby
标题Re: [问题] Ruby 与 Interface Oriented Design
时间Wed Feb 21 15:19:05 2007
※ 引述《fayhong (风起的瞬间)》之铭言:
: 我们在写 Java 的时候,有种东西叫 interface,
: C++ 与 Objective-C 也有,但是作用跟 Java 好像又不太一样
: 在 Java 中,我们可以定义 interface,藉以告诉实作的人要做哪些功能,
: 甚至在 Test Driven 的实作过程中,只需要先定义好 interface,
: 就可以动手写 unit test 的东西
: 只不过,在 Ruby 中,要怎麽做这种"空壳"呢?
: 或者是,有什麽样的设计方法可以取代我原本的想法呢 @@a
先旨声明我只是 Ruby 的初学者 (在公司用了
两天的偷懒时间来看 tutorial :P )
首先你要说出你所谓的 interface-oriented
要的是什麽.
简单来说, interface oriented programming
要达到的只是: 你只是面对着一个 interface 来工作,
你只要用这个介面上的东西就好, 实际的 impl
是怎样的你是不用理会的.
所以单纯为了达到这个效果, 你只要和 "使用者"
协议好中间的 interface 就可以了.
Duck typing 已经足够达到这个效果有余. API provider
定义好 interface 是什麽 (i.e. 有什麽 method,
还有 method signature), 然後 API user就使用
这 interface, 这样其实就是 interface oriented
programming.
但如果你想要的是 compile time checking, 那麽
我就帮不上忙了 :P 以我所知, 由於 Ruby 是
Ducking type, 只有到真正跑时才能知道某 object
有没有支援某 'interface', 你最多只能在运作
是用 respond_to 在 runtime 检查. 这和 Java
(or C++ or C# etc) 在 compile time 已经能
"确定" interface 的支援很不同. 但这种又是 strongly-
typed language 的特徵, 要套在 Ruby 用又好像不太合适.
Alien
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 202.72.0.45
※ 编辑: adrianshum 来自: 202.72.0.45 (02/21 15:36)