论坛首页 Java企业应用论坛

纯java程序员读effective c++体会

浏览 4047 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (4) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-31   最后修改:2011-10-31
一,对象的传递
c++在传递对象的时候,很关注到底是对象(即复制对象),还是引用(即传原对象),以及是否const,除了效率之外,还牵涉到是否可修改,也就是语言的严谨性
但是到了java中,因为语言没有强制要求,很容易出现本该复制的对象,本体却到处乱传,特别是愚蠢的自动生成getter,setter,就是万恶之源,
二,封装
先上例子
public class A{
  private int i = 0;
  public void a(){
    i++;
  }
  public void b(){
    i--;
  }
  public void c(){
    a();
    b();
  }
}

这代码OK吗?NO!封装要做的是什么?封装就是控制对象field的可见性,所以public field是糟糕的设计.
在例子里,a,b是应该见到i的,所以没错,c没用到i,所以他不应该见到i,应该移出class A
这里有一个面向对象的典型误区,认为一个对象的方法就应该放在对象中,抱着这种想法的话,必然导致对象臃肿
我再次强烈批判愚蠢的自动生成getter,setter,他使得对象毫无封装可言,罪恶直逼public field,而如果getter,setter里做了私活,就违反了最小惊愕原则,所以最好是确实地把该做的活做好,然后换个可读的方法名
三,效率
即使在c++,for循环里选择new对象还是赋值,到底哪个效率高,也是不一定的,要视情况而定.
这本书的内容,与其说是教你怎么写的有效率,不如说其实是教你怎么写的正确,所谓追求效率的写法,实在少有必要,真正重要的是正确的编码和正确的设计
   发表时间:2011-10-31  
gtssgtss 写道
一,对象的传递
c++在传递对象的时候,很关注到底是对象(即复制对象),还是引用(即传原对象),以及是否const,除了效率之外,还牵涉到是否可修改,也就是语言的严谨性
但是到了java中,因为语言没有强制要求,很容易出现本该复制的对象,本体却到处乱传,特别是愚蠢的自动生成getter,setter,就是万恶之源,
二,封装
先上例子
public class A{
  private int i = 0;
  public void a(){
    i++;
  }
  public void b(){
    i--;
  }
  public void c(){
    a();
    b();
  }
}

这代码OK吗?NO!封装要做的是什么?封装就是控制对象field的可见性,所以public field是糟糕的设计.
在例子里,a,b是应该见到i的,所以没错,c没用到i,所以他不应该见到i,应该移出class A
这里有一个面向对象的典型误区,认为一个对象的方法就应该放在对象中,抱着这种想法的话,必然导致对象臃肿
我再次强烈批判愚蠢的自动生成getter,setter,他使得对象毫无封装可言,罪恶直逼public field,而如果getter,setter里做了私活,就违反了最小惊愕原则,所以最好是确实地把该做的活做好,然后换个可读的方法名
三,效率
即使在c++,for循环里选择new对象还是赋值,到底哪个效率高,也是不一定的,要视情况而定.
这本书的内容,与其说是教你怎么写的有效率,不如说其实是教你怎么写的正确,所谓追求效率的写法,实在少有必要,真正重要的是正确的编码和正确的设计


现在我一般用shared_ptr 简化这种值传递,引用传递的问题。大致上和java一致。
0 请登录后投票
   发表时间:2011-11-02  
LZ的头像是神马东东啊
0 请登录后投票
   发表时间:2011-11-02  
xieye 写道
LZ的头像是神马东东啊

屁股
0 请登录后投票
   发表时间:2011-11-02  
windlike 写道
xieye 写道
LZ的头像是神马东东啊

屁股

像是一个8旬老太太的屁股
0 请登录后投票
   发表时间:2011-11-02  
这个都能愤一把?
0 请登录后投票
   发表时间:2011-11-02  
openFox 写道
windlike 写道
xieye 写道
LZ的头像是神马东东啊

屁股

像是一个8旬老太太的屁股

做技术的人哪,乱猜有意义么,google图片搜索懂不,搜下就知道了
0 请登录后投票
   发表时间:2011-11-02  
不完全同意
0 请登录后投票
   发表时间:2011-11-02  
不论是国内的源码,还是国外的,即便是JDK,我也没看到这种境界的代码。但是想法是好的
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics