锁定老帖子 主题:没有接口的语言中能否IOC?
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-06-22
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-06-22
ruby本身就是动态的语言
与java等静态语言不同 所以不需要接口 |
|
返回顶楼 | |
发表时间:2006-06-22
javavsnet 写道 ruby中没有接口,那么IOC的基础就没有了,也就是用ruby编程不能使用IOC模式。那么用ruby编程如何解决对象依赖问题呢?有什么ruby特有的解决方法么?
中毒了亚……接口是干什么用的呢?譬如说,这样一个接口 interface IPerson { String getName();; String say(String sentence);; } 它告诉了你什么? |
|
返回顶楼 | |
发表时间:2006-06-22
gigix 写道 中毒了亚……接口是干什么用的呢?譬如说,这样一个接口 interface IPerson { String getName();; String say(String sentence);; } 它告诉了你什么? 糊涂了。各种设计模式都告诉我面向接口编程的优越性,实现与接口分离的重要性。我理解接口是类对外的契约,是类的一部分特征。 这个接口告诉我 if dog instanceof IPserson { dog.say("i am person"); ; } |
|
返回顶楼 | |
发表时间:2006-06-22
我的理解是这样的:
在Spring里面,当一个类需要别的类的功能的时候,通过声明set方法,由IoC注入该依赖类,使得类具备了别的类才有的功能; 对于ruby来说,语言本身就有mixin的功能,当一个类需要别的类才有的功能的时候,直接mixin进来就行了; 本质上来说,IoC是用来解决单继承面向对象语言的mixin问题的,但是如果语言本身就有mixin功能的话,那么就不需要IoC了。 |
|
返回顶楼 | |
发表时间:2006-06-22
javavsnet 写道 这个接口告诉我
if dog instanceof IPserson { dog.say("i am person"); ; } 恩……显然你写程序不会这样写。实际上你写的是 // Dog implements IPerson dog.say("i am person"); ; 因为编译器会帮你检查,如果dog没有IPerson接口,这个调用就是编译错误。 javavsnet 写道 接口是类对外的契约
这是对的。但是可以细究下去:什么契约?实际上这个接口同时扮演着两个契约。第一,它约定了Dog类有哪些方法可以给别人使用,或者说它是一个语义契约;第二,它是一个编译契约,让编译器通过这段程序。这是两件独立的事情,只不过Java用编译器来校验语义契约,所以常常把这两件事混为一谈。 那么Ruby是没有编译过程的,所以Ruby也不需要interface这种语法构造来校验语义契约。Ruby的语义契约风格叫“duck typing”:如果它叫起来像鸭子,走起来像鸭子,那么它就是鸭子,虽然它并没有实现“鸭子”的接口。所以你的这个问题根本就是一个伪问题。按照Ruby的风格,所有的对象都有自己的“接口”(语义契约),要怎么IoC就怎么IoC好了。 |
|
返回顶楼 | |
发表时间:2006-06-23
其实ruby有一个仿hivemind的IoC容器,叫coplan,不怎么流行。所以我看不出有没有接口和能否IoC有什么必然联系。
IoC我的理解就是把显式的依赖声明转化成隐式的依赖注射。除了robbin说的mix-in, ruby还有很多别的‘悄悄’注入依赖的方法,如open class, class_eval和很多动态反射方法。这些在Rails中被大量使用,所以Rails没有内置IoC容器。 |
|
返回顶楼 | |
发表时间:2006-06-23
cookoo 写道 我看不出有没有接口和能否IoC有什么必然联系。
这句话彻底点醒了我,我的问题的却是一个伪问题。首先接口和能否IoC没有联系,其次ruby中使用duck type ,等于所有对象都有接口。哈哈,明白了。谢谢各位。 |
|
返回顶楼 | |
发表时间:2006-06-23
ruby里面的"接口"和java里的一个最大的区别是,前者是隐式的,后者是显式抽象, 都有各自的好处和不足. 实际上对于任何一个java应用的设计而言,也可以使用这类隐式的方式,在整个层次中不用接口就可以了.
这个可能是一个哲学问题,或者是一个实践取向问题。就像一个人喜欢白色或者蓝色,没什么好讨论的。 |
|
返回顶楼 | |
发表时间:2006-06-24
虽然接口在动态语言中失去了大部分存在的意义,不过也不是完全没用的:保持清晰的软件结构,作为文档的一种。尤其在企业级应用中。
|
|
返回顶楼 | |