前几天,园子里评论比较高的一篇文章是《如何向妻子解释OOD》,这篇文章用交谈的方式,用生活中的示例来讲述面向对象编程的一些相关概念。一般这样的文章读起来都会朗朗上口,也非常好理解,因为都是生活中实际的例子。但是也有读者在下面的评论里说,他以前经常看一些用小猫小狗,汽车等用来讲解面向对象的文章,看的时候很有感觉,但是事后很快就遗忘了,更别说应用到自己的项目中。

实际上这不难理解,面向对象本身的目的就是提高抽象层次。更抽象的东西当然也就更难理解,也更难操作。所以大部分面向对象的书籍也都以一些具体的示例来讲解,这样才好将一些东西落实,不然容易给人一种泛泛而谈的感觉。但是,因为每个人的项目都各有不同(或许是相同的,但每个人自己都认为不同-_-),除非你拿着我的项目给我讲解,不然总是难以给我很深的触动。那么作为学习者的我们要倒地如何学习面向对象编程呢?我想,我们必须寻找一种可操作性非常强的方法来,让我们养成一种习惯,然后再慢慢地提升抽象层次。可操作性强就意味着有明确的准入准出原则,有明确的度量标准;行就是行,不行就是不行(但万事万物没有绝对的,我想说的只是期望能用一种可操作强的方式帮助我们来培养出面向对象的思维习惯,如果你认为你已经能够熟练的使用面向对象,那大可以一笑而过)。

使用更有意义的命名

其实,在大部分编程活动中,我们都是在给各种各样的元素来命名,如果你取了一个好名字,不仅能让元素的职责马上清晰起来,而且能使代码更好维护。在命名的时候,注意尽量使用声明方式的词语,不要用实现来命名:比如GetUser显然比GetUserFromDataBase要好。如果你存在一个GetUserFromDataBase方法,很有可能后面会出现一个GetUserFromFile方法。我想,你应该能明白我的意思了吧,GetUserFormDataBase和GetUserFromFile更应该是两个兄弟类中的对等方法,这时迈向面向对象的第一步。

命名还有另外一个层次的意义:给一段表达式命名。如果一段表达式很难理解,你甚至要看好几眼,甚至要写一行注释来说明,那么我们为什么不将这个表达式提取为一个方法呢,然后给这个方法一个非常好的命名呢?提取方法之后,不仅代码更好理解了,而且这段表达式的抽象层次也就相应地提高了。而且,如果一个方法内部,各个部分理解的难易程度居然不一致,那么很可能是该方法内部各部分之间抽象层次不一致,有的地方太过于细节,有的地方又只覆盖大的方面。在《Clean Code》里Uncle Bob告诉我们,在同一级别的元素中抽象的层次应该是一样的。比如下面这段代码:

1: String defaultSignature = journalService.getDefaultSignature(journal);
if(StringUtils.isBlank(defaultSignature) && journal.hasEditor()){
return defaultSignature + journal.getEditor().getName();
   4: }

相关文章:

  • 2021-10-22
  • 2021-12-14
  • 2021-07-24
  • 2021-09-22
  • 2021-12-26
  • 2021-05-20
  • 2022-12-23
猜你喜欢
  • 2021-06-12
  • 2021-08-17
  • 2023-03-30
  • 2022-02-06
  • 2021-06-05
相关资源
相似解决方案