高内聚,低耦合

说来惭愧,作为计算机科学专业的学生,我竟然到了大三才第一次听说“高内聚,低耦合”这个软件工程的概念。原因上说一是我平时不认真好学,不主动学习软件工程,第二是之前的半年中我在计算机的学习上遇到了一些瓶颈,很多知识、概念学不进去。

前两天在CSDN提问了一个关于MVC设计模式的问题,一直没人回答。昨天上线,发现楼下两个人都在给我说“高内聚,低耦合”这个事儿。内聚,我一听好家伙,这个肯定是化学的事儿,多半是有机化学什么的;耦合更厉害啦,电工口儿的事儿我更是一向学的不精。当时我也没多想,不懂装懂地把帖子结了。今天考完大物坐在这儿看酷客这个我最近追的比较多的技术博客,陈皓老师刚写了一篇《如何理解面向对象编程》,看了一些对盲目使用面向对象结构的批判后,我又在文章末尾看见了“高内聚,低耦合”这东西。我一拍大腿,这不能忍啊,怎么半年不好好学电脑,全世界都在说我不知道是什么的东西啊!谷歌之!百度之!

学习一下其实这俩词儿意思都很简单,高内聚说的是一个模块干一个事儿,低耦合是说增加模块的独立性。这两点导师无论是Java还是C++编程都一再和我强调(我导师挺固执的,不说这些设计模式要严格遵守,就连 { 在定义行末还是第二行起始都得按照他意思来)。听起来意思简单,理解起来还是有点困难的。一是为什么?二是怎么做?在学习Java的时候除了英文的教科书,我还曾使用过国内某一流大学使用的Java教材,该教材只能说把Java语言的格式交给了学生,但其中面向对象概念接近没有,所有例程无论多大多长全部使用一个.java文件完成,所有方法都直接扔在主类中。这直接造成了我很长时间对面向对象的困惑,有那么个几个月我都觉得整个源码就一个文件多好啊,看起来也方便。现在想想要是喜欢一个文件的源码,还不如不用面向对象呢,很多事儿反而方便些。至于怎么做,这真的就不是我能写写说说的了,我确实没有深入学习软件工程,自己的代码积累也不足够对此评述。

其实我想说的根本不是什么软件工程的事儿,而是人生。

今天我坐在这里想“高内聚,低耦合”到底有什么优点,我突然就想到人生是不是也该这样呢?现在的社会和18世纪已经不同了,信息大爆炸,博学家出现的几率较小了。我们更应该做的是专注做好一件事,在一个领域做精,而不是什么都会点儿,什么弄得都不好。“高内聚”说的正是专注做人的道理,“低耦合”告诉了我们如果对另外的方面感兴趣,可以在进行完一件事以后再进行另一件,减少不同任务相互之间的影响。从软件工程上说,高内聚低耦合的设计模式在短期内看不见较大回报,反而增加了设计难度;但从长远来看,重用性、扩展性大大提高,利于持续发展。生活中更是这样,今天对骑马感兴趣,学学骑马,明天对射箭感兴趣了,强忍着不去射箭,非要把骑马练好再去不可。短期上看,当时情绪被抑制的自己当然是不高兴;但从长远上说呢?如果一天骑马一天射箭,最后可能一事无成,练好骑马再去射箭,哪怕最后因为抑制自己导致了不再想射箭了,至少练好了骑马吧?要是都能练好了,以后至少拿得出手了吧?骑射也能练了吧?

其实生活也讲究个重用、扩展,也讲究个可持续。

Tian Zheng /
Published under (CC) BY-NC-SA in categories code  tagged with