注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

对几种语言中的一些细节的分析  

2014-11-06 10:12:18|  分类: UML+设计模式 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

对几种语言中的一些细节的分析

最近安排在做Android的一些开发,Android平台上使用的是Java语言,虽然接触Java比较早,但真正在实践的工程中使用,还是从去年才开始。用得水平非常泛泛。

但在使用过程中还是发现了一些细节,对程序设计的思想包括设计语言的发展有了一些眉目上的了解。试举两个例子。

第一个就是回调。在C++JavaC#这三种语言里,出现的时间顺序正如前面的排列,所以你就可以比较清晰的看到回调的日益简化和方便。先看看C++

Typedef (*Fun)(void*)();

Void CallBack(void)

{

   Printf(“this is callBack”);

}

Void Test(Fun f)

{

         F();

}

但是C++C++0X以前原生不支持类成员函数的回调

再看Java:

Public Interface ICallBack

         CallBackFun();

public class Caller 

    public ICallBack  icb; 

 

    public void setCallBack(ICallBack cb) 

    { 

       this.icb= cb; 

    } 

 

    public void call(){ 

       this.icb.CallBack(); 

    } 

public class Exec  implements ICallBack

    public void CallBack() 

    { 

       System.out.println("回调"); 

    } 

 

    public static void main(String args[]) 

    { 

       Caller call = new Caller(); 

       call.setCallCallBack(new Exec ()); 

       call.call(); 

    } 

}

上面的调用方法也可以使用私有类创建的方法:

call.setCallCallBack(new ICallBack (){

public void CallBack(){

  //dosomething

}

});

再看C#

Action ac = null;

Void CallBack()

{

         //dosomething

}

Void Test()

{

         Ac = new Action(CallBack);//ac = ()=>{//dosomething}

         If (null != ac)

                   Ac();

}

 

从上面大家可以看到什么现象呢?C++在早期的版本原生是不支持类成员函数的回调的,因为其中存在着一个this指针,但是在JavaC#中都没 问题,无论是Java的回调还是C#中的委托,都是很容易实现的。所以从这些现象来看,从上到下,功能是越来越强大,应用却越来越简单,这就是后发语言的优势,他可以把以前的语言的一些东西毫不顾忌的改掉。

Java为了实现一个回调是比较复杂的,又要建立接口,又要实现类,又要设置,而在C#里相对来说要简单许多。

同样是接口,C++没有,只能用抽象类来代替,Java有,但是只有public,static ,final的属性,抽象方法和公有方法。而在C#中又进一步,可以设置属性和索引器。

这样看来,语言的发展,是在软件工程中不断遇到的问题过程内不断的改进的。当然,有的改进未必优秀,或者说有争议。

但从某种程度来看,改进就是有意义的,总比一潭死水不动要强。

由此面及,我们个人的学习和技术也要不断的改革和进步。否则,就是死路一条。

 

 

  评论这张
 
阅读(335)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017