作者yzugsr (Bird)
看板Ruby
标题Re: [问题] Ruby 与 Interface Oriented Design
时间Wed Feb 14 14:19:14 2007
※ 引述《fayhong (风起的瞬间)》之铭言:
: 我们在写 Java 的时候,有种东西叫 interface,
: C++ 与 Objective-C 也有,但是作用跟 Java 好像又不太一样
: 在 Java 中,我们可以定义 interface,藉以告诉实作的人要做哪些功能,
: 甚至在 Test Driven 的实作过程中,只需要先定义好 interface,
: 就可以动手写 unit test 的东西
: 只不过,在 Ruby 中,要怎麽做这种"空壳"呢?
: 或者是,有什麽样的设计方法可以取代我原本的想法呢 @@a
一点浅见 请指教
在ruby里, interface的观念应该直接用duck typing的观念实作
==别挑我语法错, 下面都是pesudo code==
例: Java
interface Animal {
public void move();
}
class Dog implements Animal{
public void move() { System.out.println("小狗趴趴走"); }
class Bird implements Animal {
public void move() { System.out.println("笨鸟慢慢飞"); }
Ruby:
class Dog
def move, puts "Dogs walk"; end; end
class Bird
def move, puts "Birds fly"; end; end
interface呢....以上我讲完等於没讲一样
所以老师说 ruby一定要写test case (丢笔)
(其实是这句书上说的....)
在test case里确认你认为每个是animal的class, 都implement了animal该有的method
这样做等於你把interface定义在test case里, 修改程式後记得跑test确认他是对的
class TC_Bird < Test::Unit::TestCase
test_acts_as_animal(Bird)
end
module AnimalTestHelper
def test_acts_as_animal(the_class)
obj = the_class.new
obj.move
end
end
class Test::Unit::TestCase, include AnimalTestHelper; end
类似这样吧 @@
一点小想法 请用力鞭
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.114.88.16