2008-01-15
Ruby&Java比较之mixin
关键字: mixin
近日翻阅Rod Johnson的大作《J2EE Development without EJB》一书,在对AOP的阐述一章,看到如下内容。
AOP定义:
混入继承(mixin inheritance):一个“混入类”封装了一组功能,这组功能可以被“混入”到现有的类中,无须借助传统的继承。Java可以通过混入模拟多继承。混入通过“引介”实现。再看什么是“引介”。
引介(introduction):为一个现有的类或接口添加方法或字段。相当于对类的扩展。(把新功能介绍给现有类,多么形象!)
才接触java的mixin,一直以为mixin是ruby这类动态语言所特有的,看来是我错了,好东西谁都想拥有,没有可以借鉴别人的,只是不知道谁借鉴谁的。
说到mixin,不能不提接口,在"面向接口编程"被喊的铺天盖地的时候,mixin提供了更优雅的语言特性.
"面向接口编程"应该大力提倡,但接口的缺点也是众所周知,接口只是接口,没有具体实现,继承接口的类需要自己实现接口定义的各种方法,很多时候这些方法的实现是大同小异的,那就不得不一次次重复自己,repeat yourself已经是很痛苦的事情了,更不用说以后扩展维护的难度。
所以又出现了范型,generic programming。范型还不错,实现了数据类型无关的编程,这对很大一类问题都是很简单直接的解决办法,但是范型并没有很直接的解决继承接口无法继承实现的问题。并且,Ruby这样的动态语言本身就是数据类型无关的,并不需要范型这种东西,所以范型只是用来解救Java,C++,C#之类的.
Ruby提供的Mixin可以说是最直接的解决了接口继承的缺点。Mixin就是带有实现的接口。举个简单的例子吧。
其实对于动态语言来说,实现这些并不难,难的是Ruby把这些做的这么贴心,这么顺手,难怪Ruby能日益流行。
AOP定义:
混入继承(mixin inheritance):一个“混入类”封装了一组功能,这组功能可以被“混入”到现有的类中,无须借助传统的继承。Java可以通过混入模拟多继承。混入通过“引介”实现。再看什么是“引介”。
引介(introduction):为一个现有的类或接口添加方法或字段。相当于对类的扩展。(把新功能介绍给现有类,多么形象!)
才接触java的mixin,一直以为mixin是ruby这类动态语言所特有的,看来是我错了,好东西谁都想拥有,没有可以借鉴别人的,只是不知道谁借鉴谁的。
说到mixin,不能不提接口,在"面向接口编程"被喊的铺天盖地的时候,mixin提供了更优雅的语言特性.
"面向接口编程"应该大力提倡,但接口的缺点也是众所周知,接口只是接口,没有具体实现,继承接口的类需要自己实现接口定义的各种方法,很多时候这些方法的实现是大同小异的,那就不得不一次次重复自己,repeat yourself已经是很痛苦的事情了,更不用说以后扩展维护的难度。
所以又出现了范型,generic programming。范型还不错,实现了数据类型无关的编程,这对很大一类问题都是很简单直接的解决办法,但是范型并没有很直接的解决继承接口无法继承实现的问题。并且,Ruby这样的动态语言本身就是数据类型无关的,并不需要范型这种东西,所以范型只是用来解救Java,C++,C#之类的.
Ruby提供的Mixin可以说是最直接的解决了接口继承的缺点。Mixin就是带有实现的接口。举个简单的例子吧。
module Mixin1 def fun1 print “I am fun1 from Mixin1″ end def fun2 print “I am fun2 from Mixin1. I’ll call a member function of the class which includes me” mem_fun end def fun3 print “I am fun3 from Mixin1. I’ll print out a member variable of the class which includes me” print mem_var end end class A include Mixin1 def mem_fun print “I am a member fun of class A” end def initialize @mem_var =”I am a member varaible of class A end end a = A.new a.fun1 a.fun2 a.fun3
其实对于动态语言来说,实现这些并不难,难的是Ruby把这些做的这么贴心,这么顺手,难怪Ruby能日益流行。
- 18:01
- 浏览 (2208)
- 评论 (1)
- 分类: Ruby&Rails
- 相关推荐
发表评论
- 浏览: 33440 次
- 性别:

- 来自: 北京

- 详细资料
搜索本博客
最近加入圈子
最新评论
-
痛苦的表设计 --- rails未 ...
这个事情说明了,项目一定要有个架构师负责整体架构设计。
-- by BirdGu -
痛苦的表设计 --- rails未 ...
在这种项目管理混乱,谁都可以捣浆糊的地方,楼主责无旁贷的背起了黑锅
-- by younggun -
痛苦的表设计 --- rails未 ...
rails的思想就是,“我的就是最简单的,我并不想做一个复杂无比包解决万事的超级 ...
-- by seemoon -
痛苦的表设计 --- rails未 ...
郁闷,建立模型关系真是犯难
-- by shaka -
痛苦的表设计 --- rails未 ...
我也在做一个项目使用多种语言开发, 后台是C,JAVA, web使用php , ...
-- by meng9999






评论排行榜