Java编码规范,让你的代码赏心悦目--对象和数据结构

21 篇文章 2 订阅
13 篇文章 2 订阅

  

  • 数据,对象的反对称性
    • 先来看一段过程式形状代码

此时给Geometry类添加一个primeter()函数,这些形状类根本不会因此而受影响。另一方面,如果添加一个新形状,就得修改Geometry中的所有函数来处理它

  • 再来看一段多态式形状

在这里,area()方法是多态的。不需要有Geometry类。如果添加一个新形状,现有的函数一个也不会受到影响,而当添加新函数时所有的形状都得做修改。

  • 这两种定义的本质是截然对立的。这说明了对象与数据结构之间的二分原理:
    • 过程式代码便于在不改动既有数据结构的前提下添加新函数;
    • 面向对象代码便于在不改动既有函数的前提下添加新类;
  • 反过来,也可以说得通:
    • 过程式代码难以添加新数据结构,因为必须修改所有函数;
    • 面向对象代码难以添加新函数,因为必须修改所有类;
  • 所以,对于面向对象较难的事,对于过程式代码却较容易,反之亦然!
    • 在一个程序中,如果需要添加新数据类型而不是新函数的时候,对象和面向对象就比较合适。而想要添加新函数而不是数据类型的时候,过程式代码和数据结构更合适;
  • 得墨忒耳律
    • 这条定律认为:类C的方法f只应该调用以下对象的方法:
      • C
      • f创建的对象;
      • 作为参数传递给f的对象;
      • C的实体变量持有的对象;
    • 方法不应调用由任何函数返回的对象的方法。换言之,只跟朋友谈话,不与陌生人谈话;

这类代码应该避免,编程如下的写法:

这些代码是否违反了得墨忒耳律取决于ctxt,opts,scratchDir是对象还是数据结构。如果是对象,则它们的内部结构应当隐藏而不暴露,而有关其内部细节的知识就明显违反了得墨忒耳律。

如果这些变量只是数据结构,没有任何行为,则它们自然会暴露其内部结构,得墨忒耳律也就无效了

所以,问题的关键是属性访问器函数造成的混乱。它们暴露了设置为私有的变量给外部。

  • 这里存疑,属性访问器的存在就是在获取或者设置私有变量时,进行一道设置,或者说过滤。保证传递的参数的有效性。虽然在某种程度暴露了私有变量,但利大于弊。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值